Thank you! Ok, now it works. I had to restart my Emacs, probably that was the problem. So from now on, all the DONE tasks would be archived straight away on the day they are DONE. What about the previously LOGGED tasks? Is there a way to do the same with all the logged items under the :LOGBOOK: that have been DONE before? I have thousands of such instances, and I wonder if a function would find all those items inside the LOGBOOKS and archive them individually under their own DONE date in the org archive file. Maybe too much to ask! :) GM El mar., 17 nov. 2020 a las 18:00, Ihor Radchenko () escribió: > > Now I get the error: "wrong number of arguments..." :D > > It does not happen in my Emacs. It would be helpful if you shared the > whole error message. > > I used the following code for testing: > > (defun my/org-archive-without-delete () > "Archive item at point, but do not actually delete it." > (cl-letf (((symbol-function 'org-cut-subtree) (lambda () nil))) > (org-archive-subtree))) > > (defun org-archive-repeated-task (arg) > "Add a copy of the recurring task marked DONE to archive." > (when (and (eq (plist-get arg :type) 'todo-state-change) > (string= (plist-get arg :to) "DONE")) ;; The state is changed > to DONE > (let* ((pos (plist-get arg :position)) > (repeater (org-with-point-at pos (org-get-repeat)))) > (when repeater ;; Only consider tasks with repeater timestamp > anywhere in the task body > (my/org-archive-without-delete))))) > > (add-hook 'org-trigger-hook #'org-archive-repeated-task) > > Best, > Ihor > > Gerardo Moro writes: > > > Now I get the error: "wrong number of arguments..." :D > > > > El mar., 17 nov. 2020 a las 15:13, Ihor Radchenko () > > escribió: > > > >> > I tried this but I get: "symbol's function definition is void: > >> > org-trigger-doing" > >> > >> Oops. That's the old function name. Should be > >> > >> (add-hook 'org-trigger-hook #'org-archive-repeated-task) > >> > >> Best, > >> Ihor > >> > >> > >> Gerardo Moro writes: > >> > >> > Thanks for the prompt reply! > >> > I tried this but I get: "symbol's function definition is void: > >> > org-trigger-doing" > >> > > >> > El mar., 17 nov. 2020 a las 14:32, Ihor Radchenko (< > yantar92@gmail.com>) > >> > escribió: > >> > > >> >> > Thanks, I don't know how to go about doing that, so I would have to > >> rely > >> >> on > >> >> > others wanting to help me if they consider this to be also useful > to > >> them > >> >> > (which I definitely think it is!). > >> >> > >> >> Try the following code. It should archive any repeated task once it > is > >> >> marked DONE. > >> >> > >> >> (defun org-archive-repeated-task (arg) > >> >> "Add a copy of the recurring task marked DONE to archive." > >> >> (when (and (eq (plist-get arg :type) 'todo-state-change) > >> >> (string= (plist-get arg :to) "DONE")) ;; The state is > >> changed > >> >> to DONE > >> >> (let* ((pos (plist-get arg :position)) > >> >> (repeater (org-with-point-at pos (org-get-repeat)))) > >> >> (when repeater ;; Only consider tasks with repeater timestamp > >> >> anywhere in the task body > >> >> (my/org-archive-without-delete))))) > >> >> (add-hook 'org-trigger-hook #'org-trigger-doing) > >> >> > >> >> Best, > >> >> Ihor > >> >> > >> >