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