From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: [PATCH] New variable to speed up custom agendas Date: Wed, 10 Mar 2010 17:15:58 +0100 Message-ID: <45979DDE-C07B-48AC-94A9-6FE530EF495C@gmail.com> References: <87eiju152a.fsf@fastmail.fm> Mime-Version: 1.0 (Apple Message framework v936) Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NpOZy-0007Vt-Al for emacs-orgmode@gnu.org; Wed, 10 Mar 2010 11:16:14 -0500 Received: from [140.186.70.92] (port=40770 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NpOZw-0007V9-Dj for emacs-orgmode@gnu.org; Wed, 10 Mar 2010 11:16:13 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1NpOZq-0000Oo-CY for emacs-orgmode@gnu.org; Wed, 10 Mar 2010 11:16:12 -0500 Received: from mail-ew0-f216.google.com ([209.85.219.216]:44364) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1NpOZq-0000OI-4U for emacs-orgmode@gnu.org; Wed, 10 Mar 2010 11:16:06 -0500 Received: by ewy8 with SMTP id 8so1224751ewy.8 for ; Wed, 10 Mar 2010 08:16:05 -0800 (PST) In-Reply-To: <87eiju152a.fsf@fastmail.fm> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: Matt Lundin Cc: Org Mode Hi Matt, wow, you have proven me wrong. There is a way to get a significant speedup in agenda construction, for special cases like you mentioned in an earlier message. This is brilliant. I have taken the patch, with a few small modifications: 1. I changed the constant `org-agenda-custom-commands-local-options' so that it will become a lot easier to bind this variable as an an option when configuring `org-agenda-custom-commands' using the customize interface. 2. I modified the docstring of the new variable so that the first line is a stand-alone sentence, as required in Emacs. 3. I moved the description of the symbols into your new variable, and made org-diary point to it. I think the new location is a better place for this. Excellent, thank you very much. Will you add an example to your org-agenda-custom-commands tutorial? - Carsten On Mar 9, 2010, at 5:39 AM, Matt Lundin wrote: > Hi Carsten, > > Below is a patch I've been using to speed up the construction of > agenda > views limited to certain types of entries (e.g., timestamps and > sexps). > Previously, I had constructed "calendar" views consisting only of > timestamps and sexps by using the variable org-agenda-skip-function to > exclude scheduled items and deadlines from the agenda. This, however, > proved somewhat slow (3-4 seconds for weekly calendars, 10-12 seconds > for monthly calendars). The patch below cuts the times to 1 and 3 > seconds respectively. I believe it provides an efficient alternative > to > the skip function by allowing the user to tweak the arguments passed > to > org-agenda-get-day-entries. > > Thanks for taking a look at this, and please do excuse any grotesque > errors perpetrated by an elisp novice. > > - Matt > > --8<---------------cut here---------------start------------->8--- > diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el > index 514634f..5ec0b32 100644 > --- a/lisp/org-agenda.el > +++ b/lisp/org-agenda.el > @@ -3089,6 +3089,21 @@ When EMPTY is non-nil, also include days > without any entries." > (defvar org-agenda-span nil) ; local variable in the agenda buffer > (defvar org-include-all-loc nil) ; local variable > > +(defvar org-agenda-entry-types > '(:deadline :scheduled :timestamp :sexp) > + "This variable is a list of symbols that controls the types of > +items that appear in the daily/weekly agenda. By default, items > +with deadlines, scheduled timestamps, active timestamps, and > +diary sexps are included. For a full list of possible arguments, > +see the documentation for the `org-diary' > + > +Never set this variable globally using `setq', because then it > +will apply to all future agenda commands. Instead, bind it with > +`let' to scope it dynamically into the the agenda-constructing > +command. A good way to set it is through options in > +`org-agenda-custom-commands'. For a more flexible (though > +somewhat less efficient) way of determining what is included in > +the daily/weekly agenda, see `org-agenda-skip-function'.") > + > ;;;###autoload > (defun org-agenda-list (&optional include-all start-day ndays) > "Produce a daily/weekly view from all files in variable `org- > agenda-files'. > @@ -3217,13 +3232,13 @@ given in `org-agenda-start-on-weekday'." > (setq rtn (org-agenda-get-day-entries > file date :closed))) > (org-agenda-show-log > - (setq rtn (org-agenda-get-day-entries > + (setq rtn (apply 'org-agenda-get-day-entries > file date > - :deadline > :scheduled :timestamp :sexp :closed))) > + (append '(:closed) org-agenda-entry-types)))) > (t > - (setq rtn (org-agenda-get-day-entries > - file date > - :deadline :scheduled :sexp :timestamp)))) > + (setq rtn (apply 'org-agenda-get-day-entries > + file date > + org-agenda-entry-types)))) > (setq rtnall (append rtnall rtn)))) > (if org-agenda-include-diary > (let ((org-agenda-search-headline-for-time t)) > --8<---------------cut here---------------end--------------->8--- > > > > > _______________________________________________ > Emacs-orgmode mailing list > Please use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode - Carsten