在 Emacs 下,您可以將任何事件外掛 (hook) 任何的動作(像是打開一個檔案,儲存,或執行一個新的模式,等等)。
您也可以利用 autoinsert 程式庫來執行一些特別的動作:當您在 Emacs 下開新檔案時,這個程式庫就會根據檔案的屬性來插入相符的標準頁首。
就我們的情形,這標準頁首就是我們說明文件型態 (LinuxDoc),標題,作者,及日期的地方。
接下來我會描述兩個如何插入這種頁首的方法。您可以插入一個含有相關資訊的模板 (template) 檔案,或者您也可以跑一跑 elisp 程式。
當您開啟一份檔案時,首先您必須告訴 Emacs 執行自動插入
,然後再讀取 autoinsert 程式庫的資料來宣告我們要改變的 auto-insert-alist
表單。這表單定義了不同檔案型態所要插入的頁首。它的預設值是要插入的檔案必須在 ~/insert/
目錄下,但如果您要重新定義其 auto-insert-directory
也是可行的。
每一次您開啟一份新的 SGML 檔案時,只要在 .emacs
檔案內加入下列指示,您就可以插入 ~/emacs/sgml-insert.sgml
檔:
(add-hook 'find-file-hooks 'auto-insert) (load-library "autoinsert") (setq auto-insert-directory "~/emacs/") (setq auto-insert-alist (append '((sgml-mode . "sgml-insert.sgml")) auto-insert-alist))
那您就可以在 ~/emacs/sgml-insert.sgml
檔寫入您自訂的頁首,然後再重新執行 Emacs 來開啟某一 foobar.sgml
檔案,之後 Emacs 會詢問您確認這自動插入的指令來插入您要的頁首。
這方法跟上述大同小異,但不同的是您必須設定 auto-insert-alist
表單,告訴它要插入的是一個執行程式,而非一個檔案。只要在 .emacs
檔案內加入下列指示,就可以自動執行,不過當然您得先把這程式寫在一個叫做 ~/emacs/sgml-header.el
的檔案裡才可以。(鑒於這函式可能會過長,您不需要將它放在 .emacs
檔案裡):
(add-hook 'find-file-hooks 'auto-insert) (load-library "autoinsert") (add-to-list 'load-path "~/emacs") (load-library "sgml-header") (setq auto-insert-alist (append '(((sgml-mode . "SGML Mode") . insert-sgml-header)) auto-insert-alist))
您可以參考
附錄裡有關 Insert-sgml-header
程式的例子。