Erfahrungen über mein „Second Brain“ in GNU Emacs mit org-mode

GNU

GNU wurde ursprünglich als Betriebssystem konzipiert, das von Richard Stallman im Jahr 1983 ins Leben gerufen wurde. Das primäre Ziel bestand darin, die Idee der „freien Software“ zu fördern – die Freiheit, Software zu schreiben, zu nutzen und zu verbreiten. Dieser grundlegende Gedanke trug zur Verbreitung der Open-Source-Praxis bei, bei der der Quellcode offen und für alle zugänglich ist.
Da der Nutzen eines Betriebssystem von seinen Programmen, die darauf ausgeführt werden, abhängig ist, war es notwendig, Programme zu entwickeln, die ebenfalls unter dem Konzept der „freien Software“ fallen. Diese Programme sind als GNU-Packages bekannt. Einige Beispiele, die man heutzutage auf der Kommandozeile antrifft: tar, grep, wget oder eben emacs.

Emacs

Bei Emacs handelt es sich um einen Text-Editor, und da er „frei“ ist, lässt er sich beliebig verändern und erweitern. Erweiterungen werden in einer eigenen Sprache implementiert namens emacs lisp. Eine Sprache basierend auf Lisp, die auf funktionale Prinzipien setzt. Ein grosse Einschränkung von emacs lisp ist, dass es keine parrallel
Programmierung unterstützt, wie man das von modernen Sprachen kennt (c#, kotlin, python). Das Manual würde ich aber jedem Programmiereinsteiger wärmstens ans Herz legen https://www.gnu.org/software/emacs/manual/html_node/eintr/. Mit dem Editor hat man eine uneingeschränkte Spielwiese, mit dem man schnell Code schreiben und Experimente durchführen kann.

Org-Mode

Und so kommen wir zu org-mode. Eine Erweiterung in Emacs die es erlaubt mit der markup-sprache „org“ zu arbeiten sowie umfrangreiche Tools hinzufügt, um diese Markup-Dateien zu strukturieren, zu verknpüpfen, zu tagen und zu planen. Es umfasst:
  • Links
  • Tagging
  • Kalender
  • Todo-lists
  • Clocking
  • Code-blocks
Der Grundgedanke ist auch in dieser Erweiterung freie Software auszuliefern die sich beliebig erweitern lässt. Dies erlaubt es diese Tools auf seine Bedürfnisse  zuzuschneiden. Dies setzt einen hohen initalen Aufwand voraus, dass System kennenzulernen und sich zu organisieren.

Getting-Things-Done

Um meinen Workflow zu finden, habe Ich mich mit der Methology Getting-Things-Done beschäftigt. Diese strukturiert Aufgaben in Projekte die wiederum sogennante „next-actions“ bündeln. Hat man alle „next-actions“ abgeschlossen, gilt das Projekt als DONE. Nebst dem, definiert es auch eine „inbox“ einen Kalender, „ticklers“ und „somedays“.
Um diese Konzepte in org-mode umzusetzen, musste ich ca. 700 Zeilen Code schreiben. In diesen 700 Zeilen werden unteranderem Tastaturshortcuts, Funktionen und „org-agendas“ definiert. Auch zu erwähnen ist, dass diese 700 Zeilen nicht in Stein gemeiselt sind, sondern in ständiger Entwicklung sind. Will ich meinen Workflow optimeiren oder ändern werden auch entsprechende Zeilen angepasst oder neuer Code hinzugefügt.
Ein Beispiel einer persönlichen Konfiguration:
(use-package my-org-package
      :load-path "~/.emacs.d/elisp/my-org-package"
      :demand t
      :after org-agenda
      :bind (("C-c l" . my-org-package-bmkp-make-org-id-bookmark)))
(defun my-org-package-bmkp-make-org-id-bookmark ()
  "Used to create bookmarks to org-header identified by ID-Property."
  (interactive)
  (cond ((derived-mode-p 'org-mode)
(let* ((hid (org-id-get-create))
(bn (org-link-display-format (org-get-heading t t t t)))
(bm-bn (bmkp-get-bookmark bn 'NOERROR)))
   (org-store-link nil t)
   (when (not (null bm-bn))
     (setq bn (concat bn
       " (" (file-name-nondirectory buffer-file-name)
       ":" (number-to-string (line-number-at-pos))
       ")")))
   (if (and bm-bn (equal hid (cadr (caddr (bookmark-prop-get bm-bn 'function)))))
       bm-bn
     (bmkp-make-function-bookmark bn (backquote (lambda () (org-id-goto ,hid)))))))))
In dieser Erweiterung werden mehrere Emacs Lisp-Pakete angewendet: use-package, bookmark+, ol und org-id. Sie generiert eine ID für den aktuellen „org-header“ und speichert diese ID als Lesezeichen. Dadurch ist es möglich, zu einem späteren Zeitpunkt durch einfache Tastenkombinationen und Auswahlmenüs zu diesem „org-header“
zurückzukehren. Ein Screencast veranschaulicht dieses Verhalten:
Screencast über meine Erweiterung von org-id und bookmark+

Fazit

Nach fünf Jahren intensiver Auseinandersetzung mit der Idee der freien Software und dem Bestreben, mein persönliches „Second Brain“ zu entwickeln, kann ich mit Sicherheit sagen, dass meine Begeisterung für freie Software ungebrochen ist. Die Idee, Software frei zu verwenden, anzupassen und zu teilen, hat mich von Anfang an fasziniert und treibt mich weiterhin an. Jedoch muss ich auch eingestehen, dass die Entwicklung eines einheitlichen Workflows und das verwalten der Daten in mein „Second Brain“ eine Herausforderung darstellt, die ich bisher nicht vollständig gemeistert habe. Trotz meiner Bemühungen ist es mir noch nicht gelungen, einen Workflow zu etablieren, der allen meinen Anforderungen und Erwartungen entspricht. Dies trotz grossem Konfigurationsaufwand, den ich auf mich genommen habe. Trotz diesen Herausforderungen bin ich nach wie vor überzeugt, dass die Verwendung freier Software und die fortlaufende Entwicklung meines „Second Brain“ lohnenswert sind. Jeder Schritt, den ich auf diesem Weg gemacht habe, hat dazu beigetragen, meine Fähigkeiten zu erweitern und mein Verständnis für die Funktionsweise von Software zu vertiefen.
In Zukunft werde ich weiterhin nach neuen Möglichkeiten suchen, meinen Workflow zu verbessern und meine Ziele zu erreichen (https://github.com/ndwarshuis/org-sql 👀).

Weiterführende Links

  • https://gettingthingsdone.com/
  • https://www.gnu.org/gnu/about-gnu.html
  • https://www.gnu.org/software/software.html
  • https://www.gnu.org/software/emacs/
  • https://orgmode.org/
  • https://github.com/lordnik22/org-shoplist
Beitrag teilen

Michael Blättler

Ist als Software Entwickler tätig und bloggt aus dem Unterricht des CAS «Modern Software Engineering & Development»

Alle Beiträge ansehen von Michael Blättler →

Schreibe einen Kommentar