Scite Other |
|
OpenOther(file) 会在另一个 SciTE 窗口中打开文件;如果没有,SciTE 将会重新启动。在这些说明中,当我提到另一个“窗口”时,我指的是 SciTE 的另一个实例(Emacs 用户称之为另一个“frame”)您可以在 http://home.mweb.co.za/sd/sdonovan/scite_other.zip 找到 DLL(已编译和源代码)以及驱动程序。将 DLL 放在 SciTE 可执行文件的同一目录中(“默认主目录”),并从您的 Lua 启动文件中加载 Lua 代码。
该库使用外部 SciTE Director 接口向 SciTE 发送命令。其中一部分命令在 SciTE 帮助的“命令行参数”部分给出,但还有其他可用的命令——最终参考是 SciTEBase::PerformOne (SciTEBase.cxx, 4287)。提供了一个通用函数 PerformOther(verb,arg),因此 OpenOther(file) 等同于 PerformOther('open',file)。
close cwd change working directory find search text goto line number[,column number] open file name quit replaceall search text\000replacement text saveas file name loadsession session file extender Lua expression menucommand menu id These export commands apply to the currently shown file: exportashtml output file exportasrtf '' exportaspdf '' exportaslatex '' exportasxml ''
请记住,这些“动词”的参数必须是 C(或 Lua)风格的字符串。Director 接口就是这样设计的,以便可以搜索特殊字符等。例如,这将在另一个窗口中将所有制表符替换为空格
PerformOther('replaceall','\t\000 ')
这里使用八进制常量 \000 来分隔目标字符串和替换字符串。
也许最具潜力的动词是 'extender',它允许您在另一个实例中执行 Lua 代码。例如,此代码将在另一个窗口中移动到某个位置,并调用 Lua 函数来标记该位置。
PerformOther('goto',line)
PerformOther('extender','mark_current_line()')
正在运行程序的 SciTE 实例(可以说)也可以通过此类命令进行驱动,这非常有用。Perform 函数在当前窗口中执行这些命令。例如,Perform('close') 将关闭当前缓冲区。一个特别有用的动词是 'menucommand',因为这使您可以完全访问通过菜单可用的任何 SciTE 功能。我已经提供了 Command(cmd) 来利用这一点,并从 SciTE.h 中提取了大部分有用的菜单 ID。例如,Command 'IDM_BOOKMARK_TOGGLE' 将在光标位置设置一个书签。
最后,SciteOther 库还为 os.execute() 提供了一个“安静”的替代方案 Execute(cmd),它不会出现那个讨厌的黑色闪烁框。
scite_other 仅适用于 Win32 平台,但编写等效的 Linux 共享库并不困难。scite_other.c 实际上是希望了解 SciTE Director 接口的人的一个很好的参考。
此 Lua 函数将关闭当前文件并在另一个窗口中打开它。
function open_in_other()
local file = props['FilePath']
Perform('close')
OpenOther(file)
end
书签是一个非常有用的 SciTE 功能,但它们不会强制将行位置置于屏幕中央。这是“下一个书签”的一个替换项,它会将行强制置于屏幕中央。
function next_bookmark()
Command 'IDM_BOOKMARK_NEXT'
local line = editor:LineFromPosition(editor.CurrentPos)
local top = editor.FirstVisibleLine
local middle = top + editor.LinesOnScreen/2
editor:LineScroll(0,line - middle)
end
这将在另一个窗口中查找提供的单词并设置一个书签
function find_in_other(f)
PerformOther('find',f)
Command('IDM_BOOKMARK_TOGGLE','other')
end