Ich wollte für eine Weile genau das gleiche Verhalten wie "Ich habe das gestern gemacht" und bin nie dazu gekommen, es zu implementieren. Aber jetzt, wenn ich Punkte dafür bekommen kann ...
Dieses Verhalten scheint fest codiert zu sein org-todo
. Die Zeile, in org.el
der der GESCHLOSSENE Zeitstempel festgelegt wird, ist (org-add-planning-info 'closed (org-current-effective-time))
und die LOGBOOK-Notizen werden von hinzugefügt org-add-log-setup
, was wiederum aufruft org-effective-current-time
. org-effective-current-time
macht, wie es sich anhört und gibt die effektive Zeit zurück.
Die naheliegende Lösung besteht darin, vorübergehend org-effective-current-time
zu etwas zu wechseln , das zur Eingabe eines Datums auffordert. Aber dann werden wir bei jedem Anruf mehrmals nach dem Datum gefragt, was ärgerlich ist. Ich kenne keinen guten Weg, um dies zu vermeiden, aber Sie können einfach den vom Benutzer eingegebenen Wert speichern und diesen bis zum Ende der Funktion beibehalten.
Dieser Code scheint zu funktionieren und fordert nur einmal auf, wenn eine Statusänderung protokolliert wird.
(defun org-todo-with-date (&optional arg)
(interactive "P")
(cl-letf* ((org-read-date-prefer-future nil)
(my-current-time (org-read-date t t nil "when:" nil nil nil))
((symbol-function #'org-current-effective-time)
#'(lambda () my-current-time)))
(org-todo arg)
))
.+7d
) mit dieser Funktion nicht korrekt geplant wurde (es ist so geplant, als ob die Aufgabe heute beendet wäre).Sie können mehr Hacks über die erste Antwort legen, um das Problem zu beheben, dass Repeater nicht korrekt aktualisiert werden. Beachten Sie, dass wenn
LAST_REPEAT
festgelegt, das tatsächliche Datum und nicht das ausgewählte Datum festgelegt wird. Ich wünschte, Org würde dies als erstklassiges Feature hinzufügen. das tatsächliche Datum trittorg-todo
an vielen Stellen ein; Ich bin sicher, diese Antwort vermisst noch einige:quelle
Und hier ist eine weitere Ebene, um den LAST_REPEAT-Fall zu beheben:
hoffentlich
format-time-string
wird nurorg-auto-repeat-maybe
imorg-todo
Kontext aufgerufen und nur zumLAST_REPEAT
Einfügen.Auf
org-todo
jeden Fall können Sie den Defun jederzeit in Ihre emacs.el-Init-Datei kopieren und dort ändern, anstatt Funktionen zum Auswählen von Kirschen zu verwendencl-letf
(obwohl es irgendwie cool ist, dies zu tun).quelle