Wie kann man einer Org TODO-Statusänderung manchmal, aber nicht immer eine Notiz hinzufügen?

8

Ich habe dies in einer Org-Modus-Projektdatei:

#+TODO: TODO(t!) WAITING(w!) DONE(d!) CANCELED(c@)

Wenn ich etwas von TODO nach WAITING verschiebe, wird ein Zeitstempel hinzugefügt, ohne nach einer Notiz zu fragen. Das ist gut 8 oder 9 mal von 10 ... aber manchmal möchte ich auch eine Notiz hinzufügen.

Wenn ich das @ benutze, werde ich immer um eine Notiz gebeten, und ich muss C-c C-cda raus. Ich würde das gerne vermeiden, wenn ich kann.

Gibt es eine Möglichkeit (ein Präfix oder einen alternativen Befehl), mit der Org eine optionale Notiz hinzufügen kann, wenn ich einen TODO-Status ändere?

C-c C-z( org-add-note) fügt eine Notiz hinzu, tut dies jedoch für das gesamte Element und nicht für die Änderung des WAITING-Workflows wie folgt:

* WAITING Find out how to sometimes add a note when I change to WAITING
  - Note taken on [2014-09-23 Tue 11:36] \\
    Asked on SE
  - State "WAITING"    from "WAITING"    [2014-09-23 Tue 11:30]
  - State "WAITING"    from "TODO"       [2014-09-21 Sun 11:25]
William Denton
quelle

Antworten:

8

Beachten Sie zunächst, dass das Übergeben eines Arguments von 0 an org-todoNotizen verhindern würde. Wenn Sie also bereit sind, den Standardstatus von allem umzukehren, funktioniert dies möglicherweise für Sie.

Aber es wäre sauberer, eine Notiz zu erzwingen, die leider keine ähnliche Flagge hat.

Hier ist etwas, was Sie tun können, um dies zu simulieren.

(defun org-todo-force-notes ()
  (interactive)
  (let ((org-todo-log-states
         (mapcar (lambda (state)
                   (list state 'note 'time))
                 (apply 'append org-todo-sets))))
    (call-interactively 'org-todo)))

(define-key org-mode-map (kbd "C-c C-S-t") 'org-todo-force-notes)

Erläuterung: Hier definiere ich vorübergehend die Notizen-Semantik neu, die allen ToDo-Schlüsselwörtern zugeordnet ist (sie sind in Sätzen organisiert org-todo-sets, eine flache Darstellung ist möglicherweise in einer anderen Variablen verfügbar), um das Notieren zu erzwingen, und übergebe diese als Dynamik Kontext zum eigentlichen org-todoCode. Wenn Sie also schlagen C-c C-T(Großbuchstabe T), erzwingen Sie eine Note, unabhängig davon, in welchem ​​Zustand Sie sich befinden.

Sigma
quelle