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