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