From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Goaziou Subject: Re: after-todo-statistics hook for checkboxes Date: Wed, 15 Oct 2014 15:45:14 +0200 Message-ID: <877g014fbp.fsf@nicolasgoaziou.fr> References: <87a94xk2ts.wl-jamshark70@qq.com> <20141015213843.6003d235@hjh-e431> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:47733) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XeOt4-0008LC-5D for emacs-orgmode@gnu.org; Wed, 15 Oct 2014 09:45:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XeOsv-0005Oc-0q for emacs-orgmode@gnu.org; Wed, 15 Oct 2014 09:45:10 -0400 Received: from relay4-d.mail.gandi.net ([2001:4b98:c:538::196]:47474) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XeOsu-0005OK-Qr for emacs-orgmode@gnu.org; Wed, 15 Oct 2014 09:45:00 -0400 In-Reply-To: <20141015213843.6003d235@hjh-e431> (James Harkins's message of "Wed, 15 Oct 2014 21:38:43 +0800") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: James Harkins Cc: orgmode Hello, James Harkins writes: > On Wed, 15 Oct 2014 19:08:31 +0800 > James Harkins 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