Nils Schween writes: > ("d" "Diary entry" entry (file+datetree+prompt > "~/MPIK-Nextcloud/emacs/.org/kalender.org") > "* %i%?\n %T") > > And it works as expected: When calling the capture template, I am prompted > for a > date and I can also type a time, and on saving everything is stored at the > correct location in the datetree. Perfect. But in case I do not enter a time, > 00:00 is inserted. This is unfortunate. Okay, I can replace "%T" in the > template > with "%t", but then any specification of time is ignored. > > Instead, I would love to mimic the behaviour of the function > "org-time-stamp". Calling it > prompts for a date, and if I do not specify a time, only the date is inserted. > In case I specify a time or a range (i.e. 10:00-12:00) the timestamp is > supplemented with this additional information. > > I tried a lot to get the desired behaviour by testing variants of the > following > combination of org-mode functions and variables. > %(org-insert-time-stamp (org-read-date nil t org-read-date-final-answer) t) > > I was not able to produce what I wanted. > > Does anyone have a workaround or an idea how I could implement the described > and > wished behaviour? Thanks.
I'm not aware of any built-in way to do what you want. For either implementing or working around, org-capture-set-target-location and org-capture-fill-template are the two places you'd probably want to look. As a start of a hacky workaround, with an entry like ("d" "Diary entry" entry (file+datetree "/tmp/scratch.org") "* %i%?\n %T" :time-prompt t) you should be able to get the time/no time behavior you're after with (advice-add 'org-capture-fill-template :around (lambda (fn &optional template &rest args) (let ((template (and (not org-time-was-given) (replace-regexp-in-string "%T" "%t" (org-capture-get :template) t)))) (apply fn template args))) '((name . "org-capture-hack")))