Next Previous Contents

6. 一些投机的技巧

6.1 自动插入页首 (header)

在 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 程式的例子。


Next Previous Contents