From: Jose Robins <wulfhomme13-rook@yahoo.com>
To: org-mode <emacs-orgmode@gnu.org>
Subject: opinion+suggestions: Check boxes on headlines and cookies to take care of this into account...
Date: Fri, 04 Apr 2008 07:57:08 -0700 [thread overview]
Message-ID: <47F641C4.5010808@yahoo.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 4508 bytes --]
I like working with checkboxes, more than with headlines with a TODO
keyword. Unfortunately, right now checkboxes are lightweight and so do
not enjoy all the privileges enjoyed by headlines - especially clocking
in and out (which is very important for me). I wish that regular
checkboxes were also allowed to have the same privileges as headlines.
Has this idea been discussed before? Were there any decisions one way or
the other.
Another option is to have checkboxes on headlines (which I find very
intuitive). On one of Sacha Chua's blogs I found a defun to allow
cookies to update checkbox count on a parent headline cookie if there
were checkboxes on it's subtree headlines. This was given in one of her
chapters in her new book that she had posted online
http://sachachua.com/notebook/wickedcoolemacs/wc-emacs-07-managing-your-notes.pdf
So I took that and modified it *slightly* - (it had a bug whereby if the
item after the subtree list was at the same level as it's parent's
parent, the checkbox count would get confused and still keep on
counting)... Still there are a few issues.
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))))
[-- Attachment #1.2: Type: text/html, Size: 7802 bytes --]
[-- Attachment #2: Type: text/plain, Size: 204 bytes --]
_______________________________________________
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
next reply other threads:[~2008-04-04 14:57 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-04 14:57 Jose Robins [this message]
2008-04-04 14:59 ` opinion+suggestions: Check boxes on headlines and cookies to take care of this into account Jose Robins
[not found] ` <87sky14sy8.fsf@kassiopeya.localdomain>
[not found] ` <47F6443F.1030105@yahoo.com>
2008-04-04 14:22 ` Sebastian Rose
2008-04-04 16:00 ` Jose Robins
2008-04-04 14:26 ` Sebastian Rose
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=47F641C4.5010808@yahoo.com \
--to=wulfhomme13-rook@yahoo.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).