mu4e-view-gnus: cleanup keymap

Do not derive the keymap from gnus article mode, so we don't get the
unwanted menu entries, and don't need to disable things manually.
This commit is contained in:
Dirk-Jan C. Binnema 2021-03-12 22:28:51 +02:00
parent 9423212fa0
commit 44d801e2b0
1 changed files with 149 additions and 159 deletions

View File

@ -161,195 +161,184 @@ with no charset."
(list handle attendee)) (list handle attendee))
handle-attendee)) handle-attendee))
(defvar mu4e-view-mode-map nil ;; We must neuter gnus-set-mode-line
"Keymap for \"*mu4e-view*\" buffers.") (defun mu4e~view-nop (func &rest args)
(unless mu4e-view-mode-map "Do nothing."
(setq mu4e-view-mode-map ;;(message "NOP %S %S %S %S" mu4e~view-mode major-mode func args)
(let ((map (make-sparse-keymap))) (unless (derived-mode-p '(mu4e-view-mode))
(apply func args)))
(define-key map (kbd "C-S-u") 'mu4e-update-mail-and-index) (defvar mu4e-view-mode-map
(define-key map (kbd "C-c C-u") 'mu4e-update-mail-and-index) (let ((map (make-sparse-keymap)))
(define-key map "q" 'mu4e~view-quit-buffer) (define-key map (kbd "C-S-u") 'mu4e-update-mail-and-index)
(define-key map (kbd "C-c C-u") 'mu4e-update-mail-and-index)
(define-key map "q" 'mu4e~view-quit-buffer)
;; note, 'z' is by-default bound to 'bury-buffer' ;; note, 'z' is by-default bound to 'bury-buffer'
;; but that's not very useful in this case ;; but that's not very useful in this case
(define-key map "z" 'ignore) (define-key map "z" 'ignore)
(define-key map "s" 'mu4e-headers-search) (define-key map "s" 'mu4e-headers-search)
(define-key map "S" 'mu4e-view-search-edit) (define-key map "S" 'mu4e-view-search-edit)
(define-key map "/" 'mu4e-view-search-narrow) (define-key map "/" 'mu4e-view-search-narrow)
(define-key map (kbd "<M-left>") 'mu4e-headers-query-prev) (define-key map (kbd "<M-left>") 'mu4e-headers-query-prev)
(define-key map (kbd "<M-right>") 'mu4e-headers-query-next) (define-key map (kbd "<M-right>") 'mu4e-headers-query-next)
(define-key map "b" 'mu4e-headers-search-bookmark) (define-key map "b" 'mu4e-headers-search-bookmark)
(define-key map "B" 'mu4e-headers-search-bookmark-edit) (define-key map "B" 'mu4e-headers-search-bookmark-edit)
(define-key map "%" 'mu4e-view-mark-pattern) (define-key map "%" 'mu4e-view-mark-pattern)
(define-key map "t" 'mu4e-view-mark-subthread) (define-key map "t" 'mu4e-view-mark-subthread)
(define-key map "T" 'mu4e-view-mark-thread) (define-key map "T" 'mu4e-view-mark-thread)
(define-key map "j" 'mu4e~headers-jump-to-maildir) (define-key map "j" 'mu4e~headers-jump-to-maildir)
(define-key map "g" 'mu4e-view-go-to-url) (define-key map "g" 'mu4e-view-go-to-url)
(define-key map "k" 'mu4e-view-save-url) (define-key map "k" 'mu4e-view-save-url)
(define-key map "f" 'mu4e-view-fetch-url) (define-key map "f" 'mu4e-view-fetch-url)
(define-key map "F" 'mu4e-compose-forward) (define-key map "F" 'mu4e-compose-forward)
(define-key map "R" 'mu4e-compose-reply) (define-key map "R" 'mu4e-compose-reply)
(define-key map "C" 'mu4e-compose-new) (define-key map "C" 'mu4e-compose-new)
(define-key map "E" 'mu4e-compose-edit) (define-key map "E" 'mu4e-compose-edit)
;; some gnus things we do not support (define-key map "." 'mu4e-view-raw-message)
(define-key map "G" 'ignore) (define-key map "|" 'mu4e-view-pipe)
(define-key map "I" 'ignore) (define-key map "a" 'mu4e-view-action)
(define-key map "J" 'ignore)
(define-key map "K" 'ignore)
(define-key map "L" 'ignore)
(define-key map "N" 'ignore)
(define-key map "V" 'ignore)
(define-key map "X" 'ignore)
(define-key map "Y" 'ignore)
(define-key map "Z" 'ignore)
(define-key map "." 'mu4e-view-raw-message) (define-key map ";" 'mu4e-context-switch)
(define-key map "|" 'mu4e-view-pipe)
(define-key map "a" 'mu4e-view-action)
(define-key map ";" 'mu4e-context-switch)
;; toggle header settings ;; toggle header settings
(define-key map "O" 'mu4e-headers-change-sorting) (define-key map "O" 'mu4e-headers-change-sorting)
(define-key map "P" 'mu4e-headers-toggle-threading) (define-key map "P" 'mu4e-headers-toggle-threading)
(define-key map "Q" 'mu4e-headers-toggle-full-search) (define-key map "Q" 'mu4e-headers-toggle-full-search)
(define-key map "W" 'mu4e-headers-toggle-include-related) (define-key map "W" 'mu4e-headers-toggle-include-related)
;; change the number of headers ;; change the number of headers
(define-key map (kbd "C-+") 'mu4e-headers-split-view-grow) (define-key map (kbd "C-+") 'mu4e-headers-split-view-grow)
(define-key map (kbd "C--") 'mu4e-headers-split-view-shrink) (define-key map (kbd "C--") 'mu4e-headers-split-view-shrink)
(define-key map (kbd "<C-kp-add>") 'mu4e-headers-split-view-grow) (define-key map (kbd "<C-kp-add>") 'mu4e-headers-split-view-grow)
(define-key map (kbd "<C-kp-subtract>") 'mu4e-headers-split-view-shrink) (define-key map (kbd "<C-kp-subtract>") 'mu4e-headers-split-view-shrink)
;; intra-message navigation ;; intra-message navigation
(define-key map (kbd "SPC") 'mu4e-view-scroll-up-or-next) (define-key map (kbd "SPC") 'mu4e-view-scroll-up-or-next)
(define-key map (kbd "<home>") 'beginning-of-buffer) (define-key map (kbd "<home>") 'beginning-of-buffer)
(define-key map (kbd "<end>") 'end-of-buffer) (define-key map (kbd "<end>") 'end-of-buffer)
(define-key map (kbd "RET") (define-key map (kbd "RET")
(lambda() (lambda()
(interactive) (interactive)
(if (eq (get-text-property (point) 'gnus-callback) 'gnus-button-push) (if (eq (get-text-property (point) 'gnus-callback) 'gnus-button-push)
(widget-button-press (point)) (widget-button-press (point))
(mu4e-scroll-up)))) (mu4e-scroll-up))))
(define-key map (kbd "<backspace>") 'mu4e-scroll-down) (define-key map (kbd "<backspace>") 'mu4e-scroll-down)
;; navigation between messages ;; navigation between messages
(define-key map "p" 'mu4e-view-headers-prev) (define-key map "p" 'mu4e-view-headers-prev)
(define-key map "n" 'mu4e-view-headers-next) (define-key map "n" 'mu4e-view-headers-next)
;; the same ;; the same
(define-key map (kbd "<M-down>") 'mu4e-view-headers-next) (define-key map (kbd "<M-down>") 'mu4e-view-headers-next)
(define-key map (kbd "<M-up>") 'mu4e-view-headers-prev) (define-key map (kbd "<M-up>") 'mu4e-view-headers-prev)
(define-key map (kbd "[") 'mu4e-view-headers-prev-unread) (define-key map (kbd "[") 'mu4e-view-headers-prev-unread)
(define-key map (kbd "]") 'mu4e-view-headers-next-unread) (define-key map (kbd "]") 'mu4e-view-headers-next-unread)
;; switching to view mode (if it's visible) ;; switching to view mode (if it's visible)
(define-key map "y" 'mu4e-select-other-view) (define-key map "y" 'mu4e-select-other-view)
;; attachments ;; attachments
(define-key map "e" 'mu4e-view-save-attachment) (define-key map "e" 'mu4e-view-save-attachment)
(define-key map "o" 'ignore)
(define-key map "A" 'ignore)
;; marking/unmarking ;; marking/unmarking
(define-key map "d" 'mu4e-view-mark-for-trash) (define-key map "d" 'mu4e-view-mark-for-trash)
(define-key map (kbd "<delete>") 'mu4e-view-mark-for-delete) (define-key map (kbd "<delete>") 'mu4e-view-mark-for-delete)
(define-key map (kbd "<deletechar>") 'mu4e-view-mark-for-delete) (define-key map (kbd "<deletechar>") 'mu4e-view-mark-for-delete)
(define-key map (kbd "D") 'mu4e-view-mark-for-delete) (define-key map (kbd "D") 'mu4e-view-mark-for-delete)
(define-key map (kbd "m") 'mu4e-view-mark-for-move) (define-key map (kbd "m") 'mu4e-view-mark-for-move)
(define-key map (kbd "r") 'mu4e-view-mark-for-refile) (define-key map (kbd "r") 'mu4e-view-mark-for-refile)
(define-key map (kbd "?") 'mu4e-view-mark-for-unread) (define-key map (kbd "?") 'mu4e-view-mark-for-unread)
(define-key map (kbd "!") 'mu4e-view-mark-for-read) (define-key map (kbd "!") 'mu4e-view-mark-for-read)
(define-key map (kbd "+") 'mu4e-view-mark-for-flag) (define-key map (kbd "+") 'mu4e-view-mark-for-flag)
(define-key map (kbd "-") 'mu4e-view-mark-for-unflag) (define-key map (kbd "-") 'mu4e-view-mark-for-unflag)
(define-key map (kbd "=") 'mu4e-view-mark-for-untrash) (define-key map (kbd "=") 'mu4e-view-mark-for-untrash)
(define-key map (kbd "&") 'mu4e-view-mark-custom) (define-key map (kbd "&") 'mu4e-view-mark-custom)
(define-key map (kbd "*") 'mu4e-view-mark-for-something) (define-key map (kbd "*") 'mu4e-view-mark-for-something)
(define-key map (kbd "<kp-multiply>") 'mu4e-view-mark-for-something) (define-key map (kbd "<kp-multiply>") 'mu4e-view-mark-for-something)
(define-key map (kbd "<insert>") 'mu4e-view-mark-for-something) (define-key map (kbd "<insert>") 'mu4e-view-mark-for-something)
(define-key map (kbd "<insertchar>") 'mu4e-view-mark-for-something) (define-key map (kbd "<insertchar>") 'mu4e-view-mark-for-something)
(define-key map (kbd "#") 'mu4e-mark-resolve-deferred-marks) (define-key map (kbd "#") 'mu4e-mark-resolve-deferred-marks)
;; misc ;; misc
(define-key map "w" 'visual-line-mode) (define-key map "w" 'visual-line-mode)
(define-key map "#" 'ignore) (define-key map (kbd "M-q") 'article-fill-long-lines)
(define-key map "h" 'ignore)
(define-key map (kbd "M-q") 'article-fill-long-lines)
;; next 3 only warn user when attempt in the message view ;; next 3 only warn user when attempt in the message view
(define-key map "u" 'mu4e-view-unmark) (define-key map "u" 'mu4e-view-unmark)
(define-key map "U" 'mu4e-view-unmark-all) (define-key map "U" 'mu4e-view-unmark-all)
(define-key map "x" 'mu4e-view-marked-execute) (define-key map "x" 'mu4e-view-marked-execute)
(define-key map "$" 'mu4e-show-log) (define-key map "$" 'mu4e-show-log)
(define-key map "H" 'mu4e-display-manual) (define-key map "H" 'mu4e-display-manual)
;; menu ;; menu
;;(define-key map [menu-bar] (make-sparse-keymap)) ;;(define-key map [menu-bar] (make-sparse-keymap))
(let ((menumap (make-sparse-keymap))) (let ((menumap (make-sparse-keymap)))
(define-key map [menu-bar headers] (cons "Mu4e" menumap)) (define-key map [menu-bar headers] (cons "Mu4e" menumap))
(define-key menumap [quit-buffer] (define-key menumap [quit-buffer]
'("Quit view" . mu4e~view-quit-buffer)) '("Quit view" . mu4e~view-quit-buffer))
(define-key menumap [display-help] '("Help" . mu4e-display-manual)) (define-key menumap [display-help] '("Help" . mu4e-display-manual))
(define-key menumap [sepa0] '("--")) (define-key menumap [sepa0] '("--"))
(define-key menumap [wrap-lines] (define-key menumap [wrap-lines]
'("Toggle wrap lines" . visual-line-mode)) '("Toggle wrap lines" . visual-line-mode))
(define-key menumap [raw-view] (define-key menumap [raw-view]
'("View raw message" . mu4e-view-raw-message)) '("View raw message" . mu4e-view-raw-message))
(define-key menumap [pipe] (define-key menumap [pipe]
'("Pipe through shell" . mu4e-view-pipe)) '("Pipe through shell" . mu4e-view-pipe))
(define-key menumap [sepa1] '("--")) (define-key menumap [sepa1] '("--"))
(define-key menumap [mark-delete] (define-key menumap [mark-delete]
'("Mark for deletion" . mu4e-view-mark-for-delete)) '("Mark for deletion" . mu4e-view-mark-for-delete))
(define-key menumap [mark-untrash] (define-key menumap [mark-untrash]
'("Mark for untrash" . mu4e-view-mark-for-untrash)) '("Mark for untrash" . mu4e-view-mark-for-untrash))
(define-key menumap [mark-trash] (define-key menumap [mark-trash]
'("Mark for trash" . mu4e-view-mark-for-trash)) '("Mark for trash" . mu4e-view-mark-for-trash))
(define-key menumap [mark-move] (define-key menumap [mark-move]
'("Mark for move" . mu4e-view-mark-for-move)) '("Mark for move" . mu4e-view-mark-for-move))
(define-key menumap [sepa2] '("--")) (define-key menumap [sepa2] '("--"))
(define-key menumap [resend] '("Resend" . mu4e-compose-resend)) (define-key menumap [resend] '("Resend" . mu4e-compose-resend))
(define-key menumap [forward] '("Forward" . mu4e-compose-forward)) (define-key menumap [forward] '("Forward" . mu4e-compose-forward))
(define-key menumap [reply] '("Reply" . mu4e-compose-reply)) (define-key menumap [reply] '("Reply" . mu4e-compose-reply))
(define-key menumap [compose-new] '("Compose new" . mu4e-compose-new)) (define-key menumap [compose-new] '("Compose new" . mu4e-compose-new))
(define-key menumap [sepa3] '("--")) (define-key menumap [sepa3] '("--"))
(define-key menumap [query-next] (define-key menumap [query-next]
'("Next query" . mu4e-headers-query-next)) '("Next query" . mu4e-headers-query-next))
(define-key menumap [query-prev] (define-key menumap [query-prev]
'("Previous query" . mu4e-headers-query-prev)) '("Previous query" . mu4e-headers-query-prev))
(define-key menumap [narrow-search] (define-key menumap [narrow-search]
'("Narrow search" . mu4e-headers-search-narrow)) '("Narrow search" . mu4e-headers-search-narrow))
(define-key menumap [bookmark] (define-key menumap [bookmark]
'("Search bookmark" . mu4e-headers-search-bookmark)) '("Search bookmark" . mu4e-headers-search-bookmark))
(define-key menumap [jump] (define-key menumap [jump]
'("Jump to maildir" . mu4e~headers-jump-to-maildir)) '("Jump to maildir" . mu4e~headers-jump-to-maildir))
(define-key menumap [search] (define-key menumap [search]
'("Search" . mu4e-headers-search)) '("Search" . mu4e-headers-search))
(define-key menumap [sepa4] '("--")) (define-key menumap [sepa4] '("--"))
(define-key menumap [next] '("Next" . mu4e-view-headers-next)) (define-key menumap [next] '("Next" . mu4e-view-headers-next))
(define-key menumap [previous] '("Previous" . mu4e-view-headers-prev))) (define-key menumap [previous] '("Previous" . mu4e-view-headers-prev)))
map))
(fset 'mu4e-view-mode-map mu4e-view-mode-map)) (set-keymap-parent map special-mode-map)
map)
"Keymap for mu4e-view mode")
(defcustom mu4e-view-mode-hook nil (defcustom mu4e-view-mode-hook nil
"Hook run when entering Mu4e-View mode." "Hook run when entering Mu4e-View mode."
@ -373,14 +362,12 @@ with no charset."
(define-derived-mode mu4e-view-mode gnus-article-mode "mu4e:view" (define-derived-mode mu4e-view-mode gnus-article-mode "mu4e:view"
"Major mode for viewing an e-mail message in mu4e, based on "Major mode for viewing an e-mail message in mu4e, based on
Gnus' article-mode." Gnus' article-mode."
;; remove some gnus stuff that does not apply
(define-key mu4e-view-mode-map [menu-bar Treatment] nil)
(define-key mu4e-view-mode-map [menu-bar Article] nil)
(define-key mu4e-view-mode-map [menu-bar post] nil)
(define-key mu4e-view-mode-map [menu-bar commands] nil)
;; Restore C-h b default behavior ;; Restore C-h b default behavior
(define-key mu4e-view-mode-map (kbd "C-h b") 'describe-bindings) (define-key mu4e-view-mode-map (kbd "C-h b") 'describe-bindings)
(setq mu4e~view-buffer-name gnus-article-buffer) (setq mu4e~view-buffer-name gnus-article-buffer)
;; ;; turn off gnus modeline changes and menu items
(when (fboundp 'gnus-set-mode-line)
(advice-add 'gnus-set-mode-line :around #'mu4e~view-nop))
(mu4e~view-mode-body)) (mu4e~view-mode-body))
(defun mu4e-view-message-text (msg) (defun mu4e-view-message-text (msg)
@ -444,7 +431,10 @@ attachments is done with `completing-read-multiple', in this case use
do (mm-save-part-to-file h (expand-file-name f dir)))) do (mm-save-part-to-file h (expand-file-name f dir))))
(message "No attached files found")))) (message "No attached files found"))))
;;; Various commands ;;; Actions
;;; ;;;
(provide 'mu4e-view-gnus) (provide 'mu4e-view-gnus)