Hello, James Harkins <jamshar...@qq.com> writes:
> On Wed, 15 Oct 2014 19:08:31 +0800 > James Harkins <jamshar...@qq.com> wrote: > >> org-after-todo-statistics-hook allows you to do something to a node after >> its statistics cookie got updated. Unfortunately, it does this only for TODO >> subheadings and it doesn't work with checkboxes. >> (snip) >> Actually... after a little more poking around, the problem seems to be that >> org-update-checkbox-count refers to no hooks whatsoever. Should it go toward >> the end, here? (Untested.) >> >> (mapc (lambda (cookie) >> (let* ((beg (car cookie)) >> (end (nth 1 cookie)) >> (percentp (nth 2 cookie)) >> (checked (car (nth 3 cookie))) >> (total (cdr (nth 3 cookie))) >> (new (if percentp >> (format "[%d%%]" (/ (* 100 checked) >> (max 1 total))) >> (format "[%d/%d]" checked total)))) >> (goto-char beg) >> (insert new) >> (delete-region (point) (+ (point) (- end beg))) >> (run-hook-with-args 'org-after-todo-statistics-hook >> checked (- total checked)) >> (when org-auto-align-tags (org-fix-tags-on-the-fly)))) >> cookies-list)))) > > After dinner, I tested the change that I had speculated about, and... it > works exactly correctly. > > * TODO Test A [0/2] > ** TODO Test B [0/2] > - [ ] 1 > - [ ] 2 > ** TODO Test C > > C-c C-c on "1" (with my hook function[1]): > > * TODO Test A [0/2] > ** INPROG Test B [1/2] > - [X] 1 > - [ ] 2 > ** TODO Test C > > C-c C-c on "2": > > * INPROG Test A [1/2] > ** DONE Test B [2/2] > - [X] 1 > - [X] 2 > ** TODO Test C > > So I'm submitting this as a TINYCHANGE patch. Do with it as you will, > although I will keep using it locally until something better comes along. > > hjh > > [1] > (defun hjh-org-summary-todo (n-done n-not-done) > "Switch entry to DONE when all subentries are done, to TODO otherwise." > (let (org-log-done org-log-states) ; turn off logging > (org-todo > (if (= n-not-done 0) > "DONE" > (if (= n-done 0) "TODO" "INPROG"))))) > > (add-hook 'org-after-todo-statistics-hook 'hjh-org-summary-todo) See also "org-checklist.el" in contrib/. Regards, -- Nicolas Goaziou