Emacs permette di associare delle procedure ad eventi specifici (aprire un file, salvarlo, avviare una nuova modalità etc ).
La libreria autoinsert utilizza questa caratteristica: quando aprite un nuovo file con Emacs, questa libreria inserisce, dipendentemente dal tipo di file, un header standard.
Nel nostro caso, questo header standard può definire il tipo di documento (LinuxDoc), il titolo, l'autore, e la data.
Descriverò adesso due modi per fare questo. Potete creare un template che contenga le informazioni da inserire, oppure potete avviare una routine elisp.
Per prima cosa dovete permettere a Emacs di avviare la auto-insert
quando un file viene aperto, quindi di leggere la libreria auto-insert
che dichiara la auto-insert-alist
che necessita di cambiamenti. Questa lista definisce gli header da inserire per ogni tipo di file. Per default, il file da inserire deve trovarsi nella cartella ~/insert/
, ma è possibile definire la variabile auto-insert-directory
se volete mettere i vostri file da qualche altra parte.
Aggiungere le seguenti linee al vostro .emacs
per il inserire il file ~/emacs/sgml-insert.sgml
ogni volta che aprite un nuovo documento 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))
A questo punto potete scrivere nel file ~/emacs/sgml-insert.sgml
il vostro header personalizzato, quindi riavviare Emacs e aprire qualche nuovo file .sgml. Emacs dovrebbe chiedervi la conferma per l'inserimento automatico, e se rispondete 'Yes', inserire il nuovo header.
Questo funziona come prima, ma invece di impostare la
auto-insert-alist
in un file da inserire, dovete
impostare una funzione da eseguire. Questo è il procedimento,
assumendo come esempio che volete scrivere una funziona in un
file chiamato ~/emacs/sgml-header.el
(non è il caso di appesantire il vostro .emacs
con questo tipo di funzioni, oppure diventerà troppo grande):
(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))
Troverete nella
appendice un esempio di una funzione insert-sgml-header
.