Next Previous Contents

6. Dirty Tricks

6.1 Inserting a header automatically

Emacs allows you to hook some actions to any event (opening of a file, saving, running a new mode, etc).

The autoinsert library uses this feature: when you open a new file under Emacs, this library inserts, according to the type of the file, a standard header.

In our case, this standard header could well be the part declaring the document type (LinuxDoc), the title, the author, and the date.

I will describe here two ways to insert such a header. You could insert a template file containing the information to insert, or you could run an elisp routine.

by inserting a file

You must first tell Emacs to run the auto-insert when opening a file, then to read the autoinsert library which declares the auto-insert-alist list which we need to change. This list defines the header to insert for each file type. By default, the file to insert must be in the ~/insert/ directory, but it is possible to redefine the auto-insert-directory variable if you want to put it somewhere else.

Add the following lines to your .emacs file to insert the ~/emacs/sgml-insert.sgml file each time you open a new SGML file:

      (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))
      

You can then write in the ~/emacs/sgml-insert.sgml file your customised header, then re-run Emacs and open some foobar.sgml file. Emacs should ask you to confirm the automatic insertion, and if you answer yes, insert your header.

by running a routine

This works like before, but instead of setting the auto-insert-alist to a file to insert, you need to set it to a function to execute. This is how to proceed, taking for granted you want to write this function in a file named ~/emacs/sgml-header.el. (there's no need to burden your .emacs file with such a function, as it may turn out to be quite long):

      (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))
      

You will find in appendix an example of insert-sgml-header function.


Next Previous Contents