UP | HOME

Der Emacs Org mode

Der GNU Emacs begleitet mich bei der täglichen Arbeit auch und vor allem als Aufgaben- und Terminverwaltung. Konkret verwende ich dazu den Emacs Org mode. Im Folgenden habe ich nach ein paar allgemeinen Erläuterungen den Aufbau meiner Org-Dateien, meinen täglichen Workflow sowie die entsprechenden Konfigurationen dokumentiert. Auf die Konfiguration des Emacs selbst gehe ich hier nur am Rande ein. Die Ausführungen stellen lediglich Notizen dar und werden regelmäßig überarbeitet.

Emacs Org mode image

Inhaltsverzeichnis

1 Der Sinn einer guten Notiz- und Aufgabenverwaltung

Schlaue Menschen haben sogar wissenschaftlich belegt, dass das von David Allen entwickelte Konzept Getting Things Done geeignet ist, Stress im Alltag des Wissensarbeiters zu verringern. Dies erfolgt im Kern durch die Einrichtung und Pflege eines sog. Trusted System, also eines Systems, in dem sämtliche Verpflichtungen abgelegt und verwaltet werden, so dass das Unterbewusstsein sich nicht mehr verpflichtet fühlt, ständig an diese zu erinnern und uns damit vom konzentrierten Arbeiten abhält.

1.1 Die zwei Schritte zur persönlichen Aufgabenverwaltung

Möchte man ein solches System einrichten, so sollte man sich zunächst mit dem eigentlichen Konzept der Aufgabenverwaltung (hier GTD) vertraut machen und eine eigene Ableitung dieses Systems finden, die den persönlichen Anforderungen entspricht. Erst im zweiten Schritt sollte man sich mit der Frage beschäftigen, ob eine Umsetzung mit Hilfe einer Software, und wenn ja, mit welcher Software, in Frage kommt. Das Konzept GTD lässt sich auch auf Papier umsetzen, wenn man das lieber mag.

Diese Schritte sind nicht Gegenstand dieses Artikels. Ich gehe lediglich darauf ein, wie ich den Emacs Org mode für meine persönliche Aufgabenverwaltung in Anlehnung an das Konzept GTD verwende.

1.2 Lohnt der ganze Aufwand?

Wie man im Folgenden sehen wird, ist es recht viel Arbeit, eine persönliche Aufgabenverwaltung im Emacs Org mode einzurichten. Ich möchte daher noch ein paar rechtfertigende Worte dazu verlieren, weshalb ich der Auffassung bin, dass diese Investition lohnend ist.

Zunächst ist festzuhalten, dass sowohl das Konzept als auch die Softwarelösung sich in die bestehende Umgebung integrieren muss. Eine Aufgabenverwaltung von der Stange scheint mir daher für niemanden eine wirklich gute Wahl zu sein. Es ist daher nie damit getan, eine Software zu installieren oder zu kaufen. Auch die erfolgreichsten kommerziellen Lösungen für die Aufgabenverwaltung, wie das exzellente Omnifocus, erfordern, dass man sich intensiv mit der Einrichtung des Systems auseinandersetzt. Der Org mode unterscheidet sich in dieser Hinsicht nicht von anderen Lösungen.

Ich gebe zu, auch meines Erachtens wird der Produktivitätswahn, der mit der Einrichtung der perfekten Lösung zur Aufgabenverwaltung verbunden ist, häufig übertrieben. Schnell verbringt man soviel Zeit damit, dass man gar nicht mehr dazu kommt, die eigentliche Arbeit zu erledigen. Es gilt hier jedoch zu differenzieren zwischen Ersteinrichtung des Systems und der laufenden Pflege und Bedienung! Beschränkt sich der Aufwand auf die Ersteinrichtung und geht dann die laufende Pflege und Bedienung des Systems leicht von der Hand, ist es eine lohnende Investition!

1.3 Der Org mode - kompliziert und einfach zugleich

Und hier sind wir beim Org mode. Die Ersteinrichtung und die Einarbeitung in das System nehmen zugegebenermaßen viel Zeit in Anspruch. Hat man aber diese Arbeit einmal geleistet, so hat man eine einfach zu bedienende Umgebung, die die Arbeit wirklich erleichtert, tatsächlich produktiver macht und im besten GTD-Sinne dazu beiträgt, das ansonsten ständige grübelnde Hirn, ob man nicht etwas vergessen hat, zu entlasten. Für mich ist die Emacs Org mode basierte Lösung die erste GTD-Implementierung, die die Bezeichnung Trusted System wirklich verdient; zumindest wenn die folgenden Voraussetzungen erfüllt sind:

  • Einfache Struktur der Org mode Dateien.
  • Nur die wirklich benötigten Funktionen implementieren.
  • Erlernen der Tastenkombinationen für eine schnelle und effiziente Bedienung.

Doch genug der Vorrede.

2 Der Emacs Org mode

Im Kern ist der Org mode ein Outliner, dem Funktionen für die Aufgaben- und Terminverwaltung, die Projektverwaltung und vieles mehr spendiert wurden. Der Vorteil dieses Ansatzes liegt darin, dass man Aufgaben direkt in seinen Notizen als solche markieren kann - und nicht erst in ein anderes Programm wechseln muss, wie es bei allen anderen mir bekannten Lösungen erforderlich ist. So bleibt die jeweilige Aufgabe einerseits in ihrem Kontext bestehen, andererseits vereinfacht dies den Workflow, da keine zusätzliche Aufnahme in eine gesonderte Ausgabenverwaltung erforderlich ist.

