Scite Lua 提示 |
|
这是一个小脚本,它使用 SciteExtMan 脚本管理器,并且是下载中的示例之一。
它使用 extman 的 scite_OnOutputLine
事件来获取在 SciTE 的输出窗格中输入的行,并使用 loadstring
编译它们。它为您提供了一种非常有用的方法来交互式地评估 Lua 表达式。可以定义单行函数。
Scite/Lua > = 10 + 20 30 > print 'hello dolly' hello dolly > function showkeys(t) for i in t do print(i) end end > showkeys(table) setn insert getn foreachi foreach sort remove concat >
即使您不认为自己会进行 Lua 编程,这个 Lua 提示也可用作智能计算器。
任何全局函数都可用。提供了一个函数 load
,它将从文件加载 Lua 代码。如果调用时没有参数,它将使用当前缓冲区。函数 edit
将在新的缓冲区中打开指定的文件。可以使用 工具|最近命令
(即 Ctrl-Alt-P
)获得下拉历史记录列表。
它对于学习 SciTE 和 Scintilla API 特别有用,因为 editor
和 output
窗格对象可以直接访问。您可以在编写完整的脚本之前测试特定操作。
> = output.Length 405 > output:AppendText('hello, world!\n') hello, world! >
SciTE Lua 环境对于那些期望全局对象在整个会话中都存在的用户来说,有一个令人讨厌的惊喜。如果您在 SciTE 中切换缓冲区,全局环境将被清除。只有在您的 Lua 启动脚本加载的文件中最初创建的全局对象才会被保留。
-- prompt.lua scite_Command('Last Command|do_command_list|Ctrl+Alt+P') local prompt = '> ' local history_len = 4 local prompt_len = string.len(prompt) print 'Scite/Lua' trace(prompt) function load(file) if not file then file = props['FilePath'] end dofile(file) end function edit(file) scite.Open(file) end local sub = string.sub local commands = {} local function strip_prompt(line) if sub(line,1,prompt_len) == prompt then line = sub(line,prompt_len+1) end return line end scite_OnOutputLine (function (line) line = strip_prompt(line) table.insert(commands,1,line) if table.getn(commands) > history_len then table.remove(commands,history_len+1) end if sub(line,1,1) == '=' then line = 'print('..sub(line,2)..')' end local f,err = loadstring(line,'local') if not f then print(err) else local ok,res = pcall(f) if ok then if res then print('result= '..res) end else print(res) end end trace(prompt) return true end) function insert_command(cmd) output:AppendText(cmd) output:GotoPos(output.Length) end function do_command_list() if table.getn(commands) > 1 then scite_UserListShow(commands,1,insert_command) end end