(make-variable-buffer-local 'notmuch-pick-message-buffer)
(put 'notmuch-pick-message-buffer 'permanent-local t)
+(defun notmuch-pick-to-message-pane (func)
+ "Execute FUNC in message pane.
+
+This function returns a function (so can be used as a keybinding)
+which executes function FUNC in the message pane if it is
+open (if the message pane is closed it does nothing)."
+ `(lambda ()
+ ,(concat "(In message pane) " (documentation func t))
+ (interactive)
+ (when (window-live-p notmuch-pick-message-window)
+ (with-selected-window notmuch-pick-message-window
+ (call-interactively #',func)))))
+
+(defun notmuch-pick-button-activate (&optional button)
+ "Activate BUTTON or button at point
+
+This function does not give an error if there is no button."
+ (interactive)
+ (let ((button (or button (button-at (point)))))
+ (when button (button-activate button))))
+
+(defun notmuch-pick-close-message-pane-and (func)
+ "Close message pane and execute FUNC.
+
+This function returns a function (so can be used as a keybinding)
+which closes the message pane if open and then executes function
+FUNC."
+ `(lambda ()
+ ,(concat "(Close message pane and) " (documentation func t))
+ (interactive)
+ (notmuch-pick-close-message-window)
+ (call-interactively #',func)))
+
(defvar notmuch-pick-mode-map
(let ((map (make-sparse-keymap)))
(define-key map [mouse-1] 'notmuch-pick-show-message)
(define-key map "|" 'notmuch-show-pipe-message)
(define-key map "w" 'notmuch-show-save-attachments)
(define-key map "v" 'notmuch-show-view-all-mime-parts)
+ (define-key map "c" 'notmuch-show-stash-map)
+
+ ;; these apply to the message pane
+ (define-key map (kbd "M-TAB") (notmuch-pick-to-message-pane #'notmuch-show-previous-button))
+ (define-key map (kbd "<backtab>") (notmuch-pick-to-message-pane #'notmuch-show-previous-button))
+ (define-key map (kbd "TAB") (notmuch-pick-to-message-pane #'notmuch-show-next-button))
+ (define-key map "e" (notmuch-pick-to-message-pane #'notmuch-pick-button-activate))
+
+ ;; bindings from show (or elsewhere) but we close the message pane first.
+ (define-key map "?" (notmuch-pick-close-message-pane-and #'notmuch-help))
+
+ ;; The main pick bindings
(define-key map "q" 'notmuch-pick-quit)
(define-key map "x" 'notmuch-pick-quit)
- (define-key map "?" 'notmuch-help)
(define-key map "a" 'notmuch-pick-archive-message-then-next)
(define-key map "=" 'notmuch-pick-refresh-view)
(define-key map "s" 'notmuch-pick-to-search)