Das bedeutet natürlich nicht, dass man den Org mode nur dann verwenden kann, wenn man (auch) umfangreiche Notizen verwalten möchte. Auch ganz simple Aufgabenlisten lassen sich hervorragend im Org mode verwalten. Denn der Emacs Org mode stellt zwar eine große Anzahl von Funktionen zur Verfügung. Dennoch werden diese dem Nutzer nicht aufgedrängt. Es ist vielmehr möglich, eine genau an seine Bedürfnisse angepasste Arbeitsumgebung einzurichten. Und dies macht u.a. den großen Charme des Org mode aus.

Ich habe meine Konfiguration nach Überwindung der Versuchung, alle tollen Features zu implementieren, mit der Zeit immer weiter vereinfacht; es sollte nur das implementiert werden, was ich unbedingt benötige. Nicht mehr, nicht weniger. Praktizierter Minimalismus.

Zur Einführung in den Org mode lohnt ein Blick auf die Projektseiten des Org-Mode. Besonders interessant sind die Video-Mitschnitte von Vorträgen, die Carsten Dominik bei Google und beim Max-Planck-Institut in Köln (leider schlechte Tonqualität) gehalten hat. Wer sich fragt, wer den Org mode so verwendet, sollte einen Blick werfen auf die Seite http://orgmode.org/worg/org-people.php. Sehr interessant.

3 Struktur meiner Org files

3.1 Eine zentrale gtd.org

Die zentrale Datei ist die gtd.org. Hier wird alles eingetragen, was ich zu erledigen habe; sowohl berufliche als auch private Dinge. Notizen erfasse ich bei den jeweiligen Aufgaben oder in einzelnen Dateien, die mit der Emacs-Erweiterung Deft verwaltet, aber natürlich ebenfalls im Org mode geschrieben und in die Org Agenda einbezogen werden. Eine Datei notes.org verwende ich nicht mehr. Zu Deft habe ich auch eine kurze Notiz geschrieben.

Es hat sich nicht bewährt, für berufliche und private Dinge zwei unterschiedliche Dateien zu verwenden. Insbesondere müsste ich dann auch eine allgemeine, gesonderte inbox.org verwenden. Bei einer gesonderten inbox.org habe ich jedoch nie daran gedacht, diese zu leeren - zumal das Verschieben von Tasks trotz der refile-Funktion des Org mode nicht trivial ist. Besser scheint es mir, Capture-Einträge unter der letzten Überschrift „Inbox“ der zentralen Datei gtd.org zu sammeln. Oben sollte die Inbox deshalb nicht stehen, da die Capture-Funktion unkontrolliert Zeilenumbrüche einfügt. Unten in der Datei ist dies nicht weiter schlimm; oben nervt es.

3.1.1 Grobstruktur

  • Mandanten
    Kategorie: Mandanten
    • Aufgabe 1
    • Projekt 1 (Mandant als Tag)
      • Aufgabe 2
      • Aufgabe 3
    • Projekt 2 (Mandant als Tag)
  • Internes
    Kategorie: Internes
    • Aufgabe 1
    • Aufgabe 2
  • Privates
    Kategorie: Privates
    • Aufgabe 1
    • Aufgabe 2
  • Inbox
    Kategorie: Inbox
    • Aufgabe 1
    • Aufgabe 2

3.1.2 Keine GTD-Kontextlisten

Kontextlisten scheinen mir - zumindest in meinem Fall - wenig Sinn zu machen. Weder Markierungen wie Home oder Besorgung, noch Computer oder Telefon scheinen mir hilfreich und die Arbeit, diese immer zu vergeben, zu rechtfertigen.

Als Tags nutze ich daher neben den Mandantennamen lediglich someday und flagged. Ein mit someday getaggter Eintrag erscheint nur auf ausdrücklichen Wunsch in der Agenda (Befehl s). Der Agenda-Befehl f zeigt alle mit flagged makierten Einträge. Wann ich diese Tags vergebe, ist unten im Workflow beschrieben.

3.2 Archiv gtd.org_archive

Im Archiv herrscht die gleiche Struktur wie in der Datei gtd.org. Die Archivdatei muss nicht manuell gepflegt werden. Einträge aus der Datei gtd.org werden mit dem Befehl C-c C-x C-s in das Archiv verschoben.

Bitte beachten: Da die Archivfunktion des Org-Mode leider nur mit Aufgaben bis zur zweiten Ebene umgehen kann, habe ich derzeit in meiner gtd.org unter Mandanten nicht weiter nach Mandantennamen untergliedert. Statt dessen vergebe ich den Mandantennamen als Tag. Wenn ich das einmal ändern möchte, muss in der Datei gtd.org_achive die Anlage der Mandanten manuell erfolgen, da dies die Archivfunktion ab der dritten Ebene nicht mehr unterstützt. Wenn also in der Hauptdatei ein neuer Mandant eingetragen wird, daran denken, dies auch in der Archivdatei zu erledigen! Bei der derzeit verwendeten flachen Struktur hat diese Einschränkung hingegen keine Auswirkungen.

4 Workflow

Nun möchte ich kurz in der Übersicht darstellen, wie mein Workflow konkret aussieht.

4.1 Morgens: Eintragen und Organisieren

Jeden Morgen sehe ich die Eingangskörbe (phyische und E-Mail) durch und trage neu eingetroffene Aufgaben in das System ein, lege sie also zumindest in der Inbox ab. Anschließend verschaffe ich mir einen Überblick über an dem Tag anstehende Aufgaben und Termine.

4.1.1 Neue Aufgaben erfassen

4.1.1.1 Eingangskörbe sichten

