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

Stella981
• 阅读 473

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
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 )
Wesley13 Wesley13
1年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Wesley13 Wesley13
1年前
java基础知识随身记
2018年11月12日20:51:35一、基础知识:1、JVM、JRE和JDK的区别:JVM(JavaVirtualMachine):java虚拟机,用于保证java的跨平台的特性。  java语言是跨平台,jvm不是跨平台的。JRE(JavaRuntimeEnvironment):java的运行环境,包括jvmjava的核心类
Peter20 Peter20
2年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
1年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
1年前
LTUI v2.4 发布, 一个基于lua的跨平台字符终端UI界面库
LTUI是一个基于lua的跨平台字符终端UI界面库。此框架源于xmake中图形化菜单配置的需求,类似linuxkernel的menuconf去配置编译参数,因此基于curses和lua实现了一整套跨平台的字符终端ui库。而样式风格基本上完全参照的kconfigfrontends,当然用户也可以自己定制不同的ui风格。另外,LTUI是完全跨平
Wesley13 Wesley13
1年前
.NET Core AvaloniaUI实现多语言国际化
AvaloniaUI是一个基于.NetCore的跨平台桌面程序UI框架,如果使用AvaloniaUI有多语言国际化的朋友可以参考我这篇文章:这篇文章可以帮助你:1.根据用户系统设置的语言改变UI显示的语言2.可以在设计器中预览效果3.支持TextBox的Watermark属性4.支持ContentControl的Con
京东云开发者 京东云开发者
3个月前
Flutter状态管理新的实践 | 京东云技术团队
声明式UI其实并不是近几年的新技术,但是近几年声明式UI框架非常的火热。单说移动端,跨平台方案有:RN、Flutter。iOS原生有:SwiftUI。android原生有:compose。可以看到声明式UI是以后的前端发展趋势。而状态管理是声明式UI框架的重要组成部分。