Scite 其他 |
|
OpenOther(file)
将在另一个 SciTE 窗口中打开文件;如果没有,SciTE 将再次启动。在这些说明中,当我提到另一个“窗口”时,我指的是另一个 SciTE 的 *实例*(Emacs 用户会称之为另一个“框架”)。
您可以在 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 来分隔目标和替换字符串。
也许最有潜力的动词是“扩展器”,它允许您在另一个实例中执行 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 库还提供了一个“安静”的替换,Execute(cmd)
,用于 os.execute()
,它不会显示那个讨厌的闪烁黑框。
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