From: Jose Robins <jorobins@yahoo.com>
Cc: org-mode <emacs-orgmode@gnu.org>
Subject: Re: opinion+suggestions: Check boxes on headlines and cookies to take care of this into account...
Date: Fri, 04 Apr 2008 07:59:30 -0700 [thread overview]
Message-ID: <47F64252.5040303@yahoo.com> (raw)
In-Reply-To: <47F641C4.5010808@yahoo.com>
[-- Attachment #1.1: Type: text/plain, Size: 5104 bytes --]
Jose Robins wrote:
> 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.
>
One more thing I did (to Sacha's code) was to also count headlines with
TODO keywords and take that into account while updating the checkbox.
> 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
>
[-- Attachment #1.2: Type: text/html, Size: 9154 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 prev parent reply other threads:[~2008-04-04 14:59 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-04 14:57 opinion+suggestions: Check boxes on headlines and cookies to take care of this into account Jose Robins
2008-04-04 14:59 ` Jose Robins [this message]
[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=47F64252.5040303@yahoo.com \
--to=jorobins@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).