Von Bemerkungen zu Aufgabenlisten

Um die möglicherweise abstrakten Integrationsszenarien von docbook_status konkret zu machen: im Folgenden ein kurzes Beispiel, um aus Textanmerkungen gleich Aufgaben zu machen. Aufgaben in einem Planer wie etwa Things von Cultured Code, das ich seit längerem nutze. Things sorgt bei mir für die Planung von einfachen Aufgaben und die Erinnerung an alle möglichen Erledigungs-Versprechungen, die ich oder andere gemacht haben. Daher dachte ich mir, es wäre doch gut, die Aufgaben, die ich in einem Schreibprojekt als Anmerkungen formuliere, gleich in Things als Aufgaben zu übernehmen.

Natürlich könnte ich das auch manuell erledigen. Die Erfahrung hat aber gezeigt, dass dabei oft einige Dinge liegen bleiben. Aufgaben, die gerade nicht im Fokus des Interesses liegen, aber erledigt werden müssen. Und an mehreren Stellen nach zu erledigenden Dingen Ausschau halten ist auch nicht schön, also lieber alles in Things hinein pumpen. Löschen kann ich die nervigeren Aufgaben da immer noch.

Mit der YAML-Ausgabe von docbook_status geht der Import der Anmerkungen glücklicherweise schnell:

 
docbook_status --remarks --outputformat=yaml heft1.xml | rem2things 

Ein Aufruf und schon erscheinen die Anmerkungen als Aufgaben in Things.

Textanmerkungen als Aufgaben in Things
Textanmerkungen als Aufgaben in Things

Das Skript rem2things ist auch nur ein kleines Ruby-Skript, das Things über dessen AppleScript-Schnittstelle ansteuert. Wer also kein Ruby mag, kann das auch in AppleScript machen. Der Things AppleScript Guide (PDF) liefert ausführliche Beispiele um Things zu automatisieren.

Für mich selbst war AppleScript immer etwas kompliziert, daher in diesem Beispiel die Nutzung von rb-appscript, das einen Ruby-Zugang zu AppleScript-Schnittstellen von Mac-Anwendungen möglich macht. (Eine gute Einführung zur Handhabung gibt es übrigens hier.)

 
require 'appscript' 
require 'yaml'  

yaml_inp = YAML.load(STDIN) 
rems = yaml_inp[:remarks]  

things = Appscript.app.by_name('Things.app') 
unless rems.nil? 
  title = yaml_inp[:sections][0][:title] 
    rems.each do |rem| 
      props = {} 
      props[:name] = rem[:text] 
      props[:notes] = "#{title}, #{rem[:file]} #{rem[:line]}: #{rem[:text]}"
      props[:tag_names] = "#{rem[:keyword]}" 
      things.make(:new => :to_do, :at => things.lists['Inbox'],
         :with_properties => props) 
    end 
end 

Kurz erklärt: Die YAML-Ausgabe von docbook_status wird eingelesen und in eine Struktur verwandelt. Danach wird die Things-Anwendung gesucht (Zeile 7), um mit ihr zu kommunizieren. Für jede Textanmerkung (remark) wird dann ein TODO in Things angelegt (Zeile 15).

In diesem Beispiel habe ich es mir einfach gemacht. Alle Anmerkungen werden hier in Things kopiert, ich könnte sie natürlich auch nach dem Schlüsselwort filtern, denn nicht alle Anmerkungen sind gleich wichtig. Außerdem füge ich die Aufgaben zunächst einfach in den Eingangskorb (Inbox) ein. Es wäre wohl besser ein Projekt anzulegen, und die Aufgaben dann diesem zuzuweisen.

Die Struktur der so transferierten Aufgaben ist einfach: der Anmerkungstext wird zum Aufgabentitel. Alle anderen Angaben werden im Notizen-Feld abgelegt. Als Schlagwort für die Ausgabe verwende ich derzeit einfach das Schlüsselwort der Textanmerkung. Das könnte man wohl auch verbessern.