From: "Peter Westlake" <peter.westlake@pobox.com>
To: Carsten Dominik <dominik@science.uva.nl>
Cc: emacs-orgmode@gnu.org
Subject: Re: Searching for tags or todo keywords
Date: Mon, 15 Sep 2008 23:30:45 +0100 [thread overview]
Message-ID: <1221517845.24657.1274134637@webmail.messagingengine.com> (raw)
In-Reply-To: <8B62D5CA-840C-4464-A7DE-310209EB8FEA@uva.nl>
On Sat, 13 Sep 2008 21:10:15 +0200, "Carsten Dominik"
<dominik@science.uva.nl> 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
>
next prev parent reply other threads:[~2008-09-15 22:30 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-22 13:21 Searching for tags or todo keywords Peter Westlake
2008-09-13 19:10 ` Carsten Dominik
2008-09-15 22:30 ` Peter Westlake [this message]
2008-09-16 4:06 ` Carsten Dominik
2008-09-16 5:15 ` Samuel Wales
2008-09-16 8:00 ` Carsten Dominik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1221517845.24657.1274134637@webmail.messagingengine.com \
--to=peter.westlake@pobox.com \
--cc=dominik@science.uva.nl \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).