Nick Dokos <nicholas.do...@hp.com> writes: >> But unfortunately, I know that little of ELISP, that I am not able >> to implement it by myself :-( > Time to learn some then - and there is no better way than scratching > your own itch :-)
Two days later, no reply so far. I'll give it a shot. Karl, if you are still fiddling to make it work, ignore this posting and keep trying. :) >>> [...] accomplish this with org-after-todo-state-change-hook: >>> Write a function that checks if org-state is "CANCELED" >>> [...] looks for active timestamps and calls >>> org-toggle-timestamp-type on them. Everything there, so... --8<---------------cut here---------------start------------->8--- (defun my-org-active-to-inactive-ts () "Toggle type on active timestamp in current heading if state was changed to 'CNCL'. This function is supposed to be called by 'org-after-todo-state-change-hook. This function expects only one active timestamp to be in the headline." (when (string= org-state "CNCL") ; 1. (save-excursion ; 2. (save-restriction (widen) (outline-back-to-heading t) ; 3. (narrow-to-region (point) (or (outline-next-heading) (point-max))) (when (re-search-backward (org-re-timestamp 'active) nil t) ; 4. (org-toggle-timestamp-type)))))) (add-hook 'org-after-todo-state-change-hook 'my-org-active-to-inactive-ts) --8<---------------cut here---------------end--------------->8--- 1.: Only when org-state is CNCL, do the rest. 2.: We are jumping around and narrowing, so let's save the way things are, first. 3.: Move point to the beginning of the current headline, make sure we only touch it by narrowing to it. If there is no next headline, point-max will do. 4.: regex search for (only) one active timestamp. When there is one, point will end up there and we toggle it. When there is none, search returns nil, nothing happens. Memnon