Konfiguration im Org-Mode#
Die Zeit vor dem Org-Mode#
Im Laufe der Zeit habe ich unterschiedlichste Konfigurationsstrategien ausprobiert. Nachdem ich mich intensiver mit dem org-Mode beschäftigt hatte, war die Umsetzung der Konfiguration über den org-Mode die für mich überzeugendste Variante. Holger Schurig hat das Prinzip beschrieben.
- Quelle:
Die Website mit dem Artikel dazu ist leider nicht mehr verfügbar (nur noch über die Wayback-Machine!
https://web.archive.org/web/20161010010342/http://www.holgerschurig.de/en/emacs-init-tangle
Das Reopsitory ist weiterhin erreichbar:
https://bitbucket.org/holgerschurig/emacsconf
Wie ich seine Lösung umgesetzt habe, soll hier dokumentiert werden.
Konfiguration des emacs im org-Mode#
Org-Dateien haben zwei Voreile:
Den Klappmechanismus für Überschriften, der für Übersicht in langen Texten sorgt.
Die Möglichkeit Code in das Dokument zu integerieren, der als Dokumentation dienen, aber auch ausgeführt werden kann. Das nennt man dann »Literal Programming«.
Dies hat zur Folge, dass die Übersicht und eine feingliedrige Konfiguration erhalten bleibt und einzelne Teile separat getestet werden können.
Inhalt von .emacs#
Die .emacs bleibt weiterhin das zentrale Element der Konfiguration. Ausgelagert sind wichtige Teile in eine Datei config.org Die .emacs enthält nun eine Funktion welche die Datei config.org einliest, daraus eine config.el generiert und diese generierte Datei mit dem Start des EMACS ausführt.

Schritt I: Inhalt der .emacs#
In den hervorgehobenen Zeilen können die Pfade individuell angepasst werden.
1;; Peter EMACS-Konfiguration
2;; 1. config.org wird eingelesen
3;; 2. alle SRC-Blöcke werden evaluiert und nach config.el geschrieben
4;; 3. die generierte config.el wird geladen und damit der EMACS konfiguriert
5;; Quelle(n): http://www.holgerschurig.de/en/emacs-init-tangle/
6;; https://bitbucket.org/holgerschurig/emacsconf
7
8(defun my-tangle-config-org ()
9 "This function will write all source blocks
10from =config.org= into =config.el= that are ...
11
12- not marked as =tangle: no=
13- doesn't have the TODO state =CANCELLED=
14- have a source-code of =emacs-lisp="
15 (require 'org)
16 (let* ((body-list ())
17 (output-file "~/aileen/config.el")
18 (org-babel-default-header-args
19 (org-babel-merge-params org-babel-default-header-args
20 (list (cons :tangle output-file)))))
21 (message "Writing %s ..." output-file)
22 (save-restriction
23 (save-excursion
24 (org-babel-map-src-blocks "~/aileen/config.org"
25 (let* ((info (org-babel-get-src-block-info 'light))
26 (tfile (cdr (assq :tangle (nth 2 info))))
27 (match))
28 (save-excursion
29 (catch 'exit
30 (org-back-to-heading t)
31 (when (looking-at org-outline-regexp)
32 (goto-char (1- (match-end 0))))
33 (when (looking-at (concat " +" org-todo-regexp "\\( +\\|[ \t]*$\\)"))
34 (setq match (match-string 1)))))
35 (unless (or (string= "no" tfile)
36 (string= "CANCELED" match)
37 (not (string= "emacs-lisp" lang)))
38 (add-to-list 'body-list body)))))
39 (with-temp-file output-file
40 (insert ";; Don't edit this file, edit config.org' instead ...\n\n")
41 (insert (apply 'concat (reverse body-list))))
42 (message "Wrote %s ..." output-file))))
43
44(my-tangle-config-org)
45
46;; Eine Variante behalten, die andere mit Kommentar deaktivieren
47(defvar HOME "~/") ;; HOME-Variable setzen Linux
48(defvar HOME "c:\home") ;; HOME-Variable setzen Windows
49(cd "~/") ;; Startverzeichnis
50(load-file (concat HOME "aileen/config.el"))
51
52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
53;; Neue Einträge werden ausschließlich in aileen/config.org getätigt ;;
54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Schritt II: config.org#
Erste Einträge#
Grundeinstellungen#
Es folgen nun alle Grundeinstellungen nach Themen gruppiert. Hier sollte schon das Grundprinzip klar werden. Weitere Einstellungen werden folgen. Jeder Block besteht aus:
Einer Überschrift (ein oder zwei Sterne am Anfang der Zeile)
Beschreibung der Funktion, der Quellen und ander Besonderheiten in Prosa…
der Ausführbare Block mit den typischen Lisp-Anweisungen
Farbe#
Schriftfarbe…#
** Schriftfarbe definieren
#+BEGIN_SRC emacs-lisp
(set-face-background 'default "lemon chiffon")
(set-face-background 'region "pale goldenrod")
(set-background-color "lemon chiffon")
#+END_SRC
Kursorfarbe …#
** Kursorfarbe definieren
#+BEGIN_SRC emacs-lisp
(setq default-frame-alist
'((cursor-color . "orange")))
(add-to-list 'default-frame-alist '(cursor-color . "orange"))
#+END_SRC