[PATCH] emacs: hello: allow extras to add to saved-search defcustom
Mark Walters
markwalters1009 at gmail.com
Sun May 4 05:45:21 PDT 2014
This adds an extra variable notmuch-saved-search-extras that allows
the user to add extra options to the saved-search customize
variable. Of course it is up to them to make these extra options do
anything afterwards.
The difficulty is that the code definining a defcustom is executed
when the the file is first read which would normally occur before any
optional extras are loaded.
To get around this I suggest that extras that wish to use this
infrastucture add a helper loader file that does something like
the following (this example is for a tweaked version of Austin's notmuch-go)
(defvar notmuch-saved-search-extras nil)
(setq notmuch-saved-search-extras
(append notmuch-saved-search-extras
'((checklist :inline t
:format "%v"
(group :format "%v"
:inline t
(const :format " Go key: " :go.key)
(key-sequence :format "%v"))))))
(eval-after-load 'notmuch '(require 'notmuch-go))
(provide 'notmuch-go-loader)
The user should then (require 'notmuch-go-loader) before loading notmuch.
---
The patch below is quite simple: almost all of the diff is
whitespace. The more difficult part to get right was the above code
snippet. It would be nice if a single file could say "don't read the
following code until feature 'notmuch is present" but I don't know how
to do that cleanly.
The above at least means that it is simple from a user's
perspective. And all that happens if they do load the extension after
notmuch is that the defcustom is not updated and that is unavoidable.
Best wishes
Mark
emacs/notmuch-hello.el | 28 ++++++++++++++++------------
1 file changed, 16 insertions(+), 12 deletions(-)
diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el
index 3de5238..e627f42 100644
--- a/emacs/notmuch-hello.el
+++ b/emacs/notmuch-hello.el
@@ -76,21 +76,25 @@ (defun notmuch-hello--saved-searches-to-plist (symbol)
(let ((saved-searches (default-value symbol)))
(mapcar #'notmuch-hello-saved-search-to-plist saved-searches)))
+(defvar notmuch-saved-search-extras nil
+ "Extra formats to add to defcustom saved search widget")
+
(define-widget 'notmuch-saved-search-plist 'list
"A single saved search property list."
:tag "Saved Search"
- :args '((list :inline t
- :format "%v"
- (group :format "%v" :inline t (const :format " Name: " :name) (string :format "%v"))
- (group :format "%v" :inline t (const :format " Query: " :query) (string :format "%v")))
- (checklist :inline t
- :format "%v"
- (group :format "%v" :inline t (const :format "Count-Query: " :count-query) (string :format "%v"))
- (group :format "%v" :inline t (const :format "" :sort-order)
- (choice :tag " Sort Order"
- (const :tag "Default" nil)
- (const :tag "Oldest-first" oldest-first)
- (const :tag "Newest-first" newest-first))))))
+ :args (append '((list :inline t
+ :format "%v"
+ (group :format "%v" :inline t (const :format " Name: " :name) (string :format "%v"))
+ (group :format "%v" :inline t (const :format " Query: " :query) (string :format "%v")))
+ (checklist :inline t
+ :format "%v"
+ (group :format "%v" :inline t (const :format "Count-Query: " :count-query) (string :format "%v"))
+ (group :format "%v" :inline t (const :format "" :sort-order)
+ (choice :tag " Sort Order"
+ (const :tag "Default" nil)
+ (const :tag "Oldest-first" oldest-first)
+ (const :tag "Newest-first" newest-first)))))
+ notmuch-saved-search-extras))
(defcustom notmuch-saved-searches '((:name "inbox" :query "tag:inbox")
(:name "unread" :query "tag:unread"))
--
1.7.10.4
More information about the notmuch
mailing list