An den folgenden Stellen treffen bei mir neue Aufgaben ein.

  • Berufliche und private E-Mail
  • Beruflicher und privater Eingangskorb auf Schreibtisch
  • Postkasten
  • Notizbuch oder Notiz-Anwendung auf dem iPhone
  • Sektion Inbox in der Datei gtd.org, in der Aufgaben per org-capture gesammelt wurden.

Aufgaben, die in diesen Eingangsorten angekommen sind, trage ich in die Dateie gtd.org an der entsprechenden Stelle ein, sofern ich sie nicht innerhalb kürzester Zeit erledigen kann - und dazu auch gerade Zeit habe.

4.1.1.2 TODO-Keywords

Ich versehe die Aufgaben mit den folgenden Stadien.

  • Standardstadien für Aufgaben
    • TODO
    • STARTED
    • WAITING
    • DELEGATED
    • CANCELED
    • DONE
  • APPT (Termin)
  • PROJ (Projekte, also Einträge, die Unterpunkte haben)
  • ZKTO (Zeitkonto, keine Aufgabe, aber etwas wie „Allg. Verwaltung“)

Aufgaben, die irgendwann mal erledigt werden sollen, die aber derzeit nicht sonderlich wichtig sind, tagge ich mit someday. Diese Aufgaben werden dann aus der Agenda ausgeschlossen und nur auf ausdrücklichen Wunsch mit einer benutzerdefinierten Agenda-Ansicht angezeigt.

4.1.1.3 Zeitstempel im Org-mode

Der Org-mode ermöglicht die verschiedensten Zeitangaben in Aufgabendefinitionen.

  • SCHEDULED: Aufgaben, die ab einem bestimmten Tag erledigt werden sollen
    Der Eintrag wird an dem entsprechenden Tag in der Daily Agenda angezeigt und auch an allen folgenden Tagen angezeigt, bis der Eintrag als DONE markiert wird. Der SCHEDULED-Eintrag ist also dann zu verwenden, wenn man an einem bestimmten Tag mit der Arbeit an einer Aufgabe beginnen möchte.
    * TODO Gutachten schreiben
      SCHEDULED: <2011-12-18 Sun>
    
  • DEADLINE: Aufgaben, die an einem bestimmten Tag fertig gestellt werden müssen
    Muss man an einem bestimmten Tag mit der Arbeit an einer Aufgabe fertig sein, so verwendet man den DEADLINE-Eintrag.
    * TODO Gutachten fertig stellen
      DEADLINE: <2011-12-18 Sun>
    
  • Termine: Plain Timestamp (C-c .)
    Der Termin wird nur an dem jeweiligen Tag in der Daily Agenda angezeigt. Dieser Typ sollte daher für Termine Verwendung finden. Denn diese sind nur an dem jeweiligen Tag interessant; das Fortschreiben auf die folgenden Tage bis er als DONE markiert wird, wie SCHEDULED, macht hier keinen Sinn.
    * APPT Besprechung mit Stefan
      <2011-12-18 Sun>
    
  • INACTIVE: Aufgaben, die erst ab einem bestimmten Tag erledigt werden können
    Inactive Timestamps (C-c !) erkennt man an eckigen statt spitzen Klammern. Diese Zeitangaben haben per default keine unmittelbare Auswirkung auf die Anzeige in der Daily Agenda. Man kann aber nach den Einträgen mit der Agenda suchen und sie somit in Custom Agenda Views verwenden.
    * TODO DVD kaufen
      AVAILABLE: [2011-12-18 Sun]
    

    Diese Kategorie funktioniert noch nicht. Es muss noch eine entsprechende Ansicht generiert werden, die nicht verfügbare Aufgaben von der Agenda ausschließt.

4.1.2 Heute anstehende Aufgaben und Termine sichten

  • Mit 'a' in der Agenda bekommt man eine Wochen- bzw. Tagesübersicht (Umschalten mit 'd' für "day" und 'w' für "week"), in der Termine und Deadlines aufgeführt sind. Mit dieser Liste sollte man anfangen, da hier die wichtigsten, nämlich ausdrücklich terminierten, Einträge sichtbar sind.
  • Anschließend sollte man sich alle TODOs in der Agenda mit 't' aufrufen. Die Liste beginnt bei mir mit den Mandantenaufträgen, dann kommen interne Dinge und am Ende Privates und weiteres. Aufgaben, die man heute erledigen will, werden mit dem Tag "flagged" versehen. Hinweis: Vor Einführung des Tags "flagged" habe ich Aufgaben, die ich am jeweiligen Tag erledigen wollte, auf diesen Tag "gescheduled". Die Verwendung eines Tags hat den Vorteil, dass ich Aufgaben, die mehere Tage in der Agenda erscheinen sollen, nicht jeden Tag neu 'schedulen' muss.

4.2 Tagsüber: Dinge erledigen, Termine wahrnehmen und Zeiten aufzeichnen

4.2.1 Erfassen neuer Aufgaben und Termine

Während des Tages können neue Aufgaben mit der Capture-Funktion (C-c c) erfasst werden. Die Einträge werden in der Datei gtd.org unter der Überschrift Inbox gespeichert. Einträge unter Inbox sollen spätestens am nächsten Morgen an die korrekte Stelle verschoben werden.

4.2.2 Finden von zu erledigenden Aufgaben und Terminen

Für den aktuellen Tag anstehende Aufgaben habe ich morgens mit dem Tag flagged versehen. Durch den Aufruf von f in der Agenda werden mir alle diese Einträge angezeigt. Zudem werden „geschedulte“ Aufgaben angezeigt. Mit dieser Liste kann also den Tag über gearbeitet werden.

