Sous Emacs, il est possible d'accrocher des actions à chaque événement (ouverture d'un fichier, sauvegarde, lancement d'un mode, etc).
La bibliothèque autoinsert utilise cette fonctionnalité : lorsque vous ouvrez un nouveau fichier sous Emacs, cette bibliothèque insère, selon le type de ce fichier, une entête standard.
Dans notre cas, cette entête standard pourrait bien être la partie qui déclare le type de document (LinuxDoc), le titre, l'auteur et la date.
Je vais décrire ici deux façons d'insérer une telle entête. Soit en insérant un fichier que vous aurez préalablement écrit, soit en lançant une routine écrite en elisp.
Il faut tout d'abord préciser à Emacs d'exécuter la commande
auto-insert
à l'ouverture d'un fichier, puis lire la bibliothèque
autoinsert qui déclare la liste auto-insert-alist
qu'il
nous faut modifier, cette dernière définissant pour chaque type de fichier
l'entête à insérer. Le fichier à insérer doit par défaut se trouver dans le
répertoire ~/insert/
, mais il est possible de redéfinir la variable
auto-insert-directory
si l'on veut le placer ailleurs.
Voici les lignes à rajouter à votre .emacs
pour insérer le fichier
~/emacs/sgml-insert.sgml
à l'ouverture d'un nouveau fichier
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))
Vous pouvez alors écrire dans le fichier ~/emacs/sgml-insert.sgml
votre entête personnalisée, puis relancer Emacs et ouvrir un fichier
toto.sgml
. Emacs devrait alors vous demander de confirmer
l'insertion automatique, et dans l'affirmative insérer votre entête.
Cela fonctionne un peu comme précédemment, mais au lieu de préciser dans la
variable auto-insert-alist
un fichier à insérer, il faut préciser
une fonction à exécuter. Voici comment procéder, en supposant que l'on
écrive cette fonction dans un fichier ~/emacs/sgml-header.el
(inutile d'encombrer votre .emacs
avec cette fonction qui peut se révéler
assez longue) :
(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))
Vous pourrez trouver en
appendice un
exemple de cette fonction insert-sgml-header
.