From mboxrd@z Thu Jan  1 00:00:00 1970
From: Max Mikhanosha <max@openchat.com>
Subject: Re: PATCH: include in-progress/started todos into daily agenda
Date: Thu, 27 Sep 2007 10:33:08 -0400
Message-ID: <87r6kkdvq3.wl%max@openchat.com>
References: <87sl51dud4.wl%max@openchat.com>
Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka")
Content-Type: text/plain; charset=US-ASCII
Return-path: <emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org>
Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43)
	id 1IauQV-0006zt-KO
	for emacs-orgmode@gnu.org; Thu, 27 Sep 2007 10:33:15 -0400
Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43)
	id 1IauQQ-0006wp-Nc
	for emacs-orgmode@gnu.org; Thu, 27 Sep 2007 10:33:14 -0400
Received: from [199.232.76.173] (helo=monty-python.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.43) id 1IauQQ-0006wj-Bz
	for emacs-orgmode@gnu.org; Thu, 27 Sep 2007 10:33:10 -0400
Received: from p84-72.acedsl.com ([66.114.84.72] helo=momoland.openchat.com)
	by monty-python.gnu.org with esmtp (Exim 4.60)
	(envelope-from <max@openchat.com>) id 1IauQP-00025W-Cj
	for emacs-orgmode@gnu.org; Thu, 27 Sep 2007 10:33:09 -0400
Received: from momoland.openchat.com (localhost [127.0.0.1])
	by momoland.openchat.com (Postfix) with ESMTP id 88F2FF1639D5
	for <emacs-orgmode@gnu.org>; Thu, 27 Sep 2007 10:33:08 -0400 (EDT)
In-Reply-To: <87sl51dud4.wl%max@openchat.com>
List-Id: "General discussions about Org-mode." <emacs-orgmode.gnu.org>
List-Unsubscribe: <http://lists.gnu.org/mailman/listinfo/emacs-orgmode>,
	<mailto:emacs-orgmode-request@gnu.org?subject=unsubscribe>
List-Archive: <http://lists.gnu.org/pipermail/emacs-orgmode>
List-Post: <mailto:emacs-orgmode@gnu.org>
List-Help: <mailto:emacs-orgmode-request@gnu.org?subject=help>
List-Subscribe: <http://lists.gnu.org/mailman/listinfo/emacs-orgmode>,
	<mailto:emacs-orgmode-request@gnu.org?subject=subscribe>
Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org
Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org
To: emacs-orgmode@gnu.org

Responding to my own email, because I accidentally deleted Carsten
response.

Carsten suggested that I check the block agenda functionality to see
if it already does the same thing. The block agenda have the following
little quirks which made me implement my own solution instead:

Example of block agenda:

