Scite 其他

lua-users home
wiki

The SciteOther 库是一个小型 DLL,带有 Lua 驱动程序,允许您控制另一个 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


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2004 年 11 月 11 日上午 10:12 GMT (差异)