Eu queria o mesmo comportamento "eu fiz isso ontem" por um tempo e nunca tentei implementá-lo. Mas agora, se eu conseguir pontos por isso ...
Esse comportamento parece estar embutido no código org-todo
. A linha org.el
que define o carimbo de data / hora FECHADO é (org-add-planning-info 'closed (org-current-effective-time))
e as notas do LOGBOOK são adicionadas por org-add-log-setup
, que, por sua vez, chama org-effective-current-time
. org-effective-current-time
faz o que parece e retorna o tempo efetivo.
A solução óbvia é mudar temporariamente org-effective-current-time
para algo que solicite uma data. Porém, a data é solicitada várias vezes a cada chamada, o que é irritante. Não conheço uma boa maneira de evitá-lo, mas você pode salvar o valor inserido pelo usuário e mantê-lo por perto até o final da função.
Esse código parece funcionar e solicita apenas uma vez quando uma alteração de estado seria registrada.
(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)
))