--------------------------------------------------------------------
Day-agenda:
Thursday  27 September 2007
  proj:       Scheduled:  TODO [#C] Some scheduled task

====================
Global list of TODO items of type: INPROGRESS                                                            
  proj:       INPROGRESS [#A] Some task that is already in progress
---------------------------------------------------------------------


1. Items from the block agenda are a separate block, and not sorted
   together with the items scheduled for the same day. So even if my
   in-progress item is A its shown below the scheduled for this day
   item that is C

2. There are 3 lines of vertical space taken by the empty line at the
   end of the daily agenda, the === separator and the "Global list"
   heading. I usually use emacs from tty, so my screen is 100x30 so 3
   lines is 1/3 of the whole agenda buffer.

Below is how it looks like when in-progress items are treated as if
they were scheduled for today, which is what my patch does.

--------------------------------------------------------------------
Day-agenda:
Thursday  27 September 2007
  proj:       INPROGRESS [#A] Some task that is already in progress
  proj:       Scheduled:  TODO [#C] Some scheduled task
---------------------------------------------------------------------

Which is much clearer to me.  The in-progress tasks are in the same
list as the tasks scheduled for today, and are sorted together.

Its not problem if my patch is rejected, I have a less invasive
solution for my own needs that does the same thing with a single
defadvice. I have only sent a patch because IMHO ppl were already
discussing the same method of mixing the daily agenda with in-progress
items, but with a "manual" method of managing the in-progress items,
ie re-scheduling them every day until done with them.

At Wed, 26 Sep 2007 16:50:15 -0400, Max Mikhanosha wrote:
> 
> I had always used the day/weekly/mothly agenda vs the searchable
> agenda separately and sometimes missed things because they were in one
> list but not another.  For example when looking into a tags based
> agenda for :computer, I may have missed some other item that was
> scheduled for today but not tagged with computer, and via versa.
> 
> The method described in the post titled "Not using GTD" post, where
> only the daily agenda is the primary agenda used solves this problem,
> but I don't like to schedule/reschedule my items all the time. 
> 
> So inspired by the "Not using GTD" post, proposed patch allows
> specifying a TODO type that would always be included into daily
> agenda on a current day, as if it was scheduled.
> 
> So one can just mark items that need to be worked on doing the day as
> lets say "INPROGRESS" and they would stay in the daily agenda
> alongside/intermixed with the items scheduled for today until you
> close them. If you like to postpone the item, you put it as TODO
> again, and it would disappear.
> 
> Proposed patch is as plain text below, feel free to rewrite/change 
> as the method I've used may not have been optimal.
> 
> Regards,
>   Max
> 
> diff -rp -x '*.orig' -x '*.elc' -x '*~' org-5.10a.orig/org.el org-5.10a/org.el
> *** org-5.10a.orig/org.el	Wed Sep 26 13:33:20 2007
> --- org-5.10a/org.el	Wed Sep 26 16:33:52 2007
> *************** When nil, only the days which actually h
> *** 2323,2328 ****
> --- 2323,2342 ----
>     :group 'org-agenda-daily/weekly
>     :type 'boolean)
>   
> + (defcustom org-agenda-show-inprogress-todos nil
> +   "Non-nil means, include the TODO's of the type specified by
> + `org-inprogress-todos' into the daily agenda."
> +   :group 'org-agenda-daily/weekly
> +   :type 'boolean)
> + 
> + (defcustom org-inprogress-todos "INPROGRESS"
> +   "Specifies TODO type that would be automatically included into
> + the daily agenda when `org-agenda-show-inprogress-todos' is set.
> + You can specify more then one value separating them with |, for
> + example INPROGRESS|STARTED"
> +   :group 'org-agenda-daily/weekly
> +   :type 'string)
> + 
>   (defcustom org-agenda-format-date 'org-agenda-format-date-aligned
>     "Format string for displaying dates in the agenda.
>   Used by the daily/weekly agenda and by the timeline.  This should be
> *************** NDAYS defaults to `org-agenda-ndays'."
> *** 18056,18062 ****
>   		    (- sd (+ (if (< d 0) 7 0) d)))))
>   	 (day-numbers (list start))
>   	 (inhibit-redisplay (not debug-on-error))
> ! 	 s e rtn rtnall file date d start-pos end-pos todayp nd)
>       (setq org-agenda-redo-command
>   	  (list 'org-agenda-list (list 'quote include-all) start-day ndays))
>       ;; Make the list of days
> --- 18070,18077 ----
>   		    (- sd (+ (if (< d 0) 7 0) d)))))
>   	 (day-numbers (list start))
>   	 (inhibit-redisplay (not debug-on-error))
> ! 	 s e rtn rtnall file date d start-pos end-pos todayp nd
> !          args)
>       (setq org-agenda-redo-command
>   	  (list 'org-agenda-list (list 'quote include-all) start-day ndays))
>       ;; Make the list of days
> *************** NDAYS defaults to `org-agenda-ndays'."
> *** 18102,18117 ****
>   	    (setq end-pos (point))))
>         (setq files thefiles
>   	    rtnall nil)
>         (while (setq file (pop files))
>   	(catch 'nextfile
>   	  (org-check-agenda-file file)
> ! 	  (if org-agenda-show-log
> ! 	      (setq rtn (org-agenda-get-day-entries
> ! 			 file date
> ! 			 :deadline :scheduled :timestamp :sexp :closed))
> ! 	    (setq rtn (org-agenda-get-day-entries
> ! 		       file date
> ! 		       :deadline :scheduled :sexp :timestamp)))
>   	  (setq rtnall (append rtnall rtn))))
>         (if org-agenda-include-diary
>   	  (progn
> --- 18117,18132 ----
>   	    (setq end-pos (point))))
>         (setq files thefiles
>   	    rtnall nil)
> +       (setq args '(:deadline :scheduled :timestamp :sexp))
> +       (when org-agenda-show-log
> +         (push :closed args)) 
> +       (when org-agenda-show-inprogress-todos
> +         (push :inprogress args))
>         (while (setq file (pop files))
>   	(catch 'nextfile
>   	  (org-check-agenda-file file)
> !           (setq rtn (apply 'org-agenda-get-day-entries
> !                            file date args))
>   	  (setq rtnall (append rtnall rtn))))
>         (if org-agenda-include-diary
>   	  (progn
> *************** the documentation of `org-diary'."
> *** 18606,18611 ****
> --- 18621,18632 ----
>   	      ;; The way we repeatedly append to `results' makes it O(n^2) :-(
>   	      (while (setq arg (pop args))
>   		(cond
> + 		 ((and (eq arg :inprogress)
> + 		       (equal date (calendar-current-date)))
> + 		  (let ((org-select-this-todo-keyword
> +                          org-inprogress-todos))
> +                     (setq rtn (org-agenda-get-todos))
> +                     (setq results (append results rtn))))
>   		 ((and (eq arg :todo)
>   		       (equal date (calendar-current-date)))
>   		  (setq rtn (org-agenda-get-todos))