Zukunftsmusik: Daneben möchte ich gerne ein Benachrichtigungssystem implementieren, welches mit Erinnerungen für anstehende Termine per IM sendet. Dieses Projekt ist noch in vollem Gange. Bisher muss ich daher mit der Liste im Emacs arbeiten. Bei sehr wichtigen Dingen, die ich keinesfalls zu einem bestimmten Zeitpunkt vergessen darf, sollte ich vorerst einen Reminder in meinem Exchange-Kalender einrichten, so dass ich über das iPhone benachrichtigt werde.

4.2.3 Zeiten erfassen

4.2.3.1 Zeiten zu bereits konkret formulierten Aufgaben erfassen

Wird eine Aufgabe in der Agenda angezeigt und ist sie für den Zeitnachweis konkret genug formuliert, kann ich einfach mit I („in“) die Uhr starten und mit O („out“) wieder anhalten.

4.2.3.2 Zeiten zu nicht bestehenden oder nicht ausreichend konkret formulierten Aufgaben erfassen

Beginne ich eine Tätgikeit, für die noch keine Aufgabe definiert ist, erstelle ich einen neuen Zeiteintrag mit Hilfe der Capture-Funktion. Mit C-c c z kreiere ich einen neuen Zeiteintrag. Sobald der Capture-Buffer erscheint, wird eine aktuell laufende Uhr gestoppt und eine neue gestartet. Wenn der Zeiteintrag mit C-c C-c abgeschlossen wird, wird er in meine gtd.org in die Inbox gelegt. So habe ich die Möglichkeit, den Zeiteintrag später einem Projekt zuzuordnen. Anschließend wird automatisch eine eventuell vorher laufende Uhr wieder gestartet.

4.2.3.3 Zeiten auf Sammelkonten erfassen

Teilweise ist zwar klar, auf welches Zeitkonto ein Eintrag zu buchen ist, ich benötige aber stets eine nähere Bezeichnung der geleisteten Arbeit. Dies ist zum Beispiel der Fall bei Dingen, die ich auf „Allgemeine Verwaltung“ buche. In diesem Fall ist es unnötig kompliziert für die Tätigkeit per Capture-Template einen neuen Eintrag in der Inbox zu erfassen, der ja später an eine sinnvolle Stelle in meiner gtd.org verschoben werden müsste. Für diese Fälle habe ich verschiedene Zeitkonten vorbereitet, auf denen ich laufend die entsprechenden Zeiten erfassen kann. Diese Einträge sind allerdings so konfiguriert, dass der Org-mode beim Ausclocken eine Notiz abfragt. Im meinem Zeitreport in der Agenda sehe ich dann zwar nur, dass ein Zeitraum X auf z.B. das Konto „Allgemeine Verwaltung“ gebucht wurde; wenn ich aber dem Link auf diesem Eintrag in meine gtd.org folge, finde ich dort die Notiz, die beschreibt, was ich konkret getan habe.

4.3 Abends: Zeiten in das Kanzleimanagementsystem übertragen

Jeden Abend übertrage ich die im Org mode aufgezeichneten Zeiten in das Zeiterfassungssystem der Kanzlei. Ich verwende hierzu die einfache Daily Agenda, die unten auch die für den jeweiligen Tag aufgezeichneten Zeiten ausweist.

4.4 Wöchentlich: „Weekly Review“

Die folgenden Schritte sind jeden Montag Morgen im Rahmen einer Weekly Review durchzuführen.

  • Pflege der Datei gtd.org
  • Erledigte Aufgaben bzw. Projekte archivieren. Die Archivierung erfolgt in der Datei gtd.org_archive. Der Befehl dazu lautet C-c C-x C-s. Es ist darauf zu achten, dass die Zurodnung der Tasks in der Archivdatei nur dann erfolgt, wenn der Task in der ursprünglichen Datei maximal auf der zweiten Ebene verortet war.
  • Achtsame Durchsicht aller Aufgaben und Termine
  • Durchsicht der mit "someday" getaggten Aufgaben (C-c a g s)

Zukunftsmusik: Die Weekly-Review möchte ich gerne optimieren. Von Omnifocus kenne ich die Möglichkeit, Review-Cycles für die verschiedenen Aufgaben vorzusehen. Dann gibt es eine spezielle Ansicht, in der alle Aufgaben angezeigt werden, deren Review „due“ ist. Dies scheint mir im Org mode noch nicht implementiert zu sein. Daher werde ich das beizeiten vielleicht einmal selbst versuchen.

5 Konfiguration des Org mode

Doch nun zur Konfiguration des Org mode. Ich verwende wie erläutert lange nicht alle Funktionen, die der Org mode bietet, sondern versuche, nur das zu implementieren, was ich wirklich für den oben beschriebenen Workflow benötige und halte auf diese Weise die Bedienung des Systems möglichst einfach.

5.1 Hinweis zu Betriebssystemen

Ein großer Vorteil einer Emacs-basierten Lösung ist, dass der Emacs auf allen großen Betriebssystemen zur Verfügung steht. Unter Betriebssystemspezifische Konfiguration des GNU Emacs habe ich einen kleinen Trick notiert, wie man eine einzige Emacs-Konfigurationsdatei auf verschiedenen Plattformen verwendet werden kann.

