From: Daniel Schoepe <daniel.schoepe@googlemail.com>
To: Austin Clements <amdragon@mit.edu>, Carl Worth <cworth@cworth.org>
Cc: notmuch@notmuchmail.org
Subject: Re: [PATCH] emacs: Make the queries used in the all-tags section
Date: Wed, 25 May 2011 19:56:51 +0200 [thread overview]
Message-ID: <871uzmwtng.fsf@gilead.invalid> (raw)
In-Reply-To: <874o4iwwp5.fsf@gilead.invalid>
[-- Attachment #1.1: Type: text/plain, Size: 134 bytes --]
I accidentally used `filter' in the previous patch which isn't defined
by default during runtime, updated version in the attachment.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-emacs-Make-queries-used-in-the-all-tags-section-conf.patch --]
[-- Type: text/x-diff, Size: 4576 bytes --]
From e8f5e997b7082a50f75d7329a69fccc126a21e5e Mon Sep 17 00:00:00 2001
From: Daniel Schoepe <daniel.schoepe@googlemail.com>
Date: Fri, 20 May 2011 00:53:50 +0200
Subject: [PATCH] emacs: Make queries used in the all-tags section
configurable
This patch adds a customization variable that controls what queries
are used to construct the all-tags section in notmuch-hello. It allows
the user to specify a function to construct the query given a tag or
a string that is used as a filter for each tag.
It also adds a variable to hide various tags from the all-tags section.
Signed-off-by: Daniel Schoepe <daniel.schoepe@googlemail.com>
---
emacs/notmuch-hello.el | 38 +++++++++++++++++++++++++++++++++++---
emacs/notmuch-lib.el | 12 ++++++++++++
2 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el
index e58dd24..b3f133c 100644
--- a/emacs/notmuch-hello.el
+++ b/emacs/notmuch-hello.el
@@ -55,6 +55,24 @@
:type 'boolean
:group 'notmuch)
+(defcustom notmuch-hello-tag-list-make-query nil
+ "Function or string to generate queries for the all tags list.
+
+This variable controls which query results are shown for each tag
+in the \"all tags\" list. It can be nil (for default behaviour,
+displaying all messages for a tag), a string that is used as a
+filter for messages having that tag (equivalent to \"tag:TAG
+and (THIS-VARIABLE)\", or a function that is given a tag and
+should return the query that is to be used for the tag. If it
+returns nil, the corresponding tag will be hidden."
+ :type '(choice (const nil :tag "tag:TAG") string function)
+ :group 'notmuch)
+
+(defcustom notmuch-hello-hide-tags nil
+ "List of tags to be hidden in the \"all tags\"-section."
+ :type '(repeat string)
+ :group 'notmuch)
+
(defface notmuch-hello-logo-background
'((((class color)
(background dark))
@@ -318,6 +336,22 @@ Complete list of currently available key bindings:
;;(setq buffer-read-only t)
)
+(defun notmuch-hello-generate-tag-alist ()
+ "Return an alist from tags to queries to display in the all-tags section."
+ (notmuch-filter
+ 'cdr
+ (mapcar '(lambda (tag)
+ (cons tag
+ (cond
+ ((functionp notmuch-hello-tag-list-make-query)
+ (funcall notmuch-hello-tag-list-make-query tag))
+ ((stringp notmuch-hello-tag-list-make-query)
+ (concat "tag:" tag " and ("
+ notmuch-hello-tag-list-make-query ")"))
+ (t (concat "tag:" tag)))))
+ (notmuch-filter (lambda (tag) (not (member tag notmuch-hello-hide-tags)))
+ (process-lines notmuch-command "search-tags")))))
+
;;;###autoload
(defun notmuch-hello (&optional no-display)
"Run notmuch and display saved searches, known tags, etc."
@@ -396,9 +430,7 @@ Complete list of currently available key bindings:
if (> (string-to-number (notmuch-saved-search-count (cdr elem))) 0)
collect elem)))
(saved-widest (notmuch-hello-longest-label saved-alist))
- (alltags-alist (if notmuch-show-all-tags-list
- (mapcar '(lambda (tag) (cons tag (concat "tag:" tag)))
- (process-lines notmuch-command "search-tags"))))
+ (alltags-alist (if notmuch-show-all-tags-list (notmuch-hello-generate-tag-alist)))
(alltags-widest (notmuch-hello-longest-label alltags-alist))
(widest (max saved-widest alltags-widest)))
diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
index cc80fb2..a3195ff 100644
--- a/emacs/notmuch-lib.el
+++ b/emacs/notmuch-lib.el
@@ -120,6 +120,18 @@ within the current window."
(or (memq prop buffer-invisibility-spec)
(assq prop buffer-invisibility-spec)))))
+;; notmuch- prefix to avoid clashes with user-defined filter-functions:
+;; For instance, the filter-function suggested in the elisp cookbook
+;; on the emacswiki always filters out elements that are nil
+;; even if the predicate returns t for nil; hence this has slightly
+;; different semantics than what some users have defined for themselves.
+(defun notmuch-filter (pred lst)
+ "Return a list containing all elements from LST that satisfy PRED."
+ (and lst
+ (if (funcall pred (car lst))
+ (cons (car lst) (notmuch-filter pred (cdr lst)))
+ (notmuch-filter pred (cdr lst)))))
+
; This lets us avoid compiling these replacement functions when emacs
; is sufficiently new enough to supply them alone. We do the macro
; treatment rather than just wrapping our defun calls in a when form
--
1.7.5.1
[-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --]
next prev parent reply other threads:[~2011-05-25 17:57 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-19 23:18 [PATCH] emacs: Make the queries used in the all-tags section Daniel Schoepe
2011-05-24 20:39 ` Carl Worth
2011-05-24 21:01 ` Daniel Schoepe
2011-05-24 22:04 ` Carl Worth
2011-05-25 4:10 ` Austin Clements
2011-05-25 10:04 ` Daniel Schoepe
2011-05-25 14:44 ` Austin Clements
2011-05-25 16:51 ` Daniel Schoepe
2011-05-25 17:56 ` Daniel Schoepe [this message]
2011-05-25 19:11 ` Austin Clements
2011-05-25 21:21 ` Daniel Schoepe
2011-05-25 22:42 ` Austin Clements
2011-05-25 23:21 ` Daniel Schoepe
2011-05-26 1:05 ` Carl Worth
2011-05-26 22:04 ` Carl Worth
2011-05-27 3:56 ` Daniel Kahn Gillmor
-- strict thread matches above, loose matches on Subject: below --
2011-05-26 3:27 Austin Clements
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://notmuchmail.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=871uzmwtng.fsf@gilead.invalid \
--to=daniel.schoepe@googlemail.com \
--cc=amdragon@mit.edu \
--cc=cworth@cworth.org \
--cc=notmuch@notmuchmail.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://yhetil.org/notmuch.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).