emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Re: opinion+suggestions: Check boxes on headlines and cookies to take care of this into account...
       [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
  1 sibling, 1 reply; 5+ messages in thread
From: Sebastian Rose @ 2008-04-04 14:22 UTC (permalink / raw)
  To: Jose Robins; +Cc: emacs-orgmode Mailinglist

Yes, sorry - was just trying this on in exactly this moment :-/

The clocking works too, but then the TODO - STARTED - DONE is added
automatically.

But this one could be corrected by using the hook
org-after-todo-state-change-hook. Some (not very elegant) function like

(defun my-delete-todo-keyword ()
  "Delete todo keyword when DONE"
  (interactive)
 ;; missing code for finding the headline
 (beginning-of-line)            
 (forward-word 1)
 (backward-word 1)
 (if (looking-at "DONE")
     (progn          
       (kill-word 1)
       (delete-char 1))))


(setq org-after-todo-state-change-hook (quote (org-clock-out-if-current sr-org-todo-toggle-to-started my-delete-todo-keyword)))





-- 
Sebastian Rose, Hanover, Germany
Phone: +49 173 83 93 417
Mail.: sebatian_rose@gmx.de, s.rose@emma-stil.de

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: opinion+suggestions: Check boxes on headlines and cookies to take care of this into account...
       [not found]     ` <47F6443F.1030105@yahoo.com>
  2008-04-04 14:22       ` Sebastian Rose
@ 2008-04-04 14:26       ` Sebastian Rose
  1 sibling, 0 replies; 5+ messages in thread
From: Sebastian Rose @ 2008-04-04 14:26 UTC (permalink / raw)
  To: Jose Robins; +Cc: emacs-orgmode Mailinglist

Oh gosh - sorry, still missed your point.

You're looking for:


* [80%] something

  + [ ] asdfsdf
  + [X] sdafasd
  + [X] lökjlöjk

*** [100%] asfjlöjklsadf

    + [X] sadfdsaf
    + [X] lökjlöl

Would be nice indeed.


Regards

-- 
Sebastian Rose, Hanover, Germany
Phone: +49 173 83 93 417
Mail.: sebatian_rose@gmx.de, s.rose@emma-stil.de

^ permalink raw reply	[flat|nested] 5+ messages in thread

* opinion+suggestions: Check boxes on headlines and cookies to take care of this into account...
@ 2008-04-04 14:57 Jose Robins
  2008-04-04 14:59 ` Jose Robins
  0 siblings, 1 reply; 5+ messages in thread
From: Jose Robins @ 2008-04-04 14:57 UTC (permalink / raw)
  To: org-mode


[-- 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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: opinion+suggestions: Check boxes on headlines and cookies to take care of this into account...
  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
       [not found]   ` <87sky14sy8.fsf@kassiopeya.localdomain>
  0 siblings, 1 reply; 5+ messages in thread
From: Jose Robins @ 2008-04-04 14:59 UTC (permalink / raw)
  Cc: org-mode


[-- 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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: opinion+suggestions: Check boxes on headlines and cookies to take care of this into account...
  2008-04-04 14:22       ` Sebastian Rose
@ 2008-04-04 16:00         ` Jose Robins
  0 siblings, 0 replies; 5+ messages in thread
From: Jose Robins @ 2008-04-04 16:00 UTC (permalink / raw)
  To: Sebastian Rose; +Cc: emacs-orgmode Mailinglist


[-- Attachment #1.1: Type: text/plain, Size: 980 bytes --]



Sebastian Rose wrote:
> Yes, sorry - was just trying this on in exactly this moment :-/
>
> The clocking works too, but then the TODO - STARTED - DONE is added
> automatically.
Sorry Sebastian, did not exactly catch your point about "clocking works 
too". For me, if I try to clock in/out on a regular checkbox list item, 
clocking starts on it's parent and NOT on the checkbox list item.

> But this one could be corrected by using the hook
> org-after-todo-state-change-hook. Some (not very elegant) function like
>
> (defun my-delete-todo-keyword ()
>   "Delete todo keyword when DONE"
>   (interactive)
>  ;; missing code for finding the headline
>  (beginning-of-line)            
>  (forward-word 1)
>  (backward-word 1)
>  (if (looking-at "DONE")
>      (progn          
>        (kill-word 1)
>        (delete-char 1))))
>
>
> (setq org-after-todo-state-change-hook (quote (org-clock-out-if-current sr-org-todo-toggle-to-started my-delete-todo-keyword)))
>
>
>
>
>
>   

[-- Attachment #1.2: Type: text/html, Size: 1401 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

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-04-04 16:03 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
     [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

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