Verder Terug Inhoud

6. Truuks

6.1 Automatisch invoegen van een header

Emacs staat je toe om een aantal acties aan een event te koppelen (openen van een bestand, opslaan, opstarten van een nieuwe mode, enz).

De autoinsert library maakt van deze faciliteit gebruik: als je een nieuw bestand onder Emacs opent, voegt deze library, overeenkomstig het type bestand, een standaard header in.

In ons geval, zou deze standaard header evengoed het deel kunnen zijn dat het documenttype (LinuxDoc), de titel, de auteur, en de datum declareert.

Ik zal hier twee manieren beschrijven om een dergelijke header in te voegen. Je zou een sjabloon-bestand met informatie in kunnen voegen, of je zou een elisp-routine op kunnen starten.

door het invoegen van een bestand

Je moet Emacs eerst laten weten dat het de auto-insert opstart als het een bestand opent, dan de autoinsert library in te lezen, die de auto-insert-alist lijst declareert die we moeten wijzigen. Deze lijst definieert de header voor ieder bestandstype die moet worden ingevoegd. Standaard moet het bestand dat moet worden ingevoegd in de ~/insert/ directory staan, maar het is mogelijk om de auto-insert-directory variabele te herdefiniëren, als je het ergens anders wilt plaatsen.

Voeg de volgende regels toe aan je .emacs bestand om het bestand ~/emacs/sgml-insert.sgml iedere keer dat je een nieuw SGML-bestand opent, in te voegen:

(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))

Vervolgens kun je in het bestand ~/emacs/sgml-insert.sgml je aangepaste header wegschrijven en dan Emacs opnieuw opstarten en één of ander bestand foobar.sgml openen. Emacs zou je moeten vragen om de automatische invoeging te bevestigen en als je `yes' antwoordt, je header invoegen.

door het opstarten van een routine

Dit werkt net als voorheen, maar in plaats van de auto-insert-alist in te stellen op een bestand dat moet worden ingevoegd, zul je het in moeten stellen op een functie die moet worden uitgevoerd. Zo kunt je verdergaan, ervan uitgaande dat je deze functie wilt wegschrijven in een bestand met de naam ~/emacs/sgml-header.el. (het is niet nodig je .emacs bestand met een dergelijke functie te belasten, aangezien het nogal lang kan worden):

(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))

In de appendix zul je een voorbeeld aantreffen van de insert-sgml-header functie.


Verder Terug Inhoud