Emacs 允许你将一些操作挂钩到任何事件上(例如打开文件、保存、运行新模式等等)。
autoinsert 库使用了这个特性:当你在 Emacs 中打开一个新文件时,这个库会根据文件类型插入一个标准页眉。
在我们的例子中,这个标准页眉可以很好地是声明文档类型 (LinuxDoc)、标题、作者和日期的部分。
我将在这里描述两种插入这种页眉的方法。你可以插入一个包含要插入信息的模板文件,或者你可以运行一个 elisp 例程。
你必须首先告诉 Emacs 在打开文件时运行 auto-insert
,然后读取 autoinsert 库,该库声明了我们需要修改的 auto-insert-alist
列表。此列表定义了每种文件类型要插入的页眉。默认情况下,要插入的文件必须在 ~/insert/
目录中,但是如果你想把它放在其他地方,可以重新定义 auto-insert-directory
变量。
将以下行添加到你的 .emacs
文件中,以便每次打开新的 SGML 文件时都插入 ~/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/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
函数的示例。