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.
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.
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.