emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Carsten Dominik <dominik@science.uva.nl>
To: Peter Westlake <peter.westlake@pobox.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: Searching for tags or todo keywords
Date: Sat, 13 Sep 2008 21:10:15 +0200	[thread overview]
Message-ID: <8B62D5CA-840C-4464-A7DE-310209EB8FEA@uva.nl> (raw)
In-Reply-To: <1219411261.28705.1269971211@webmail.messagingengine.com>

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?

2. You could use categories to mark the entries.  Basically make each  
project its own category.

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.


HTH

- 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

  reply	other threads:[~2008-09-13 19:59 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 [this message]
2008-09-15 22:30   ` Peter Westlake
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=8B62D5CA-840C-4464-A7DE-310209EB8FEA@uva.nl \
    --to=dominik@science.uva.nl \
    --cc=emacs-orgmode@gnu.org \
    --cc=peter.westlake@pobox.com \
    /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).