Konfiguration von Emacs

 

Konfiguration von Emacs

Hier sind ein paar Tipps zur Konfiguration von Emacs.

Soweit nicht anders angegeben beziehen sich alle Anleitungen auf einen selbstkompilierten GNU Emacs 23.1.50.1 unter Ubuntu Linux 9.04

Modulare .emacs

Um meine Emacs-Konfiguration übersichtlich zu halten, teile ich sie in verschiedene Dateien auf, die von my-site-start geladen werden.

Dazu habe ich die Datei my-site-start.el in das Verzeichnis ~/.emacs.d/ kopiert und am Anfang meiner ~/.emacs die Zeilen:

(autoload 'my-site-start "~/.emacs.d/my-site-start" nil t)
(my-site-start "~/.emacs.d/site-start.d/")

eingefügt. Die einzelnen Konfigurationsdateien befinden sich dann im Verzeichnis ~/.emacs.d/site-start.d/. Jeder Dateiname beginnt mit einer zweistelligen Zahl, die Dateien werden von my-site-start in aufsteigender Reihenfolge der Zahlen verarbeitet.; Dateien, deren Namen nicht mit einer zweistelligen Zahl beginnt, werden ignoriert:

~/.emacs.d/site-start.d$ ls
00load-path.el    50chop.el       50ibuffer.el    50redo.el
00yes-no.el       50desktop.el    50icomplete.el  50ruby.el
40cedet.el        50dired.el      50iswitch.el    50slime.el
40colortheme.el   50ecb.el        50keys.el       50table.el
45my-theme.el     50face-list.el  50look+feel.el  50tempbuf.el
46use-my-theme.el 50flyspell.el   50modeline.el   50tex.el
50bm.el           50gnus.el       50moveline.el   50w3m.el
50boxes.el        50hippie.el     50opacity.el    60utilities.el

Pfad für fremde Lisp-Pakete

Fremde Lisp-Pakete befinden sich bei mir im Verzeichnis ~/.emacs.d/site-lisp. Damit Emacs sie dort findet, muss die Variable load-path angepasst werden:

(add-to-list 'load-path "~/.emacs.d/site-lisp")

Bei mir steht dieser Code in der Datei ~/.emacs.d/site-start.d/00load-path.el

Ich könnte auch alle fremden Pakete in Unterverzeichnisse von ~/.emacs.d/site-start.d/ legen, dann würde my-site-start diese Verzeichnisse automatisch zum load-path hinzufügen, aber ich habe das lieber getrennt.

Pakete installieren mit package.el

package.el ist ein einfacher Paket-Manager zur Verwaltung von Paketen aus dem Emacs Lisp Package Archive (ELPA).

Die Installation ist einfach: Kopieren sie folgenden Code in den *scratch*-Buffer und positionieren sie den Cursor hinter die letzte schließende Klammer. Dann drücken Sie C-j.

(let ((buffer (url-retrieve-synchronously
             "http://tromey.com/elpa/package-install.el")))
(save-excursion
  (set-buffer buffer)
  (goto-char (point-min))
  (re-search-forward "^$" nil 'move)
  (eval-region (point) (point-max))
  (kill-buffer (current-buffer))))

Emacs führt jetzt den Code aus, läd alle benötigten Dateien aus dem Netz und fügt den nötigen Code in Ihre ~/.emacs ein, damit package.el beim Start von Emacs geladen wird (die Original-Installations-Anleitung finden Sie hier).

Damit package.el mit my-site-start zusammenarbeitet, habe ich den in meine ~/.emacs eingefügten Code

;;; This was installed by package-install.el.
;;; This provides support for the package system and
;;; interfacing with ELPA, the package archive.
;;; Move this code earlier if you want to reference
;;; packages in your .emacs.
(when
    (load
     (expand-file-name "~/.emacs.d/elpa/package.el"))
  (package-initialize))

ausgeschnitten und in die Datei ~/.emacs.d/site-start.d/10elpa.el eingefügt.

Damit ist die Installation fertig, Sie können jetzt mit M-x package-list-packages die Liste der unterstützten Pakete anzeigen lassen. Mit i können Sie ein Paket für die Installation markieren, mit d für die Deinstallation und mit u eine Markierung aufheben. Mit x werden die gewünschten Aktionen dann umgesetzt, mit q verlassen Sie den Paketmanager und mit h wird ein kurzer Hilfetext angezeigt.

Textbausteine mit YASnippet

Mit YASnippet kann man sehr einfach auch ohne LISP-Kenntnisse auch kompliziertere Textbausteine erstellen.

Ich habe YASnippet über package.el installiert. Um eigene Textbausteine anlegen zu können, setze ich die Variable yas/load-directory:

(yas/load-directory "/home/diesch/.emacs.d/yasnippets")

Dieser Code steht bei mir in der Datei ~/.emacs.d/site-start.d/50yasnippet.el und wird daher von my-site-start automatisch ausgeführt, nachdem package.el YASnippet geladen hat.

YASnippet kommt mit vielen vordefinierten Textbausteinen. Die Textbausteine kann man entweder über das Menü YASnippet auswählen, oder man gibt den Namen des Bausteins als normalen Text ein und drückt dann Tab

Textboxen mit boxquote

Mit dem Paket boxquote kann man Text in der Art

,----
| Dies ist ein Beispiel
| für eine Textbox
`----

markieren.

Ich habe die Datei boxquote.el in ~/.emacs.d/site-lisp gespeichert. In ~/.emacs.d/site-start.d/50boxquote lade ich das Paket und definiere ein paar Tastenkombinationen mit dem Präfix C-c b:

(require 'boxquote)

(global-set-key (kbd "C-c b y")   'boxquote-yank)
(global-set-key (kbd "C-c b r")   'boxquote-region)
(global-set-key (kbd "C-c b u")   'boxquote-unbox-region)
(global-set-key (kbd "C-c b t")   'boxquote-title)
(global-set-key (kbd "C-c b i")   'boxquote-insert-file)
(global-set-key (kbd "C-c b k")   'boxquote-kill)
(global-set-key (kbd "C-c b s")   'boxquote-shell-command)

(global-set-key (kbd "C-c b b")   'boxquote-buffer)
(global-set-key (kbd "C-c b p")   'boxquote-paragraph)
(global-set-key (kbd "C-c b n")   'boxquote-narrow-to-boxquote)

(global-set-key (kbd "C-c b w")   'boxquote-where-is)
(global-set-key (kbd "C-c b d f") 'boxquote-describe-function)
(global-set-key (kbd "C-c b d k") 'boxquote-describe-key)
(global-set-key (kbd "C-c b d v") 'boxquote-describe-variable)

HTML mit nXhtml und html-helper-mode

Ich benutze nXhtml für XHTML und html-helper-mode für HTML-Dateien. html-chooser_mode sorgt dafür, dass ich für neue Dateien wählen kann, was ich haben will (XHTML oder HTML), und existierende Dateien automatisch im richtigen Mode (nXhtml für XHTML, html-helper-mode für HTML) geöffnet werden.

Die Installation ist einfach:

  • Von html-helper-mode die aktuelle Version runterladen und nach ~/.emacs.d/site-lisp/html-helper-mode/ entpacken.
  • ~/.emacs.d/site-start.d/50html-helper-mode.el läd das Paket:
(add-to-list 'load-path "~/.emacs.d/site-lisp/html-helper-mode")

(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) auto-mode-alist))
  • Von nXhtml die aktuelle Version runterladen und nach ~/.emacs.d/site-lisp/nxhtml/ entpacken
  • ~/.emacs.d/site-start.d/50nxhtml-el läd das Paket:
(load "nxhtml/autostart.el")
  • html-chooser-mode als ~/.emacs.d/site-lisp/html-chooser-mode.el speichern

  • ~/.emacs.d/site-start.d/60html-chooser_mode.el läd das Paket nach nXhtml, damit die Datei-Zuordnung nicht überschrieben wird:

    (when (boundp 'magic-mode-alist)
      (setq magic-mode-alist
         (cons '("<\\?xml\\s " . nxml-mode) magic-mode-alist)))
    (setq auto-mode-alist (cons '("\\.x?html?$" . html-chooser-mode) auto-mode-alist))
    
    (setq html-chooser-mode-html-mode 'html-helper-mode)
    (autoload 'html-chooser-mode "html-chooser-mode")