FreeCRT 之 Lua Button Bar

FreeCRT在Button Bar中引入了Lua脚本语言,相对于SecureCRT的Button Bar将更加灵活,当然也更难驾驭,但对于真正的程序员来说,也许它会成为你手中的屠龙倚天。

脚本规则

Lua Button Bar以混合脚本的方式来支持Lua语言,如果你了解jsp或php在网页开发中的使用方式,那么你会很轻松的掌握Lua Button Bar的脚本。

例子:
plain text
plain text
<%
Lua scripts
%>
plain text <% Lua scripts %> plain text
plain text

Lua脚本以<%和%>对包括,我们称之为Lua script block, block的数量不受限制。block会依次执行,如果在之前的block声明了全局的符号(变量或函数),后续的block可以安全引用。

Lua库屏蔽

Lua的引入,只是为了解决Button Bar缺少动态生成脚本的能力,对于Lua库自带的一些系统性API,如文件的删除、改名,读写等,为安全起见全部封闭。

新引入API – nprint

nprint只是对print API的修改,可以读作no line feed print,不换行打印。另外输出的元素之间不会默认插入的制表符。除此以外,它的行为与print完全一致。

新引入API – dialog

API dialog的开发是我引入Lua语言的最直接动机。我希望用户在点击Button Bar按钮的时候,能够弹出对话框,接受用户的输入,再动态的产生脚本。虽然实现上有点复杂,同时Lua对table的操作也不如javascript简单,但还是做到了。

API原型:bool dialog(param)
输入参数:table类型的参数,用于构建用户所需要的对话框,我用table格式描述如下,
{
[‘title’]=’dialog title’,
[‘items’]={
{
[‘id’]=’name’, // 此id用于返回用户的输入值
[‘label’]=’input label’,
[‘type’]=’input control type’, // 支持列表: edit, droplist, dropdown
[‘options’]={‘opt1’, ‘opt2’, ‘opt3’}, // 仅对droplist, dropdown有效
[‘default’]=’opt1′, // 可选 默认值
[‘require’]=true, // 可选 默认为false,表示是否必须有值
},
{…},
{…}
}
}
返回值:boolean类型,如果为true表示用户选择了OK键,返回false表示用户选择非OK键关闭对话框。

当用户已OK返回时,dialog会创建全局变量返回用户的输入或选择值(均为字符串类型),变量名为用户指定的id名,用户可以通过_G[id]来获取值。

简单的例子

以一个简单的例子来作为本文的结束,

<%
para={
[‘title’]=’Test Dialog’,
[‘items’]={{
[‘id’]=’name’,
[‘label’]=’Name’,
[‘type’]=’edit’,
[‘default’]=’Your Name’,
[‘required’]=true
}, {
[‘id’]=’sex’,
[‘label’]=’Sex’,
[‘type’]=’droplist’,
[‘options’]={‘male’, ‘female’},
[‘default’]=’female’
}}
}

if (dialog(para)) then
sex = _G[‘sex’]
name = _G[‘name’]
nprint(“echo ‘Your name is “, name, ” and you are “, sex, “!’\n”)
end
%>

来看一下运行效果:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注