LTUI v2.2 发布, 一个基于lua的跨平台字符终端UI界面库

Stella981
• 阅读 561

LTUI是一个基于lua的跨平台字符终端UI界面库。

此框架源于xmake中图形化菜单配置的需求,类似linux kernel的menuconf去配置编译参数,因此基于curses和lua实现了一整套跨平台的字符终端ui库。
而样式风格基本上完全参照的kconfig-frontends,当然用户也可以自己定制不同的ui风格。

另外,LTUI是完全跨平台的,windows上的terminal终端也是完全支持的,在windows上ltui会采用pdcurses来进行窗口绘制。

  • Github

更新内容

新版本中,我们主要增加了对鼠标事件的支持,除了 curses/ncurses,我们还对 windows 上 pdcurses 也做了支持,这里我们非常感谢 @laelnasan 贡献。

另外我们新增一个 tests/events.lua 测试用例,专门用来测试各种输入事件。

$ xmake run test events

我们可以通过这个测试例子,获取并显示用户的所有鼠标输入事件。

LTUI v2.2 发布, 一个基于lua的跨平台字符终端UI界面库

我们可以在自定义的view上,重写on_event来获取所有事件输入,包括所有的鼠标输入事件:

local demo = application()function demo:init()    application.init(self, "demo")    self:background_set("black")endfunction demo:on_event(e)    if e.type == "btn_code" then        print(e.btn_name, e.x, e.y)    end    application.on_event(self, e)enddemo:run()

安装使用

$ luarocks install ltui

如果要运行自带的测试,你需要先安装lua或者luajit程序去加载运行ltui源码仓库中的测试程序:

$ lua tests/dialog.lua$ lua tests/window.lua$ lua tests/desktop.lua$ lua tests/inputdialog.lua$ lua tests/mconfdialog.lua

或者

$ luajit tests/dialog.lua$ luajit tests/window.lua$ luajit tests/desktop.lua$ luajit tests/inputdialog.lua$ luajit tests/mconfdialog.lua

源码编译

通常只要luarocks安装好后就可以使用,如果想要本地调试,也可以源码编译后直接运行测试,首先我们需要先安装跨平台构建工具:xmake

$ xmake

xmake会自动下载lua, ncurses等相关依赖,然后我们直接通过xmake run加载相关测试程序即可:

$ xmake run test dialog$ xmake run test window$ xmake run test desktop$ xmake run test inputdialog$ xmake run test mconfdialog

应用程序

local ltui        = require("ltui")local application = ltui.applicationlocal event       = ltui.eventlocal rect        = ltui.rectlocal window      = ltui.windowlocal demo        = application()function demo:init()    application.init(self, "demo")    self:background_set("blue")    self:insert(window:new("window.main", rect {1, 1, self:width() - 1, self:height() - 1}, "main window", true))enddemo:run()

标签

local lab = label:new("title", rect {0, 0, 12, 1}, "hello ltui!"):textattr_set("white")

按钮

local btn = button:new("yes", rect {0, 1, 7, 2}, "< Yes >"):textattr_set("white")

输入框

function demo:init()    -- ...    local dialog_input = inputdialog:new("dialog.input", rect {0, 0, 50, 8})    dialog_input:text():text_set("please input text:")    dialog_input:button_add("no", "< No >", function (v) dialog_input:quit() end)    dialog_input:button_add("yes", "< Yes >", function (v) dialog_input:quit() end)    self:insert(dialog_input, {centerx = true, centery = true})end

组件

LTUI v2.2 发布, 一个基于lua的跨平台字符终端UI界面库

菜单配置

LTUI v2.2 发布, 一个基于lua的跨平台字符终端UI界面库

输入框

LTUI v2.2 发布, 一个基于lua的跨平台字符终端UI界面库

文本区域

LTUI v2.2 发布, 一个基于lua的跨平台字符终端UI界面库

Windows平台

LTUI v2.2 发布, 一个基于lua的跨平台字符终端UI界面库

Android/Termux平台

LTUI v2.2 发布, 一个基于lua的跨平台字符终端UI界面库

关注公众号

TBOOX开源工程

专注C跨平台开发解决方案

LTUI v2.2 发布, 一个基于lua的跨平台字符终端UI界面库

长按二维码关注

LTUI v2.2 发布, 一个基于lua的跨平台字符终端UI界面库

本文分享自微信公众号 - TBOOX开源工程(tboox-os)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
java基础知识随身记
2018年11月12日20:51:35一、基础知识:1、JVM、JRE和JDK的区别:JVM(JavaVirtualMachine):java虚拟机,用于保证java的跨平台的特性。  java语言是跨平台,jvm不是跨平台的。JRE(JavaRuntimeEnvironment):java的运行环境,包括jvmjava的核心类
Peter20 Peter20
3年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
2年前
LTUI v2.4 发布, 一个基于lua的跨平台字符终端UI界面库
LTUI是一个基于lua的跨平台字符终端UI界面库。此框架源于xmake中图形化菜单配置的需求,类似linuxkernel的menuconf去配置编译参数,因此基于curses和lua实现了一整套跨平台的字符终端ui库。而样式风格基本上完全参照的kconfigfrontends,当然用户也可以自己定制不同的ui风格。另外,LTUI是完全跨平
何婆子 何婆子
2个月前
基于 Flutter 3.x 实战跨平台混合开发
基于Flutter3.x实战跨平台混合开发download》chaoxingit.com/1291/在移动应用开发领域,跨平台混合开发成为一种备受关注的技术趋势。Flutter作为一款由Google推出的开源UI工具包,通过单一代码库支持多个平台,为开发者
linbojue linbojue
3星期前
选择前端还是.NET开发Web应用?如何做出明智的选择
前端开发前端开发主要涉及构建用户界面、实现交互和用户体验。以下是前端开发的特点和优势:响应式用户界面:前端技术(如HTML、CSS和JavaScript)可以创建跨平台、响应式的用户界面,适应不同设备和屏幕尺寸。丰富的库和框架:前端生态系统拥有众多成熟的库