Hace un tiempo que quería exactamente el mismo comportamiento de "Hice esto ayer" y nunca pude intentar implementarlo. Pero ahora si puedo obtener puntos por ello ...
Este comportamiento parece estar codificado org-todo
. La línea org.el
que establece la marca de tiempo CERRADA es (org-add-planning-info 'closed (org-current-effective-time))
y se agregan las notas de LOGBOOK org-add-log-setup
, que a su vez llama org-effective-current-time
. org-effective-current-time
hace lo que parece y devuelve el tiempo efectivo.
La solución obvia es cambiar temporalmente org-effective-current-time
a algo que solicite una cita. Pero luego se nos solicita la fecha varias veces con cada llamada, lo cual es molesto. No conozco una buena manera de evitarlo, pero puede guardar el valor introducido por el usuario y mantenerlo hasta el final de la función.
Este código parece funcionar y solo aparece una vez cuando se registra un cambio de estado.
(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)
))