Dennoch fühlt sich der Emacs natürlich unter GNU/Linux an wohlsten. Dies merkt man spätestens dann, wenn man den Emacs für Anwendungen nutzen möchte, die das Zusammenspiel mit externer Zusatzsoftware erfordern - beispielsweise E-Mail. Da auch Mac OS X ein Unix ist und sich die meiste Software aus der GNU/Linux-Welt auch hier installieren lässt, ist auch in diesen Fällen die Verwendung von Mac OS X sicher möglich. Allerdings geht die Installation und Konfiguration derartiger Software unter GNU/Linux doch am leichtesten von der Hand. Lange Rede, kurzer Sinn: Meine Randliste der Betriebssysteme für die Verwendung des Emacs ist die folgende:

  1. GNU/Linux (oder BSD etc.)
  2. Mac OS X
  3. dann
  4. kommt
  5. lange
  6. nichts
  7. Microsoft Windows

Soweit sich im Folgenden noch Notizen zu Microsoft Windows finden, stammen diese aus einer Zeit, als ich beruflich gezwungen war, auf dem System zu arbeiten. Es handelte sich um Windows XP. Seitdem ich auch beruflich unter Mac OS X arbeite, werden die Windows-spezifischen Konfigurationen nicht mehr gepflegt. Ich habe sie dennoch in meiner Konfigurationsdatei belassen; vielleicht sind sie für jemand anderen nützlich oder - Gott bewahre! - ich brauche sie irgendwann selbst wieder.

5.2 Grundlegende Einstellungen

Der Org mode soll für alle Dateien mit den Endungen .org und .org_archive geladen werden.

(add-to-list 'auto-mode-alist '("\\.\\(org\\|org_archive\\)$" . org-mode))

Einige wichtige Tastenkürzel:

(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)

Nur einen Stern bei Headlines anzeigen, die vorderen ausblenden:

(setq org-hide-leading-stars 'hidestars)

Eingabetaste folgt Links:

(setq org-return-follows-link t)

5.3 Neue Einträge erfassen (Capture)

Der Org mode verfügt über eine sehr einfache Funktion, um schnell neue Aufgaben zu erfassen, ohne dass man erst viel in seinen Dateien navigieren müsste oder in seiner anderen Arbeit im Emacs unterbrochen würde. Wenn man beispielsweise gerade im Emacs einen Text schreibt, ein Anruf kommt und eine Notiz erfassen möchte, so kann man durch Eingabe von C-c c einen Buffer aufrufen, in dem man diese erfasst und wenn man dann C-c C-c betätigt, wird die Notiz an der vorgesehenen Stelle gespeichert und man befindet sich wieder im ursprünglichen Textdokument. Auf diese Weise können Unterbrechnungen des Arbeitsflusses durch Anrufe, spontane Ideen und anderes gering gehalten werden.

  • Mit t kann ich eine neue Aufgabe definieren.
  • Mit z wird ein Zeiteintrag erfasst.
  • Daneben habe ich noch die Möglichkeit, einen Tagebucheintrag über diese Funktion zu erfassen. Die Eingabe von j lässt mich beliebigen Text erfassen, der dann in der Datei journal.org in einem Datumsbaum abgelegt wird.

Die beiden erstgenannten Elemente werden in der Datei gtd.org unter der Überschrift Inbox erstellt.

;; Capture mit "C-c c" oder F9
(define-key global-map "\C-cc" 'org-capture)
(define-key global-map (kbd "<f9>") 'org-capture)

;; Die Pfade unterscheiden sich je nach OS:
(if macosx-p
   (progn
    (setq org-capture-templates
     '(("t" "Aufgabe" entry (file+headline "~/gitfiles/org/gtd.org" "Inbox")
          "* TODO %?")
       ("z" "Zeiteintrag in gtd.org" entry (file+headline "~/gitfiles/org/gtd.org" "Inbox")
          "* ZKTO %? \n  %i" :clock-in t :clock-resume t)
       ("j" "Journal" entry (file+datetree "~/gitfiles/org/journal.org")
          "* %?\nEntered on %U\n  %i")))))
(if gnulinux-p
   (progn
    (setq org-capture-templates
     '(("t" "Aufgabe" entry (file+headline "~/gitfiles/org/gtd.org" "Inbox")
          "* TODO %?")
       ("z" "Zeiteintrag in gtd.org" entry (file+headline "~/gitfiles/org/gtd.org" "Inbox")
          "* ZKTO %? \n  %i" :clock-in t :clock-resume t)
       ("j" "Journal" entry (file+datetree "~/gitfiles/org/journal.org")
          "* %?\nEntered on %U\n  %i")))))
(if mswindows-p
   (progn
    (setq org-capture-templates
     '(("t" "Aufgabe" entry (file+headline "e:/gitfiles/org/gtd.org" "Inbox")
          "* TODO %?")
       ("z" "Zeiteintrag in gtd.org" entry (file+headline "e:/gitfiles/org/gtd.org" "Inbox")
          "* ZKTO %? \n  %i" :clock-in t :clock-resume t)
       ("j" "Journal" entry (file+datetree "e:/gitfiles/org/journal.org")
          "* %?\nEntered on %U\n  %i")))))

Häufig erreichen mich neue Aufgaben per E-Mail. Dann kann es praktisch sein, einen Link zu dieser E-Mail mit der Aufgabe zu speichern. Es gibt mittlerweile Lösungen für die verschiedensten E-Mail-Programme. Als Emacs Geek verwendet man natürlich ohnehin ein E-Mail-Programm direkt im Emacs; es gibt aber auch Erweiterungen für externe Programme. Der Org mode unterstützt nativ eine Reihe dieser Programme wie VM, Wanderlust, Gnus und dem von mir bevorzugten MH-E. Siehe dazu die Sektion External Links in der Org mode Dokumentation. Die nötigen Befehle sind zu finden im Kapitel Handling Links.

  • Mit C-c l (org-store-link) wird der Link zu der aktuellen Nachricht in die Zwischenablage kopiert.
  • Nach Eingabe von C-c c kann dann mit C-c C-l (org-insert-link) der Link eingefügt werden.

