Nästa Föregående Innehållsförteckning

6. Fula knep

6.1 Att automatiskt infoga ett dokumenthuvud

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.

Genom att infoga en fil

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.

Genom att köra en rutin

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.


Nästa Föregående Innehållsförteckning