Scite Other

lua-users home
wiki

SciteOther 函式庫是一個小型 DLL,附帶 Lua 驅動程式,可讓您控制 SciTE 的另一個執行個體。例如,OpenOther(檔案) 會在另一個 SciTE 視窗開啟檔案;若無任何其他 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(字詞,引數),因此 OpenOther(檔案) 等同於 PerformOther('開啟',檔案)

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 介面的設計如此,以便使用者能夠搜尋特殊字元等。例如,這將取代另一個視窗中所有 tab 字元,改為空白字元

   PerformOther('replaceall','\t\000 ')

這裡使用八進位常數 \000 來區分目標字串與替換字串。

潛力最大的字詞可能是「擴充器」,這允許您在另一個執行個體中執行 Lua 程式碼。例如,這段程式碼會移至另一個視窗中的某個位置,並呼叫 Lua 函式以標示該位置。

   PerformOther('goto',line)
   PerformOther('extender','mark_current_line()')

執行此程式碼的 SciTE 執行個體(可以這麼說)也能受這些指令的控制,而且此用途非常實用。Perform 函數會在目前的視窗中執行這些指令。例如,Perform('關閉') 會關閉目前的緩衝區。特別好用的字詞是「功能表指令」,因為這允許您完整存取任何 SciTE 透過功能表提供的功能。我提供 Command(指令) 來利用此功能,並從 SciTE.h 擷取大多數好用的功能表識別碼。例如,Command 'IDM_BOOKMARK_TOGGLE' 會在游標位置設定書籤。

最後, SciteOther 函式庫也提供一個「靜音」替換,Execute(指令),供 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 (差異)