From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Peter Westlake" Subject: Re: Searching for tags or todo keywords Date: Mon, 15 Sep 2008 23:30:45 +0100 Message-ID: <1221517845.24657.1274134637@webmail.messagingengine.com> References: <1219411261.28705.1269971211@webmail.messagingengine.com> <8B62D5CA-840C-4464-A7DE-310209EB8FEA@uva.nl> Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KfMat-0004tO-OO for emacs-orgmode@gnu.org; Mon, 15 Sep 2008 18:30:55 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KfMat-0004tC-9d for emacs-orgmode@gnu.org; Mon, 15 Sep 2008 18:30:55 -0400 Received: from [199.232.76.173] (port=45575 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KfMat-0004t9-1k for emacs-orgmode@gnu.org; Mon, 15 Sep 2008 18:30:55 -0400 Received: from out1.smtp.messagingengine.com ([66.111.4.25]:53073) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KfMas-0007Q2-Mv for emacs-orgmode@gnu.org; Mon, 15 Sep 2008 18:30:54 -0400 Content-Disposition: inline In-Reply-To: <8B62D5CA-840C-4464-A7DE-310209EB8FEA@uva.nl> 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: Carsten Dominik Cc: emacs-orgmode@gnu.org On Sat, 13 Sep 2008 21:10:15 +0200, "Carsten Dominik" said: > Hi Peter, > > as you have seen, changing the logic is not easy, for a number of > reasons. I would like to have parenthesis, but since the parsing is > done by string processing, any parenthesis in one of the search > strings would be difficult to handle. > > Some work-arounds: > > 1. Have you thought about using a sparse tree? Or is you stuff in > different files? All the things I'm interested in for this are in one file, so that would work. It would need a regexp that duplicated some of the logic to match todos and tags, I guess. > 2. You could use categories to mark the entries. Basically make each > project its own category. Yes, that's a definite possibility. > 3. Have you tried follow mode in the agenda? Then you will always > see, in another window, the embedding of the entry you are > looking at. Yes, or just hitting Space. This works nicely, thanks! Another thing I've done is to add a TODO type called PROJECT. That also makes it easy to put projects at different levels in the tree, which is good because I have a huge file of things to do that I had been keeping in outline-mode, and this is a lot easier than moving all the project-type subtrees to level 2. > HTH It does, thanks! Peter. > - Carsten > > On Aug 22, 2008, at 3:21 PM, Peter Westlake wrote: > > > I only discovered org-mode a couple of weeks ago, so apologies if > > this is a FAQ, or the patch is in the wrong format. > > > > I would like to define an agenda command to show TODO items in the > > context of the projects to which they belong, like this: > > > > todo: .Widget project todo: ..TODO Gather widget > > requirements todo: .Gadget project todo: ..TODO Plan > > the end of project party > > > > That would be a search like: > > > > (LEVEL=2) | (/TODO) > > > > But LEVEL=2|/TODO is interpreted as (LEVEL=2|) & (/TODO) because / > > has the lowest precedence. > > > > /TODO|LEVEL=2 treats LEVEL as a TODO word instead of a tag. > > > > Is there any way around this, short of implementing parentheses? > > > > One possibility might be to make operators that are like / but bind > > most tightly, one to say "this is a todo keyword" and one to say > > "this is a tag". For instance, if \ was like / but high precedence, > > and % was the opposite of \, my query would become: > > > > \TODO | %LEVEL=2 > > > > Having looked at the code, that looks almost as hard as parens. > > > > Next idea: since "/" means "and this TODO expression", add "\" > > meaning "or this TODO expression". So my query becomes: > > > > LEVEL=2\TODO > > > > This is a lot easier to implement. In fact, this patch does it: > > > > diff -wu /usr/share/emacs/site-lisp/org-mode/org.el > > /home/pwestlake/elisp/org.el --- /usr/share/emacs/site-lisp/org- > > mode/org.el 2008-06-17 20:36:44.000000000 +0100 +++ > > /home/pwestlake/elisp/org.el 2008-08-22 14:13:44.031536000 > > +0100 @@ -9381,17 +9381,26 @@ tagsmatch todomatch tagsmatcher > > todomatcher kwd matcher orterms term orlist re-p str-p level-p > > level-op prop-p pn pv po cat-p gv) > > - (if (string-match "/+" match) > > + (cond ((string-match "/+" match) ;; match contains also a todo- > > matching request > > - (progn (setq tagsmatch (substring match 0 (match-beginning > > 0)) todomatch (substring match (match-end 0))) (if (string- > > match "^!" todomatch) (setq todo-only t todomatch > > (substring todomatch 1))) (if (string-match "^\\s-*$" > > todomatch) > > - (setq todomatch nil))) > > + (setq todomatch nil)) > > + (setq todo-op 'and todo-op-default t)) > > + ((string-match "\\\\+" match) > > + (setq tagsmatch (substring match 0 (match-beginning 0)) > > + todomatch (substring match (match-end 0))) > > + (if (string-match "^!" todomatch) > > + (setq todo-only t todomatch (substring todomatch > > 1))) > > + (if (string-match "^\\s-*$" todomatch) > > + (setq todomatch nil)) > > + (setq todo-op 'or todo-op-default nil)) + ;; only > > matching tags > > - (setq tagsmatch match todomatch nil)) > > + (t (setq tagsmatch match todomatch nil todo-op-default t > > todo-op 'and))) > > > > ;; Make the tags matcher (if (or (not tagsmatch) (not (string- > > match "\\S-" tagsmatch))) @@ -9447,7 +9456,7 @@ (list > > 'progn '(setq org-cached-props nil) tagsmatcher))) ;; Make the > > todo matcher (if (or (not todomatch) (not (string-match "\\S-" > > todomatch))) > > - (setq todomatcher t) > > + (setq todomatcher todo-op-default) (setq orterms (org-split- > > string todomatch "|") orlist nil) (while (setq term (pop > > orterms)) (while (string-match re term) @@ -9471,7 +9480,7 > > @@ > > > > ;; Return the string and lisp forms of the matcher (setq matcher > > (if todomatcher > > - (list 'and tagsmatcher todomatcher) > > + (list todo-op tagsmatcher todomatcher) > > tagsmatcher)) (cons match0 matcher))) > > > > > > Regards, > > > > Peter. > > > > > > > > > > _______________________________________________ > > 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 >