]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch-jump.el
emacs: Add new option notmuch-search-hide-excluded
[notmuch] / emacs / notmuch-jump.el
index adf796504bd224f123df3c5ab2475b87675f3b81..3161ed9526d52d5b8de9a9d08eb3bef626eb38ec 100644 (file)
@@ -1,4 +1,4 @@
-;;; notmuch-jump.el --- User-friendly shortcut keys
+;;; notmuch-jump.el --- User-friendly shortcut keys  -*- lexical-binding: t -*-
 ;;
 ;; Copyright © Austin Clements
 ;;
 
 ;;; Code:
 
-(eval-when-compile
-  (require 'cl-lib)
-  (require 'pcase))
-
 (require 'notmuch-lib)
 (require 'notmuch-hello)
 
-(eval-and-compile
-  (unless (fboundp 'window-body-width)
-    ;; Compatibility for Emacs pre-24
-    (defalias 'window-body-width 'window-width)))
+(declare-function notmuch-search "notmuch")
+(declare-function notmuch-tree "notmuch-tree")
+(declare-function notmuch-unthreaded "notmuch-tree")
 
 ;;;###autoload
 (defun notmuch-jump-search ()
@@ -55,24 +50,36 @@ fast way to jump to a saved search from anywhere in Notmuch."
                 (cl-case (plist-get saved-search :sort-order)
                   (newest-first nil)
                   (oldest-first t)
-                  (otherwise (default-value 'notmuch-search-oldest-first)))))
+                  (otherwise (default-value 'notmuch-search-oldest-first))))
+               (exclude (cl-case (plist-get saved-search :excluded)
+                          (hide t)
+                          (show nil)
+                          (otherwise notmuch-search-hide-excluded))))
            (push (list key name
                        (cond
                         ((eq (plist-get saved-search :search-type) 'tree)
-                         `(lambda () (notmuch-tree ',query)))
+                         (lambda () (notmuch-tree query nil nil nil nil nil nil
+                                             oldest-first exclude)))
                         ((eq (plist-get saved-search :search-type) 'unthreaded)
-                         `(lambda () (notmuch-unthreaded ',query)))
+                         (lambda () (notmuch-unthreaded query nil nil nil nil
+                                                   oldest-first exclude)))
                         (t
-                         `(lambda () (notmuch-search ',query ',oldest-first)))))
+                         (lambda () (notmuch-search query oldest-first exclude)))))
                  action-map)))))
     (setq action-map (nreverse action-map))
     (if action-map
        (notmuch-jump action-map "Search: ")
-      (error "To use notmuch-jump, \
-please customize shortcut keys in notmuch-saved-searches."))))
+      (error "To use notmuch-jump, %s"
+            "please customize shortcut keys in notmuch-saved-searches."))))
+
+(defface notmuch-jump-key
+  '((t :inherit minibuffer-prompt))
+  "Default face used for keys in `notmuch-jump' and related."
+  :group 'notmuch-faces)
 
 (defvar notmuch-jump--action nil)
 
+;;;###autoload
 (defun notmuch-jump (action-map prompt)
   "Interactively prompt for one of the keys in ACTION-MAP.
 
@@ -124,14 +131,14 @@ ACTION-MAP.  These strings can be inserted into a tabular
 buffer."
   ;; Compute the maximum key description width
   (let ((key-width 1))
-    (pcase-dolist (`(,key ,desc) action-map)
+    (pcase-dolist (`(,key ,_desc) action-map)
       (setq key-width
            (max key-width
                 (string-width (format-kbd-macro key)))))
     ;; Format each action
     (mapcar (pcase-lambda (`(,key ,desc))
              (setq key (format-kbd-macro key))
-             (concat (propertize key 'face 'minibuffer-prompt)
+             (concat (propertize key 'face 'notmuch-jump-key)
                      (make-string (- key-width (length key)) ? )
                      " " desc))
            action-map)))
@@ -168,42 +175,42 @@ buffer."
   "Translate ACTION-MAP into a minibuffer keymap."
   (let ((map (make-sparse-keymap)))
     (set-keymap-parent map notmuch-jump-minibuffer-map)
-    (pcase-dolist (`(,key ,name ,fn) action-map)
-      (if (= (length key) 1)
-         (define-key map key
-           `(lambda () (interactive)
-              (setq notmuch-jump--action ',fn)
-              (exit-minibuffer)))))
+    (pcase-dolist (`(,key ,_name ,fn) action-map)
+      (when (= (length key) 1)
+       (define-key map key
+         (lambda ()
+           (interactive)
+           (setq notmuch-jump--action fn)
+           (exit-minibuffer)))))
     ;; By doing this in two passes (and checking if we already have a
     ;; binding) we avoid problems if the user specifies a binding which
     ;; is a prefix of another binding.
-    (pcase-dolist (`(,key ,name ,fn) action-map)
-      (if (> (length key) 1)
-         (let* ((key (elt key 0))
-                (keystr (string key))
-                (new-prompt (concat prompt (format-kbd-macro keystr) " "))
-                (action-submap nil))
-           (unless (lookup-key map keystr)
-             (pcase-dolist (`(,k ,n ,f) action-map)
-               (when (= key (elt k 0))
-                 (push (list (substring k 1) n f) action-submap)))
-             ;; We deal with backspace specially
-             (push (list (kbd "DEL")
-                         "Backup"
-                         (apply-partially #'notmuch-jump action-map prompt))
-                   action-submap)
-             (setq action-submap (nreverse action-submap))
-             (define-key map keystr
-               `(lambda () (interactive)
-                  (setq notmuch-jump--action
-                        ',(apply-partially #'notmuch-jump
-                                           action-submap
-                                           new-prompt))
-                  (exit-minibuffer)))))))
+    (pcase-dolist (`(,key ,_name ,_fn) action-map)
+      (when (> (length key) 1)
+       (let* ((key (elt key 0))
+              (keystr (string key))
+              (new-prompt (concat prompt (format-kbd-macro keystr) " "))
+              (action-submap nil))
+         (unless (lookup-key map keystr)
+           (pcase-dolist (`(,k ,n ,f) action-map)
+             (when (= key (elt k 0))
+               (push (list (substring k 1) n f) action-submap)))
+           ;; We deal with backspace specially
+           (push (list (kbd "DEL")
+                       "Backup"
+                       (apply-partially #'notmuch-jump action-map prompt))
+                 action-submap)
+           (setq action-submap (nreverse action-submap))
+           (define-key map keystr
+             (lambda ()
+               (interactive)
+               (setq notmuch-jump--action
+                     (apply-partially #'notmuch-jump
+                                      action-submap
+                                      new-prompt))
+               (exit-minibuffer)))))))
     map))
 
-;;
-
 (provide 'notmuch-jump)
 
 ;;; notmuch-jump.el ends here