From: "Peter Westlake" <peter.westlake@pobox.com>
To: emacs-orgmode@gnu.org
Subject: Searching for tags or todo keywords
Date: Fri, 22 Aug 2008 14:21:01 +0100 [thread overview]
Message-ID: <1219411261.28705.1269971211@webmail.messagingengine.com> (raw)
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.
next reply other threads:[~2008-08-22 13:24 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-22 13:21 Peter Westlake [this message]
2008-09-13 19:10 ` Searching for tags or todo keywords Carsten Dominik
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=1219411261.28705.1269971211@webmail.messagingengine.com \
--to=peter.westlake@pobox.com \
--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).