5.4 Refiling Tasks

;; Use IDO for target completion
(setq org-completion-use-ido t)
;; Targets include this file and any file contributing to the agenda - up to 5 levels deep
;;(setq org-refile-targets (quote ((org-agenda-files :maxlevel . 5) (nil :maxlevel . 5))))
;; Targets start with the file name - allows creating level 1 tasks
(setq org-refile-use-outline-path (quote file))
;; Targets complete in steps so we start with filename, TAB shows the next level of targets etc
(setq org-outline-path-complete-in-steps t)

5.5 Drawers konfigurieren

Die folgende Einstellung ermöglicht das Einklappen der jeweiligen Elemente.

(setq org-drawers (quote ("PROPERTIES" "CLOCKTABLE" "LOGBOOK" "CLOCK")))

In einigen Beispielen im Web werden die drawers in der jeweiligen Org mode Datei definiert. Darum an dieser Stelle der Hinweis auf den Unterschied zwischen globaler Definition in der Konfiguration des Org mode und der Definition in einer bestimmten Org mode Datei: Dateispezifische Definitionen überschreiben globale Definitionen! Einige Elemente wie drawers - und auch keywords - können sowohl global als auch per Datei definiert werden. Siehe dazu beispielhaft in der Org mode Dokumentation:

Möchte man die oben definierten drawers nur für eine spezielle Datei definieren, so wird das Folgende in die jeweilige Datei geschrieben, üblicherweise an den Anfang. Diese Definition überschreibt dann wie erwähnt die globale Einstellung für diese eine Datei.

#+DRAWERS: PROPERTIES CLOCKTABLE LOGBOOK CLOCK

5.6 Stadien von Aufgaben und entsprechende Farb-Definitionen

In der Grundeinstellung verfügt der Org mode lediglich über die Todo-Stadien TODO und DONE. Ich verwende ein paar mehr.

Eine „normale“ Aufgabe kann die offenen Stadien TODO, STARTED, WAITING, DELEGATED und die geschlossenen Stadien DONE oder CANCELED haben. Daneben habe ich für Termine APPT, für Projekte PROJ und für Zeitkonten ZKTO vorgesehen.

;; Ein "!" bedeutet Zeitstempel
;; Ein "@" bedeutet Notiz
(setq org-todo-keywords
 '((sequence "TODO(t)" "STARTED(s!)" "WAITING(w@/!)" "APPT(a)" "PROJ(p)" 
             "DELEGATED(g@/!)" "|" "DONE(d!)" "ZKTO(z)" "CANCELED(c@)")))

;; Farben anpassen
(setq org-todo-keyword-faces
      '(("TODO"  . (:foreground "#b70101" :weight bold))
        ("STARTED"  . (:foreground "#b70101" :weight bold))
        ("APPT"  . (:foreground "sienna" :weight bold))
        ("PROJ"  . (:foreground "blue" :weight bold))
        ("ZKTO"  . (:foreground "orange" :weight bold))
        ("WAITING"  . (:foreground "orange" :weight bold))
        ("DONE"  . (:foreground "forestgreen" :weight bold))
        ("DELEGATED"  . (:foreground "forestgreen" :weight bold))
        ("CANCELED"  . shadow)))

;; Fast TODO Selection
(setq org-use-fast-todo-selection t)

5.7 Logging

Logging notiert Änderungen im Todo-Stadium von Aufgaben.

