emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
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

  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).