If anyone
is interested, here is the code...
;;;_. Update Checkbox count - to allow for checkboxes to be used in
headings
;;; Based on code from Sacha Chua
(defun wicked/org-update-checkbox-count (&optional all)
"Update the checkbox statistics in the current section.
This will find all statistic cookies like [57%] and [6/12] and update
them with the current numbers. With optional prefix argument ALL,
do this for the whole buffer."
(interactive "P")
(save-excursion
;;declaring and assigning values to a whole bunch of variables
(let* ((buffer-invisibility-spec (org-inhibit-invisibility))
;; assign point to the "beg" variable and
;; returning an error in case of error
(beg (condition-case nil
(progn (outline-back-to-heading) (point))
(error (point-min))))
;; make a marker which will point to the end of the current
outline region
(end (move-marker
(make-marker)
(progn (or (or (outline-get-next-sibling) (progn
(goto-char beg) nil))
(progn (outline-end-of-subtree) (point))
(goto-char (point-max)))
(point))))
(re "\\(\\[[0-9]*%\\]\\)\\|\\(\\[[0-9]*/[0-9]*\\]\\)")
(re-box
"^[ \t]*\\(*+\\|[-+*]\\|[0-9]+[.)]\\) +\\(\\(\\[[-
X]\\]\\)\\|TODO\\|DOING\\|DONE\\)")
b1 e1 f1 c-on c-off lim (cstat 0))
;; if called with a prefix argument, "all" will be non-nil; in
which case count the checks in the whole buffer
(when all
(goto-char (point-min))
(setq beg (point) end (point-max)))
(goto-char beg)
(while (re-search-forward re (marker-position end) t)
(setq cstat (1+ cstat)
b1 (match-beginning 0) ;set b1 to the beginning of the
recent search
e1 (match-end 0) ;set e1 to the end of the
recent re search
f1 (match-beginning 1) ;set f1 to the position of the
1st paranthesized expression
lim (cond
((org-on-heading-p) (or (outline-get-next-sibling)
(goto-char (point-max))) (point))
((org-at-item-p) (org-end-of-item) (point))
(t nil))
lim (marker-position end) ; right now setting lim to the
same as end - not sure what the above line is trying to do
c-on 0 c-off 0)
(goto-char e1)
(when lim
(while (re-search-forward re-box lim t)
(if (member (match-string 2) '("[ ]" "[-]" "TODO" "DOING"))
(setq c-off (1+ c-off))
(setq c-on (1+ c-on))))
(goto-char b1)
(insert (if f1
(format "[%d%%]" (/ (* 100 c-on)
(max 1 (+ c-on c-off))))
(format "[%d/%d]" c-on (+ c-on c-off))))
(and (looking-at "\\[.*?\\]")
(replace-match ""))))
(when (interactive-p)
(message "Checkbox statistics updated %s (%d places)"
(if all "in entire file" "in current outline entry")
cstat)))))
(defadvice org-update-checkbox-count (around wicked activate)
"Fix the built-in checkbox count to understand headlines."
(setq ad-return-value
(wicked/org-update-checkbox-count (ad-get-arg 1))))
_______________________________________________
Emacs-orgmode mailing list
Remember: use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode