Emacs låter dig hook-a vissa funktioner till händelser (öppna en fil, spara, köra igång ett nytt läge osv).
autoinsert-biblioteket använder denna funktion: när du öppnar en ny fil under Emacs, så infogar detta bibliotek, i enlighet med filtypen, ett standardiserat dokumenthuvud.
I vårt fall skulle detta standardiserade huvud kunna vara den del som deklarerar dokument-typen (LinuxDoc), titeln, författaren och datumet.
Jag ska beskriva två sätt att infoga ett sådant huvud. Du skulle kunna infoga en förpreparerad fil, vilken innehåller denna information, eller så kan du köra en elisp-rutin.
Först måste du säga åt Emacs att köra auto-insert
-läget
då en fil öppnas, att sedan läsa autoinsert-biblioteket,
vilket deklarerar auto-insert-alist
-listan, vilken vi
måste ändra i. Denna lista anger huvudet som ska infogas för varje
filtyp. Som standard måste filen som ska infogas finnas i
~/insert/
-katalogen, men det är möjligt att ändra
auto-insert-directory
-variabeln, om du vill lägga den
någon annanstans.
Lägg till följande rader till din .emacs
-fil, för att
infoga filen ~/emacs/sgml-insert.sgml
, varje gång du
öppnar en ny SGML-fil:
(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))
Sedan kan du skriva in ditt specialkomponerade huvud i filen
~/emacs/sgml-insert.sgml
, starta om Emacs och öppna
t.ex. foobar.sgml
-filen. Emacs ska då be dig bekräfta
att filen ska infogas automatiskt, och om du svarar ja så ska
filen infogas.
Detta fungerar som förut, men istället för att sätta
auto-insert-alist
till en fil att infoga, så måste du
sätta den till en funktion att köra. Så här ska du göra, om du
vill skriva denna funktion i en fil som heter
~/emacs/sgml-header.el
(det finns ingen anledning att
betunga din .emacs
-fil med en sådan funktion, eftersom
den kan bli ganska lång):
(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))
I
appendixet hittar du ett
exempel på en insert-sgml-header
-funktion.