Hi This version looks good to me.
The only slight query I have is which key to bind it to: Austin used g in notmuch-go and this uses j. Austin said on irc that he chose g because it wasn't bound and matched gmail's shortcut. Personally I like j (as it starts fewer words than g) and given that we don't match any of gmail's other bindings I don't think there is much advantage to doing so in this case. In any case that's all bikeshedding: I like this patch with either binding. Best wishes Mark On Wed, 07 May 2014, David Edmondson <dme at dme.org> wrote: > Extended the saved search definition to allow the inclusion of an > accelerator key for the search. Bind 'j' in the common mode map as a > leader for such accelerator keys. > --- > emacs/notmuch-hello.el | 5 ++++- > emacs/notmuch-lib.el | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 50 insertions(+), 1 deletion(-) > > diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el > index 3de5238..64d5aa1 100644 > --- a/emacs/notmuch-hello.el > +++ b/emacs/notmuch-hello.el > @@ -85,6 +85,7 @@ searches so they still work in customize." > (group :format "%v" :inline t (const :format " Query: " > :query) (string :format "%v"))) > (checklist :inline t > :format "%v" > + (group :format "%v" :inline t (const :format " Key: " > :key) (key-sequence :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" > @@ -101,6 +102,7 @@ a plist. Supported properties are > > :name Name of the search (required). > :query Search to run (required). > + :key Optional accelerator key. > :count-query Optional extra query to generate the count > shown. If not present then the :query property > is used. > @@ -551,7 +553,8 @@ with `notmuch-hello-query-counts'." > (when elem > (if (> column-indent 0) > (widget-insert (make-string column-indent ? ))) > - (let* ((name (plist-get elem :name)) > + (let* ((key (plist-get elem :key)) > + (name (plist-get elem :name)) > (query (plist-get elem :query)) > (oldest-first (case (plist-get elem :sort-order) > (newest-first nil) > diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el > index 2941da3..f8c5f96 100644 > --- a/emacs/notmuch-lib.el > +++ b/emacs/notmuch-lib.el > @@ -25,6 +25,10 @@ > (require 'mm-decode) > (require 'cl) > > +(declare-function notmuch-search "notmuch" (&optional query oldest-first > target-thread target-line continuation)) > +(declare-function notmuch-saved-search-get "notmuch-hello" (saved-search > field)) > +(defvar notmuch-saved-searches) ;; In `notmuch-hello.el'. > + > (defvar notmuch-command "notmuch" > "Command to run the notmuch binary.") > > @@ -130,6 +134,7 @@ For example, if you wanted to remove an \"inbox\" tag and > add an > (define-key map "m" 'notmuch-mua-new-mail) > (define-key map "=" 'notmuch-refresh-this-buffer) > (define-key map "G" 'notmuch-poll-and-refresh-this-buffer) > + (define-key map "j" 'notmuch-jump) > map) > "Keymap shared by all notmuch modes.") > > @@ -845,6 +850,47 @@ status." > (defvar notmuch-show-process-crypto nil) > (make-variable-buffer-local 'notmuch-show-process-crypto) > > +;; Jump key support: > + > +(defvar notmuch-jump-search nil) > +(defun notmuch-jump-map () > + (let ((map (make-sparse-keymap)) > + help) > + (set-keymap-parent map minibuffer-local-map) > + (suppress-keymap map) > + (dolist (saved-search notmuch-saved-searches) > + (let ((key (notmuch-saved-search-get saved-search :key))) > + (when key > + (define-key map key `(lambda () > + (interactive) > + (setq notmuch-jump-search ',saved-search) > + (exit-minibuffer))) > + (push (format "%s: %s" > + (propertize key 'face 'minibuffer-prompt) > + (notmuch-saved-search-get saved-search :name)) > + help)))) > + ;; Hitting ? displays a quick hint of the accelerators. > + (define-key map "?" `(lambda () > + (interactive) > + (message "%s" > + (mapconcat #'identity > + ;; Reverse the list so > + ;; that elements appear > + ;; in the same order as > + ;; `notmuch-saved-searches'. > + (reverse ',help) > + " ")))) > + map)) > + > +(defun notmuch-jump () > + "Read a saved search accelerator key and perform the search." > + (interactive) > + (setq notmuch-jump-search nil) > + (read-from-minibuffer "Jump to saved search: " nil (notmuch-jump-map)) > + (when notmuch-jump-search > + (notmuch-search (notmuch-saved-search-get notmuch-jump-search :query) > + (notmuch-saved-search-get notmuch-jump-search > :oldest-first)))) > + > (provide 'notmuch-lib) > > ;; Local Variables: > -- > 2.0.0.rc0 > > _______________________________________________ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch