Informationsschnippsel strukturiert ablegen: "dok"

Die Ausgangssituation

Mein $HOME/doc und seine Unterverzeichnisse war schon immer ein Sammelsurium von Textdateien mit Notizen, Links nach /usr/share/doc/... und Dokumentationen aus dem Internet. Irgendwann hat sich VimOutliner als Format für selbstgeschriebene Notizen durchgesetzt, es gab also schon einen "standardisierten" Ort im Dateisystem und ein Dateiformat. Es war nur nicht wirklich bequem in der Verwendung, ich musste oft lange Pfade tippen um eine bestimmte Notiz zu öffnen oder kurz mal durch die Dateien zu greppen.

Die vorgestellte Lösung soll eine Anregung sein, wie man sich mit einfachen Mitteln ein maßgeschneidertes System basteln kann.

Die Anforderungen

  • Informationen strukturiert ablegen (hierarchische Gliederung der Inhalte)
  • Textdateien als Speicherformat
  • Keine Abhängigkeit von RDBMS, X-Server, etc.
  • Volltextsuche
  • Netzwerktransparenz
  • Robustheit, Zuverlässigkeit
  • Einfache Handhabung (wie das Unix man-System)
  • Verfügbarkeit auf allen meinen Rechnern
  • Verweise zwischen den Dateien sollen möglich sein

Das Dateiformat: VimOutliner

Als Dateiformat verwende ich VimOutliner, es ist aber jedes beliebige Textformat möglich. VimOutliner hebt die Strukturen (= Einrückungsstufen) einer Datei farbig hervor, vim unterstützt über das "Folding" das Auf- und Zuklappen von Textteilen, je nach hierarchischer Gliederung - dadurch sind auch längere Dateien mit verschachtelten Strukturen überschaubar.

Ausserdem ermöglicht VimOutliner die Definition von Verweisen zwischen einzelnen Dateien.

Ein Beispiel für eine mögliche VimOutliner-Datei:

VimOutliner Screenshot 1

VimOutliner unterstützt auch Listen zum Abhaken:

VimOutliner Screenshot 2

Und es ist mit hilfe des Scripts vo_maketags.pl möglich, Referenzen zwischen zwei Dateien zu erzeugen.

So kann man z.B. in der Datei sysadmin.otl auf genauere Informationen zum Thema SMART auf die Datei smart.otl verweisen:

VimOutliner Screenshot 3

Ruft man nun das Script vo_maketags.pl mit dem Pfad zur Datei sysadmin.otl als Argument auf, wird in der Datei ~/.vimoutliner/vo_tags.tag die nötige Information hinterlegt um die Verbindung zwischen den Dateien herzustellen. Das Erzeugen der Tags wird vom dok-Shellscript erleichtert, mehr dazu gleich. Wie aus der Vim Hilfe gewohnt, kann man mit den Tasten ^] und ^T zwischen den verbundenen Dateien wechseln. Näheres dazu findet man in der VimOutliner Hilfe.

Um URLs direkt aus einer VimOutliner-Datei in einem Browser öffnen zu können, verwende ich eine Vim Funktion, die hier beschrieben ist: Tip #306: Open a web-browser with the URL in the current line. Mit meiner Konfiguration öffnet Vim beim Tastenkürzel ,o den URL in der aktuellen Zeile im Textmode-Browser w3m.

Das Shellscript: "dok"

Das Shellscript dok verbindet die oben geschriebenen Komponenten und ermöglicht u.a. das bequeme Anlegen, Editieren und Durchsuchen der VimOutliner-Dateien. Eine "Usage" Meldung sagt mehr als tausend Worte:

% dok -h
dok usage:
dok DOKNAME      Dokument mit dem Dateinamen DOKNAME.otl öffnen
dok -n DOKNAME   leeres Dokument mit dem Namen FNAME.otl erzeugen und 'svn add darauf anwenden
dok -s STRING    alle Dokumente nach STRING durchsuchen
dok -a           alle Dokumente in einer Editor-Sitzung öffnen
dok -t           VimOutliner Tag-Datei neu erzeugen
dok -h           diese Hilfe ausgeben

Die wahrscheinlich wichtigste Funktion des dok-Scripts ist, dass man keine Pfade zu den Notizen mehr tippen muss; auch die Dateinamenserweiterung .otl kann man sich sparen. Folgendes reicht also, um die Datei $HOME/doc/python.otl in den $EDITOR zu laden, egal wo im Dateibaum man sich gerade befindet:

% dok python

Um alle Dateien nach dem Begriff "OCaml" zu durchsuchen, reicht:

% dok -s ocaml

Eine neue dok-Datei legt man so an (in diesem Beispiel ~/doc/erlang.otl):

% dok -n erlang

Beim Anlegen ist zu beachten, dass das dok-Script ein svn add auf die neue VimOutliner-Datei anwendet. Dazu später mehr.

Tabulator-Erweiterung für zsh

Das "Completion" System der Zsh muss natürlich aktiviert sein (Datei ~/.zshrc):

autoload -U compinit
compinit

Die Umsetzung ist bestimmt nicht optimal, aber sie funktioniert (Datei ~/.zshrc):

doks=`ls $HOME/doc | grep '\.otl$' | sed 's/\.otl$//'`
compctl -k "( $doks )" dok

In meiner ~/.zshrc ist es ein Einzeiler, aber die Aufteilung macht es klarer.

Die Tabulator-Erweiterung bei der Arbeit sieht dann ungefähr so aus:

% dok t<TAB>
tin         toast       todo        trac        turbogears

Ich nehme mal an, dass eine Bash-Version auch kein Problem wäre.

"dok" immer und überall

Damit das Hilfesystem auf allen Rechnern zur Verfügung steht, habe ich alle Teile (Shellscript, VimOutliner-Dateien, ~/.vimoutliner/vo_tags.tag, ~/.zshrc) in einem Suversion-Repository abgelegt, das direkt in $HOME ausgecheckt ist (Links zu diesem Thema finden sich hier). Neu angelegte dok-Dateien werden vom dok-Script automatisch mit svn add in das $HOME Repository gesteckt.

Mögliche Erweiterungen

  • Einbindung von Dokumenten in anderen Dateiformaten im ~/doc Verzeichnis z.B. in die Volltextsuche
  • Erzeugung von HTML Dokumenten aus den VimOutliner-Dateien für eine Online-Version
  • Einbindung in den Windowmanager: Ion Query
> zum Seitenanfang
[Acat powered] [rest2web powered] [Python powered] letzte Änderung am 04.09.2007 21:16
[Acidburn] [jeziorny.net] [www.localdomain.at] [keine Zielgruppe] [No Software Patents] [<No>OOXML]