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! Das Reopsitory ist weiterhin erreichbar:
https://bitbucket.org/holgerschurig/emacsconf
Was ich nun aus seiner Anleitung gemacht 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¶
;; Peter EMACS-Konfiguration
;; 1. config.org wird eingelesen
;; 2. alle SRC-Blöcke werden evaluiert und nach config.el geschrieben
;; 3. die generierte config.el wird geladen und damit der EMACS konfiguriert
;; Quelle(n): http://www.holgerschurig.de/en/emacs-init-tangle/
;; https://bitbucket.org/holgerschurig/emacsconf
(defun my-tangle-config-org ()
"This function will write all source blocks
from =config.org= into =config.el= that are ...
- not marked as =tangle: no=
- doesn't have the TODO state =CANCELLED=
- have a source-code of =emacs-lisp="
(require 'org)
(let* ((body-list ())
(output-file "~/config.el")
(org-babel-default-header-args
(org-babel-merge-params org-babel-default-header-args
(list (cons :tangle output-file)))))
(message "Writing %s ..." output-file)
(save-restriction
(save-excursion
(org-babel-map-src-blocks "~/config.org"
(let* ((info (org-babel-get-src-block-info 'light))
(tfile (cdr (assq :tangle (nth 2 info))))
(match))
(save-excursion
(catch 'exit
(org-back-to-heading t)
(when (looking-at org-outline-regexp)
(goto-char (1- (match-end 0))))
(when (looking-at (concat " +" org-todo-regexp "\\( +\\|[ \t]*$\\)"))
(setq match (match-string 1)))))
(unless (or (string= "no" tfile)
(string= "CANCELED" match)
(not (string= "emacs-lisp" lang)))
(add-to-list 'body-list body)))))
(with-temp-file output-file
(insert ";; Don't edit this file, edit config.org' instead ...\n\n")
(insert (apply 'concat (reverse body-list))))
(message "Wrote %s ..." output-file))))
(my-tangle-config-org)
(defvar HOME "~/") ;; HOME-Variable setzen
(cd "~/") ;; Startverzeichnis
(load-file (concat HOME "config.el"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Was nach diesem Drei-Zeiler steht wurde generiert und kann jederzeit gelöscht werden
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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.
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