;; Einen Zeitstempel eintragen, wenn eine Aufgabe als erledigt markiert wird
(setq org-log-done 'time)

;; Einen eigenen Drawer benutzen
(setq org-log-into-drawer t)

5.8 Eindeutschen

;; deutsch as export language
(setq org-export-default-language "de")

;; deutscher Kalender:
(setq calendar-week-start-day 1
      calendar-day-name-array
        ["Sonntag" "Montag" "Dienstag" "Mittwoch"
         "Donnerstag" "Freitag" "Samstag"]
      calendar-month-name-array
        ["Januar" "Februar" "März" "April" "Mai"
         "Juni" "Juli" "August" "September"
         "Oktober" "November" "Dezember"])

5.9 Die Org-Agenda

Die Org Agenda macht einen wesentlichen Teil der Magie des Org mode aus. Sie sammelt die verschiedensten Informationen aus beliebig vielen Org mode Dateien zusammen und stellt sie übersichtlich dar.

Zunächst einige grundlegende Einstellungen:

;; Agenda auch mit F19 (große Mac-Tastatur ganz rechts) aufrufen:
;; Per SSH muss 'C-c a' verwendet werden.
(global-set-key (kbd "<f19>") 'org-agenda)

;; Aktuelle Zeile in der Agenda hervorheben
(add-hook 'org-agenda-mode-hook '(lambda () (hl-line-mode 1 )))

(setq org-agenda-format-date 
 "%Y-%m-%d ---------------------------------------------------------------------")

;; Tasks mit Prioriäten unterschiedlich darstellen:
(setq org-agenda-fontify-priorities 
   (quote ((65 (:foreground "Red")) (66 (:foreground "Blue")) (67 (:foreground "Darkgreen")))))

(setq org-agenda-date-weekend (quote (:foreground "Yellow" :weight bold)))

;; Tasks mit Datum in der Agenda ausblenden, wenn sie bereits erledigt sind:
(setq org-agenda-skip-deadline-if-done t)
(setq org-agenda-skip-scheduled-if-done t)

Nach Getting Things Done gibt es Aufgaben, die man zwar erfasst, die man aber nicht zu einem bestimmten Zeitpunkt oder in absehbarer Zukunft erledigen möchte. Diese Aufgaben tagge ich mit "someday". Sie werden in der Standardansicht meiner Agenda ausgeblendet und ich kann sie nur (im Rahmen des Weekly-Review) mit einer speziellen Agenda-Ansicht ausdrücklich anzeigen lassen.

(setq org-agenda-filter-preset '("-someday"))

Die Agenda nicht in der Wochenansicht, sondern Tagesansicht starten:

(setq org-agenda-span 1)

5.10 Eigene Agenda-Ansichten

Nun werden eigene Aganda-Ansichten eingerichtet.

  • Die erste Ansicht zeigt mir die mit "someday" getaggten Einträge, die aufgrund des oben vorgenommenen Ausschlusses ja nicht in der Standardansicht enthalten sind.
  • Die zweite Ansicht zeigt mir meine Zeitkonten an.
  • Die dritte Ansicht liefert mir eine Daily bzw. Weekly Agenda, bei der zusätzlich die mit dem Tag "flagged" versehenen Einträge sowie meine Zeitkonten aufgelistet werden.

Neben den folgenden Agenda-Views habe ich in meiner Konfiguration natürlich noch weitere Ansichten, die nach bestimmten Tags suchen. Diese stelle ich jedoch nicht online, da sie teilweise vertrauliche Informationen wie Mandantennamen beinhalten.

;; Eigene Agenda-Views
(setq org-agenda-custom-commands
  (quote (
   ("s" "SOMEDAY" tags "someday" ((org-agenda-filter-preset 
           '("+someday"))(org-agenda-todo-ignore-with-date nil)))
   ("z" todo "ZKTO")
   ("f" "Agenda and flagged tasks"
       ((tags "zkto")
        (tags "flagged")
        (agenda ""))))))

5.11 Agenda-Files

Die Org Agenda sammelt Informationen aus den sog. Agenda-Files zusammen. Man kann beliebig viele Dateien in diese Variable eintragen. Hier beziehe ich meine gtd.org sowie das Verzeichnis mit meinen Notizen mit ein. Zu den Notizen vergleiche meinen Text zum Emacs Deft mode.

(if macosx-p
 (progn
  (setq org-agenda-files (quote 
   ("~/gitfiles/org/gtd.org"
    "~/gitfiles/org/notes/")))))

(if gnulinux-p
  (progn
   (setq org-agenda-files (quote 
    ("~/gitfiles/org/gtd.org"
     "~/gitfiles/org/notes/")))))

(if mswindows-p
 (progn
  (setq org-agenda-files (list
    "e:/gitfiles/org/gtd.org" 
    "e:/gitfiles/org/notes/"))))

Daneben habe ich noch weitere Dateien in die Agenda einbezogen, in denen jeweils projektspezifische Inhalte untergebracht sind. Diese werden hier nicht mit ausgegeben.

5.12 Zeiterfassung

Eine sehr interessante und praktische Funktion ist die Möglichkeiten, Zeiten für die einzelnen Aufgaben zu erfassen und beliebige Auswertungen der aufgezeichneten Zeiten zu generieren.

Die Zeiteinträge sollen in einem eigenen Drawer abgelegt werden:

;; Save clock data and notes in a separate drawer
(setq org-clock-into-drawer "CLOCK")

Das Ein- und Ausclocken erfolgt über F5 und F8. Per SSH clocke ich nur in der Agenda. Dort kann 'I' und 'O' verwendet werden.

;; Clock in with F5:
(fset 'my-clock-in "\C-c\C-x\C-i")
(global-set-key (kbd "<f5>") 'my-clock-in)

;; Clock out with F8:
(fset 'my-clock-out "\C-c\C-x\C-o")
(global-set-key (kbd "<f8>") 'my-clock-out)

Weitere Einstellungen:

;; Resume clocking tasks when emacs is restarted
(org-clock-persistence-insinuate)

;; Yes it's long... but more is better ;)
(setq org-clock-history-length 35)

;; Resume clocking task on clock-in if the clock is open
(setq org-clock-in-resume t)

;; Change task state to STARTED when clocking in
;(setq org-clock-in-switch-to-state "STARTED")

;; Sometimes I change tasks I'm clocking quickly 
;; this removes clocked tasks with 0:00 duration
;;(setq org-clock-out-remove-zero-time-clocks t)

;; Don't clock out when moving task to a done state
(setq org-clock-out-when-done nil)

;; Save the running clock and all clock history when exiting Emacs, 
;; load it on startup
(setq org-clock-persist t)

;; Disable auto clock resolution
(setq org-clock-auto-clock-resolution nil)

(setq org-global-properties (quote (("Effort_ALL" . 
                                "0:10 0:30 1:00 2:00 3:00 4:00 5:00 6:00 8:00"))))

Nachdem ich lange Zeit mit Clocktables gearbeitet hatte, habe ich dann doch noch herausgefunden, dass man sich die aufgezeichneten Zeiten auch in der Agenda anzeigen lassen kann. Darüber hatte ich zwar schon häufiger nachgedacht, dass das eine nette Sache wäre, aber mir ist nie aufgefallen, dass es auch diese tolle Funktion bereits gibt.

;; Agenda direkt mit dem jeweiligen Clock-Report starten:
(setq org-agenda-start-with-clockreport-mode t)

;; Keine Links, maximal bis Level 4 herunter:
(setq org-agenda-clockreport-parameter-plist (quote (:link t :maxlevel 4)))

5.13 Column-View

Der Org mode verfügt mit der Column-View über eine spezielle Ansicht, die meines Wissens nach einer Funktion der Aufgabenverwaltung Omnifocus for Mac nachgebildet wurde.

(setq org-columns-default-format "%80ITEM(Task) %10Effort(Effort){:} %10CLOCKSUM")

Ich verwende diese Ansicht derzeit nicht regelmäßig, da ich dafür bei meinem Setup noch keinen Bedarf gesehen habe. Sie kann sicherlich insbesondere dann sehr hilfreich sein, wenn man schnell verschiedene Properties zu seinen Aufgaben eintragen möchte. Denn diese kann man mit der Column-View sehr schön darstellen und schnell zwischen den Feldern navigieren.

5.14 Mac-spezifische Dinge

5.14.1 E-Mails aus Mail.app verlinken

Mit der Erweiterung org-mac-message.el ist es möglich, Links zu Mails in Apples Mail.app in Org mode zu erzeugen. Dies kann sehr hinfreich sein, wenn man eine zu erledigende Aufgabe per E-Mail gesendet bekommt und die E-Mail benötigte Informationen dazu enthält.

Hinweis: Soweit ich weiß, wurde die Erweiterung noch nicht an Mac OS X "Lion" angepasst und funktioniert daher nur bis Mac OS X "Snow Leopard".

;; ====== E-Mails in Mail.app verlinken ====================================
;; http://orgmode.org/worg/org-contrib/org-mac-message.php

(add-to-list 'org-modules 'org-mac-message)
(setq org-mac-mail-account "suenkler.info")
(global-set-key "\C-cm" 'org-mac-message-insert-selected)

5.14.2 Weiteres

Es gibt einige weitere Mac-spezifische Erweiterungen des Org-Mode. Mehr finden Sie dazu auf den entsprechenden Worg-Seiten.

5.15 Popup mit Reminder unter Windows

Mit den folgenden Einträgen werden Popup-Erinnerungen unter Windows ermöglicht. Es findet dabei die Appointment-Funktion des Emacs Anwendung. Die Popups selbst werden durch ein kleines Visual Basic Skript (siehe unten) ermöglicht.

(if mswindows-p
    (progn

;; Get appointments for today
(defun my-org-agenda-to-appt ()
  (interactive)
  (setq appt-time-msg-list nil)
  (run-at-time "24:01" nil 'my-org-agenda-to-appt)
  (let ((org-deadline-warning-days 0))    ;; will be automatic in org  5.23
    (org-agenda-to-appt)))

;;; Disabled so that I can open multiple emacs without org loading agenda files.
(appt-activate t)

;; Number of minutes before an appointment to start reminding:
(setq appt-message-warning-time '10)

;; Number of minutes to wait between checking the appointment list.
;; Also, the interval between repetitions of the same reminder:
(setq appt-display-interval '5)

;; Update appt each time agenda opened.
(add-hook 'org-finalize-agenda-hook 'my-org-agenda-to-appt)

;; Setup agenda popup, we tell appt to use window, and replace default function
(setq appt-display-format 'window)
(setq appt-disp-window-function (function my-appt-disp-window))

(defun my-appt-disp-window (min-to-app new-time msg)
  (save-window-excursion
    (shell-command
     (concat
      "c:/windows/system32/cscript.exe //nologo e:/Bin/popup.vbs \"" msg "\"") nil nil)))))

Die Datei popup.vbs hat lediglich den folgenden Inhalt:

On Error Resume Next
Msgbox WScript.Arguments(0),0,"Org-Mode Agenda Reminder"

Hinweis: Die Windows-spezifischen Einstellungen werden von mir nicht mehr gepflegt. Ich hatte sie zuletzt unter Windows XP bei der Arbeit eingesetzt. Mittlerweile verwende ich bei der Arbeit Mac OS X; zu Hause Mac OS X und GNU/Linux.

5.16 Agenda soll in ganzem Frame starten

Die folgende Einstellung sorgt im Emacs 23 dafür, dass die Agenda im ganzen Frame startet.

(setq org-agenda-window-frame-fractions '(1.0 . 1.0))

Für den Emacs 24 muss der Befehl wie folgt lauten. Vielen Dank an Frank Haun für den Hinweis!

(setq org-agenda-window-setup 'current-window)

5.17 Hauptdatei start.org beim Start des Emacs öffnen

Beim Start des Emacs soll die Datei start.org geöffnet werden. Diese Datei beinhaltet Links zu häufig genutzten Dateien und Funktionen des Emacs. Meine Org-Dateien liegen abhängig vom Betriebssystem an unterschiedlichen Orten.

;; Keinen Splash-Screen
(setq inhibit-splash-screen t)

;; Wenn auf Mac OS X
(if macosx-p
    (progn
      (find-file "~/gitfiles/org/start.org")))

;; Wenn unter GNU/Linux
(if gnulinux-p
    (progn
      (find-file "~/gitfiles/org/start.org")))

;; Wenn auf MS Windows
(if mswindows-p
    (progn
      (find-file "e:/gitfiles/org/start.org")))

6 Schluss

Dies waren nur einige Notizen zu meiner Konfiguration des Emacs Org mode. Sehr gute Informationen sind im Compact Org-mode Guide sowie in der Dokumentation des Org-mode zu finden. Sehr zu empfehlen ist auch der Text Org Mode - Organize Your Life In Plain Text! von Bernt Hansen.

Datum: 2012-08-21T21:56+0200

Autor: Hendrik Sünkler

Org version 7.8.11 with Emacs version 24

Validate XHTML 1.0