Scite Other |
|
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