diff --git a/mu4e/mu4e-view-gnus.el b/mu4e/mu4e-view-gnus.el index 11592b5d..c1b9272e 100644 --- a/mu4e/mu4e-view-gnus.el +++ b/mu4e/mu4e-view-gnus.el @@ -161,195 +161,184 @@ with no charset." (list handle attendee)) handle-attendee)) -(defvar mu4e-view-mode-map nil - "Keymap for \"*mu4e-view*\" buffers.") -(unless mu4e-view-mode-map - (setq mu4e-view-mode-map - (let ((map (make-sparse-keymap))) +;; We must neuter gnus-set-mode-line +(defun mu4e~view-nop (func &rest args) + "Do nothing." + ;;(message "NOP %S %S %S %S" mu4e~view-mode major-mode func args) + (unless (derived-mode-p '(mu4e-view-mode)) + (apply func args))) - (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) +(defvar mu4e-view-mode-map + (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' - ;; but that's not very useful in this case - (define-key map "z" 'ignore) + ;; but that's not very useful in this case + (define-key map "z" 'ignore) - (define-key map "s" 'mu4e-headers-search) - (define-key map "S" 'mu4e-view-search-edit) - (define-key map "/" 'mu4e-view-search-narrow) + (define-key map "s" 'mu4e-headers-search) + (define-key map "S" 'mu4e-view-search-edit) + (define-key map "/" 'mu4e-view-search-narrow) - (define-key map (kbd "") 'mu4e-headers-query-prev) - (define-key map (kbd "") 'mu4e-headers-query-next) + (define-key map (kbd "") 'mu4e-headers-query-prev) + (define-key map (kbd "") 'mu4e-headers-query-next) - (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) + (define-key map "B" 'mu4e-headers-search-bookmark-edit) - (define-key map "%" 'mu4e-view-mark-pattern) - (define-key map "t" 'mu4e-view-mark-subthread) - (define-key map "T" 'mu4e-view-mark-thread) - (define-key map "j" 'mu4e~headers-jump-to-maildir) + (define-key map "%" 'mu4e-view-mark-pattern) + (define-key map "t" 'mu4e-view-mark-subthread) + (define-key map "T" 'mu4e-view-mark-thread) + (define-key map "j" 'mu4e~headers-jump-to-maildir) - (define-key map "g" 'mu4e-view-go-to-url) - (define-key map "k" 'mu4e-view-save-url) - (define-key map "f" 'mu4e-view-fetch-url) + (define-key map "g" 'mu4e-view-go-to-url) + (define-key map "k" 'mu4e-view-save-url) + (define-key map "f" 'mu4e-view-fetch-url) - (define-key map "F" 'mu4e-compose-forward) - (define-key map "R" 'mu4e-compose-reply) - (define-key map "C" 'mu4e-compose-new) - (define-key map "E" 'mu4e-compose-edit) + (define-key map "F" 'mu4e-compose-forward) + (define-key map "R" 'mu4e-compose-reply) + (define-key map "C" 'mu4e-compose-new) + (define-key map "E" 'mu4e-compose-edit) - ;; some gnus things we do not support - (define-key map "G" 'ignore) - (define-key map "I" 'ignore) - (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-view-pipe) + (define-key map "a" 'mu4e-view-action) - (define-key map "." 'mu4e-view-raw-message) - (define-key map "|" 'mu4e-view-pipe) - (define-key map "a" 'mu4e-view-action) - - (define-key map ";" 'mu4e-context-switch) + (define-key map ";" 'mu4e-context-switch) ;; toggle header settings - (define-key map "O" 'mu4e-headers-change-sorting) - (define-key map "P" 'mu4e-headers-toggle-threading) - (define-key map "Q" 'mu4e-headers-toggle-full-search) - (define-key map "W" 'mu4e-headers-toggle-include-related) + (define-key map "O" 'mu4e-headers-change-sorting) + (define-key map "P" 'mu4e-headers-toggle-threading) + (define-key map "Q" 'mu4e-headers-toggle-full-search) + (define-key map "W" 'mu4e-headers-toggle-include-related) - ;; change the number of headers - (define-key map (kbd "C-+") 'mu4e-headers-split-view-grow) - (define-key map (kbd "C--") 'mu4e-headers-split-view-shrink) - (define-key map (kbd "") 'mu4e-headers-split-view-grow) - (define-key map (kbd "") 'mu4e-headers-split-view-shrink) + ;; change the number of headers + (define-key map (kbd "C-+") 'mu4e-headers-split-view-grow) + (define-key map (kbd "C--") 'mu4e-headers-split-view-shrink) + (define-key map (kbd "") 'mu4e-headers-split-view-grow) + (define-key map (kbd "") 'mu4e-headers-split-view-shrink) - ;; intra-message navigation - (define-key map (kbd "SPC") 'mu4e-view-scroll-up-or-next) - (define-key map (kbd "") 'beginning-of-buffer) - (define-key map (kbd "") 'end-of-buffer) - (define-key map (kbd "RET") - (lambda() - (interactive) - (if (eq (get-text-property (point) 'gnus-callback) 'gnus-button-push) - (widget-button-press (point)) - (mu4e-scroll-up)))) - (define-key map (kbd "") 'mu4e-scroll-down) + ;; intra-message navigation + (define-key map (kbd "SPC") 'mu4e-view-scroll-up-or-next) + (define-key map (kbd "") 'beginning-of-buffer) + (define-key map (kbd "") 'end-of-buffer) + (define-key map (kbd "RET") + (lambda() + (interactive) + (if (eq (get-text-property (point) 'gnus-callback) 'gnus-button-push) + (widget-button-press (point)) + (mu4e-scroll-up)))) + (define-key map (kbd "") 'mu4e-scroll-down) - ;; navigation between messages - (define-key map "p" 'mu4e-view-headers-prev) - (define-key map "n" 'mu4e-view-headers-next) - ;; the same - (define-key map (kbd "") 'mu4e-view-headers-next) - (define-key map (kbd "") 'mu4e-view-headers-prev) + ;; navigation between messages + (define-key map "p" 'mu4e-view-headers-prev) + (define-key map "n" 'mu4e-view-headers-next) + ;; the same + (define-key map (kbd "") 'mu4e-view-headers-next) + (define-key map (kbd "") 'mu4e-view-headers-prev) - (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-prev-unread) + (define-key map (kbd "]") 'mu4e-view-headers-next-unread) - ;; switching to view mode (if it's visible) - (define-key map "y" 'mu4e-select-other-view) + ;; switching to view mode (if it's visible) + (define-key map "y" 'mu4e-select-other-view) - ;; attachments - (define-key map "e" 'mu4e-view-save-attachment) - (define-key map "o" 'ignore) - (define-key map "A" 'ignore) + ;; attachments + (define-key map "e" 'mu4e-view-save-attachment) - ;; marking/unmarking - (define-key map "d" 'mu4e-view-mark-for-trash) - (define-key map (kbd "") 'mu4e-view-mark-for-delete) - (define-key map (kbd "") '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 "r") 'mu4e-view-mark-for-refile) + ;; marking/unmarking + (define-key map "d" 'mu4e-view-mark-for-trash) + (define-key map (kbd "") 'mu4e-view-mark-for-delete) + (define-key map (kbd "") '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 "r") 'mu4e-view-mark-for-refile) - (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-unread) + (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-unflag) - (define-key map (kbd "=") 'mu4e-view-mark-for-untrash) - (define-key map (kbd "&") 'mu4e-view-mark-custom) + (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-untrash) + (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 "") 'mu4e-view-mark-for-something) - (define-key map (kbd "") 'mu4e-view-mark-for-something) + (define-key map (kbd "*") 'mu4e-view-mark-for-something) + (define-key map (kbd "") 'mu4e-view-mark-for-something) + (define-key map (kbd "") 'mu4e-view-mark-for-something) + (define-key map (kbd "") 'mu4e-view-mark-for-something) - (define-key map (kbd "#") 'mu4e-mark-resolve-deferred-marks) + (define-key map (kbd "#") 'mu4e-mark-resolve-deferred-marks) - ;; misc - (define-key map "w" 'visual-line-mode) - (define-key map "#" 'ignore) - (define-key map "h" 'ignore) - (define-key map (kbd "M-q") 'article-fill-long-lines) + ;; misc + (define-key map "w" 'visual-line-mode) + (define-key map (kbd "M-q") 'article-fill-long-lines) - ;; 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-all) - (define-key map "x" 'mu4e-view-marked-execute) + ;; 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-all) + (define-key map "x" 'mu4e-view-marked-execute) - (define-key map "$" 'mu4e-show-log) - (define-key map "H" 'mu4e-display-manual) + (define-key map "$" 'mu4e-show-log) + (define-key map "H" 'mu4e-display-manual) - ;; menu - ;;(define-key map [menu-bar] (make-sparse-keymap)) - (let ((menumap (make-sparse-keymap))) - (define-key map [menu-bar headers] (cons "Mu4e" menumap)) + ;; menu + ;;(define-key map [menu-bar] (make-sparse-keymap)) + (let ((menumap (make-sparse-keymap))) + (define-key map [menu-bar headers] (cons "Mu4e" menumap)) - (define-key menumap [quit-buffer] - '("Quit view" . mu4e~view-quit-buffer)) - (define-key menumap [display-help] '("Help" . mu4e-display-manual)) + (define-key menumap [quit-buffer] + '("Quit view" . mu4e~view-quit-buffer)) + (define-key menumap [display-help] '("Help" . mu4e-display-manual)) - (define-key menumap [sepa0] '("--")) - (define-key menumap [wrap-lines] - '("Toggle wrap lines" . visual-line-mode)) - (define-key menumap [raw-view] - '("View raw message" . mu4e-view-raw-message)) - (define-key menumap [pipe] - '("Pipe through shell" . mu4e-view-pipe)) + (define-key menumap [sepa0] '("--")) + (define-key menumap [wrap-lines] + '("Toggle wrap lines" . visual-line-mode)) + (define-key menumap [raw-view] + '("View raw message" . mu4e-view-raw-message)) + (define-key menumap [pipe] + '("Pipe through shell" . mu4e-view-pipe)) - (define-key menumap [sepa1] '("--")) - (define-key menumap [mark-delete] - '("Mark for deletion" . mu4e-view-mark-for-delete)) - (define-key menumap [mark-untrash] - '("Mark for untrash" . mu4e-view-mark-for-untrash)) - (define-key menumap [mark-trash] - '("Mark for trash" . mu4e-view-mark-for-trash)) - (define-key menumap [mark-move] - '("Mark for move" . mu4e-view-mark-for-move)) + (define-key menumap [sepa1] '("--")) + (define-key menumap [mark-delete] + '("Mark for deletion" . mu4e-view-mark-for-delete)) + (define-key menumap [mark-untrash] + '("Mark for untrash" . mu4e-view-mark-for-untrash)) + (define-key menumap [mark-trash] + '("Mark for trash" . mu4e-view-mark-for-trash)) + (define-key menumap [mark-move] + '("Mark for move" . mu4e-view-mark-for-move)) - (define-key menumap [sepa2] '("--")) - (define-key menumap [resend] '("Resend" . mu4e-compose-resend)) - (define-key menumap [forward] '("Forward" . mu4e-compose-forward)) - (define-key menumap [reply] '("Reply" . mu4e-compose-reply)) - (define-key menumap [compose-new] '("Compose new" . mu4e-compose-new)) - (define-key menumap [sepa3] '("--")) + (define-key menumap [sepa2] '("--")) + (define-key menumap [resend] '("Resend" . mu4e-compose-resend)) + (define-key menumap [forward] '("Forward" . mu4e-compose-forward)) + (define-key menumap [reply] '("Reply" . mu4e-compose-reply)) + (define-key menumap [compose-new] '("Compose new" . mu4e-compose-new)) + (define-key menumap [sepa3] '("--")) - (define-key menumap [query-next] - '("Next query" . mu4e-headers-query-next)) - (define-key menumap [query-prev] - '("Previous query" . mu4e-headers-query-prev)) - (define-key menumap [narrow-search] - '("Narrow search" . mu4e-headers-search-narrow)) - (define-key menumap [bookmark] - '("Search bookmark" . mu4e-headers-search-bookmark)) - (define-key menumap [jump] - '("Jump to maildir" . mu4e~headers-jump-to-maildir)) - (define-key menumap [search] - '("Search" . mu4e-headers-search)) + (define-key menumap [query-next] + '("Next query" . mu4e-headers-query-next)) + (define-key menumap [query-prev] + '("Previous query" . mu4e-headers-query-prev)) + (define-key menumap [narrow-search] + '("Narrow search" . mu4e-headers-search-narrow)) + (define-key menumap [bookmark] + '("Search bookmark" . mu4e-headers-search-bookmark)) + (define-key menumap [jump] + '("Jump to maildir" . mu4e~headers-jump-to-maildir)) + (define-key menumap [search] + '("Search" . mu4e-headers-search)) - (define-key menumap [sepa4] '("--")) - (define-key menumap [next] '("Next" . mu4e-view-headers-next)) - (define-key menumap [previous] '("Previous" . mu4e-view-headers-prev))) - map)) + (define-key menumap [sepa4] '("--")) + (define-key menumap [next] '("Next" . mu4e-view-headers-next)) + (define-key menumap [previous] '("Previous" . mu4e-view-headers-prev))) - (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 "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" "Major mode for viewing an e-mail message in mu4e, based on 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 (define-key mu4e-view-mode-map (kbd "C-h b") 'describe-bindings) (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)) (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)))) (message "No attached files found")))) -;;; Various commands +;;; Actions + + + ;;; (provide 'mu4e-view-gnus)