Page suivante - Page précédente - Table des matières

6. Pour aller plus loin

6.1 Insertion automatique d'une entête

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.

par l'insertion d'un fichier

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.

par l'exécution d'une routine

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.


Page suivante - Page précédente - Table des matières