2015-07-27 15 views
6

Ich verwende die Erfassungsfunktion des Organisationsmodus, um alle meine Aufgaben zu erstellen. Es ist sauber und praktisch und lässt mich allen meinen Aufgaben einen konsistenten Inhalt hinzufügen, einschließlich einer Aufforderung zur Überschrift, einer Aufforderung für Tags und einer automatischen Einfügung des erstellten Datums. Hier ist mein Code:Wie fügt man Tags zum Abschluss des Organisationsmodus hinzu?

(setq org-capture-templates '((
    "t"    ; key 
    "Todo"    ; description 
    entry    ; type 
    (file+headline "C:/.../org/notes.org" "tasks")  ; target 
    "* TODO [#B] %^{Todo} :%^{Tags}: \n:PROPERTIES:\n:Created: %U\n:END:\n\n%?" ; template 
    :prepend t  ; properties 
    :empty-lines 1 ; properties 
    :created t  ; properties 
    ))) 

Allerdings fordert mich meine Aufforderung für Tags, Tags aus dem Speicher eingeben. Wie könnte ich hinzufügen, Tags aus der Liste Tags durch den folgenden Code ein:

(setq org-tag-alist `(
       ("OFFICE" . ?o) 
       ("HOME"  . ?h) 
       ("ERRAND" . ?e))) 

Als mein Punkt in der Überschrift eines bereits erstellten Aufgabe ist es, diese Liste erscheint, wenn ich Cc Cc schlagen und lassen Sie mich die Tags gewählt durch ihre Abkürzung einzelne Buchstaben "o", "h" oder "e".

Also meine Frage ist: ist es möglich, diese Pop-up-Liste der Tags in den Code für meine Erfassung aufzunehmen?

Antwort

7

Die eingebaute Lösung ist %^g zu verwenden. Aus der Hilfe für org-capture-templates:

%^g Eingabeaufforderung für Tags mit Abschluss der Tags in der Zieldatei.

%^G Eingabeaufforderung für Tags mit Abschluss aller Tags in allen Agenda-Dateien.

Sie können dies auch "von Hand" tun, indem Sie eine Funktion aufrufen, die die Tags hinzufügt. Hinzufügen von Tags ist in der Regel mit org-set-tags getan (das ist, was C-c C-c tut). Also, alles, was wir tun müssen, ist, dass in unserer Vorlage rufen Sie mit der %(func) Syntax:

(setq org-capture-templates '((
    "t"    ; key 
    "Todo"    ; description 
    entry    ; type 
    (file+headline "C:/.../org/notes.org" "tasks")  ; target 
    "* TODO [#B] %^{Todo} %(org-set-tags) \n:PROPERTIES:\n:Created: %U\n:END:\n\n%?" ; template 
    :prepend t  ; properties 
    :empty-lines 1 ; properties 
    :created t  ; properties 
    ))) 

Wenn Sie eine bestimmte Liste von Tags haben Sie auswählen möchten (zB org-tag-alist) Sie können completing-read verwenden aus, um es auszuwählen :

(completing-read "Tag: " (mapcar #'first org-tag-persistent-alist) nil t) 
+1

Ahh ... Schön! Was ein starker Tool-Organisationsmodus ist! Und vielen Dank für Ihre gründliche Antwort:) Die% (org-set-tags) gaben mir direkt Zugriff auf den 'org-tag-alist' ohne' completing-read' zu verwenden. Ihr Code fordert jedoch zur Eingabe von Tags auf, bevor Sie nach Todo gefragt werden, was ein wenig unlogisch ist. Kann die Bestellung storniert werden? – myotis

+1

Ich glaube nicht, dass die Reihenfolge geändert werden kann; elisp Ausdruck scheint die ersten Dinge zu sein, die ausgewertet werden. Möglicherweise könntest du 'org-set-tags' zu' org-capture-before-finalize-hook' hinzufügen, was nach dem Beenden des Captures nach Tags fragt (also direkt nach der Verwendung von 'C-c C-c') – erikstokes

Verwandte Themen