diff --git a/mu4e/mu4e-compose.el b/mu4e/mu4e-compose.el index 260cb200..2e91aff9 100644 --- a/mu4e/mu4e-compose.el +++ b/mu4e/mu4e-compose.el @@ -923,6 +923,16 @@ is supplied, or Transient Mark mode is enabled and the mark is active." (define-key mu4e-compose-mode-map (vector 'remap 'end-of-buffer) 'mu4e-compose-goto-bottom) +(defvar mu4e--compose-menu-items + '("--" + ["Compose new" mu4e-compose-new + :help "Compose new message"] + ["Reply" mu4e-compose-reply + :help "Reply to message"] + ["Forward" mu4e-compose-forward + :help "Forward message"]) + "Easy menu items for search.") + ;;; _ (provide 'mu4e-compose) ;;; mu4e-compose.el ends here diff --git a/mu4e/mu4e-context.el b/mu4e/mu4e-context.el index 042b9220..a6fdb350 100644 --- a/mu4e/mu4e-context.el +++ b/mu4e/mu4e-context.el @@ -224,6 +224,14 @@ as it is." :lighter "" (mu4e--modeline-register #'mu4e--context-modeline-item)) + +(defvar mu4e--context-menu-items + '("--" + ["Switch-context" mu4e-context-switch + :help "Switch the mu4e context"]) + "Easy menu items for mu4e-context.") + + ;;; (provide 'mu4e-context) ;;; mu4e-context.el ends here diff --git a/mu4e/mu4e-headers.el b/mu4e/mu4e-headers.el index b9f6c292..6533d26e 100644 --- a/mu4e/mu4e-headers.el +++ b/mu4e/mu4e-headers.el @@ -896,148 +896,118 @@ after the end of the search results." (mu4e~headers-defun-mark-for unread) (mu4e~headers-defun-mark-for action) +(declare-function mu4e-view-pipe "mu4e-view") + +(defvar mu4e-headers-mode-map + (let ((map (make-sparse-keymap))) + + (define-key map "j" #'mu4e~headers-jump-to-maildir) + + (define-key map "q" #'mu4e~headers-quit-buffer) + (define-key map "g" #'mu4e-search-rerun) ;; for compatibility + + + (define-key map "%" #'mu4e-headers-mark-pattern) + (define-key map "t" #'mu4e-headers-mark-subthread) + (define-key map "T" #'mu4e-headers-mark-thread) + + (define-key map "," #'mu4e-sexp-at-point) + (define-key map ";" #'mu4e-context-switch) + + ;; navigation between messages + (define-key map "p" #'mu4e-headers-prev) + (define-key map "n" #'mu4e-headers-next) + (define-key map (kbd "") #'mu4e-headers-prev) + (define-key map (kbd "") #'mu4e-headers-next) + + (define-key map (kbd "[") #'mu4e-headers-prev-unread) + (define-key map (kbd "]") #'mu4e-headers-next-unread) + + ;; 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) + + ;; switching to view mode (if it's visible) + (define-key map "y" #'mu4e-select-other-view) + + ;; marking/unmarking ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (define-key map (kbd "") #'mu4e-headers-mark-for-trash) + (define-key map (kbd "d") #'mu4e-headers-mark-for-trash) + (define-key map (kbd "") #'mu4e-headers-mark-for-delete) + (define-key map (kbd "") #'mu4e-headers-mark-for-delete) + (define-key map (kbd "D") #'mu4e-headers-mark-for-delete) + (define-key map (kbd "m") #'mu4e-headers-mark-for-move) + (define-key map (kbd "r") #'mu4e-headers-mark-for-refile) + + (define-key map (kbd "?") #'mu4e-headers-mark-for-unread) + (define-key map (kbd "!") #'mu4e-headers-mark-for-read) + (define-key map (kbd "A") #'mu4e-headers-mark-for-action) + + (define-key map (kbd "u") #'mu4e-headers-mark-for-unmark) + (define-key map (kbd "+") #'mu4e-headers-mark-for-flag) + (define-key map (kbd "-") #'mu4e-headers-mark-for-unflag) + (define-key map (kbd "=") #'mu4e-headers-mark-for-untrash) + (define-key map (kbd "&") #'mu4e-headers-mark-custom) + + (define-key map (kbd "*") + #'mu4e-headers-mark-for-something) + (define-key map (kbd "") + #'mu4e-headers-mark-for-something) + (define-key map (kbd "") + #'mu4e-headers-mark-for-something) + (define-key map (kbd "") + #'mu4e-headers-mark-for-something) + + (define-key map (kbd "#") #'mu4e-mark-resolve-deferred-marks) + + (define-key map "U" #'mu4e-mark-unmark-all) + (define-key map "x" #'mu4e-mark-execute-all) + + (define-key map "a" #'mu4e-headers-action) + + ;; message composition + (define-key map "R" #'mu4e-compose-reply) + (define-key map "F" #'mu4e-compose-forward) + (define-key map "C" #'mu4e-compose-new) + (define-key map "E" #'mu4e-compose-edit) + + (define-key map (kbd "RET") #'mu4e-headers-view-message) + (define-key map [mouse-2] #'mu4e-headers-view-message) + + (define-key map "$" #'mu4e-show-log) + (define-key map "H" #'mu4e-display-manual) + + (define-key map "|" #'mu4e-view-pipe) + map) + "Keymap for mu4e's headers mode.") + +(easy-menu-define mu4e-headers-mode-menu + mu4e-headers-mode-map "Menu for mu4e's headers-mode." + (append + '("Headers" ;;:visible mu4e-headers-mode + "--" + ["Previous" mu4e-headers-prev + :help "Move to previous header"] + ["Next" mu4e-headers-prev + :help "Move to next header"] + "--" + ["Mark for move" mu4e-headers-mark-for-move + :help "Mark message for move" + ]) + mu4e--compose-menu-items + mu4e--search-menu-items + mu4e--context-menu-items + '( + "--" + ["Quit" mu4e~headers-quit-buffer + :help "Quit the headers"] + ))) + ;;; Headers-mode and mode-map -(defvar mu4e-headers-mode-map nil - "Keymap for *mu4e-headers* buffers.") -(unless mu4e-headers-mode-map - (setq mu4e-headers-mode-map - (let ((map (make-sparse-keymap))) - - (define-key map "j" #'mu4e~headers-jump-to-maildir) - - (define-key map "q" #'mu4e~headers-quit-buffer) - (define-key map "g" #'mu4e-search-rerun) ;; for compatibility - - (define-key map "%" #'mu4e-headers-mark-pattern) - (define-key map "t" #'mu4e-headers-mark-subthread) - (define-key map "T" #'mu4e-headers-mark-thread) - - (define-key map "," #'mu4e-sexp-at-point) - (define-key map ";" #'mu4e-context-switch) - - ;; navigation between messages - (define-key map "p" 'mu4e-headers-prev) - (define-key map "n" 'mu4e-headers-next) - (define-key map (kbd "") 'mu4e-headers-prev) - (define-key map (kbd "") 'mu4e-headers-next) - - (define-key map (kbd "[") 'mu4e-headers-prev-unread) - (define-key map (kbd "]") 'mu4e-headers-next-unread) - - ;; 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) - - ;; switching to view mode (if it's visible) - (define-key map "y" 'mu4e-select-other-view) - - ;; marking/unmarking ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - (define-key map (kbd "") 'mu4e-headers-mark-for-trash) - (define-key map (kbd "d") 'mu4e-headers-mark-for-trash) - (define-key map (kbd "") 'mu4e-headers-mark-for-delete) - (define-key map (kbd "") 'mu4e-headers-mark-for-delete) - (define-key map (kbd "D") 'mu4e-headers-mark-for-delete) - (define-key map (kbd "m") 'mu4e-headers-mark-for-move) - (define-key map (kbd "r") 'mu4e-headers-mark-for-refile) - - (define-key map (kbd "?") 'mu4e-headers-mark-for-unread) - (define-key map (kbd "!") 'mu4e-headers-mark-for-read) - (define-key map (kbd "A") 'mu4e-headers-mark-for-action) - - (define-key map (kbd "u") 'mu4e-headers-mark-for-unmark) - (define-key map (kbd "+") 'mu4e-headers-mark-for-flag) - (define-key map (kbd "-") 'mu4e-headers-mark-for-unflag) - (define-key map (kbd "=") 'mu4e-headers-mark-for-untrash) - (define-key map (kbd "&") 'mu4e-headers-mark-custom) - - (define-key map (kbd "*") - 'mu4e-headers-mark-for-something) - (define-key map (kbd "") - 'mu4e-headers-mark-for-something) - (define-key map (kbd "") - 'mu4e-headers-mark-for-something) - (define-key map (kbd "") - 'mu4e-headers-mark-for-something) - - (define-key map (kbd "#") 'mu4e-mark-resolve-deferred-marks) - - (define-key map "U" 'mu4e-mark-unmark-all) - (define-key map "x" 'mu4e-mark-execute-all) - - (define-key map "a" 'mu4e-headers-action) - - ;; message composition - (define-key map "R" 'mu4e-compose-reply) - (define-key map "F" 'mu4e-compose-forward) - (define-key map "C" 'mu4e-compose-new) - (define-key map "E" 'mu4e-compose-edit) - - (define-key map (kbd "RET") 'mu4e-headers-view-message) - (define-key map [mouse-2] 'mu4e-headers-view-message) - - (define-key map "$" 'mu4e-show-log) - (define-key map "H" 'mu4e-display-manual) - - (define-key map "|" 'mu4e-view-pipe) - - ;; 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 [mu4e~headers-quit-buffer] - '("Quit view" . mu4e~headers-quit-buffer)) - (define-key menumap [display-help] '("Help" . mu4e-display-manual)) - - (define-key menumap [sepa0] '("--")) - - (define-key menumap "|" '("Pipe through shell" . mu4e-view-pipe)) - (define-key menumap [sepa1] '("--")) - - (define-key menumap [execute-marks] '("Execute marks" - . mu4e-mark-execute-all)) - (define-key menumap [unmark-all] '("Unmark all" . mu4e-mark-unmark-all)) - (define-key menumap [unmark] - '("Unmark" . mu4e-headers-mark-for-unmark)) - - (define-key menumap [mark-pattern] '("Mark pattern" . - mu4e-headers-mark-pattern)) - (define-key menumap [mark-as-read] '("Mark as read" . - mu4e-headers-mark-for-read)) - (define-key menumap [mark-as-unread] - '("Mark as unread" . mu4e-headers-mark-for-unread)) - - (define-key menumap [mark-delete] - '("Mark for deletion" . mu4e-headers-mark-for-delete)) - (define-key menumap [mark-untrash] - '("Mark for untrash" . mu4e-headers-mark-for-untrash)) - (define-key menumap [mark-trash] - '("Mark for trash" . mu4e-headers-mark-for-trash)) - (define-key menumap [mark-move] - '("Mark for move" . mu4e-headers-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 [jump] '("Jump to maildir" . - mu4e~headers-jump-to-maildir)) - (define-key menumap [search] '("Search" . mu4e-headers-search)) - (define-key menumap [sepa4] '("--")) - - (define-key menumap [view] '("View" . mu4e-headers-view-message)) - (define-key menumap [next] '("Next" . mu4e-headers-next)) - (define-key menumap [previous] '("Previous" . mu4e-headers-prev))) - map))) -(fset 'mu4e-headers-mode-map mu4e-headers-mode-map) - (defun mu4e~header-line-format () "Get the format for the header line." (let ((uparrow (if mu4e-use-fancy-chars " ▲" " ^")) @@ -1047,7 +1017,7 @@ after the end of the search results." (+ mu4e--mark-fringe-len (floor (fringe-columns 'left t))) ?\s) (mapcar (lambda (item) - (let* ( ;; with threading enabled, we're necessarily sorting by date. + (let* (;; with threading enabled, we're necessarily sorting by date. (sort-field (if mu4e-search-threads :date mu4e-search-sort-field)) (field (car item)) (width (cdr item)) (info (cdr (assoc field @@ -1065,15 +1035,15 @@ after the end of the search results." (map (make-sparse-keymap))) (when sortable (define-key map [header-line mouse-1] - (lambda (&optional e) - ;; getting the field, inspired by `tabulated-list-col-sort' - (interactive "e") - (let* ((obj (posn-object (event-start e))) - (field - (and obj (get-text-property 0 'field (car obj))))) - ;; "t": if we're already sorted by field, the sort-order is - ;; changed - (mu4e-search-change-sorting field t))))) + (lambda (&optional e) + ;; getting the field, inspired by `tabulated-list-col-sort' + (interactive "e") + (let* ((obj (posn-object (event-start e))) + (field + (and obj (get-text-property 0 'field (car obj))))) + ;; "t": if we're already sorted by field, the sort-order is + ;; changed + (mu4e-search-change-sorting field t))))) (concat (propertize (if width diff --git a/mu4e/mu4e-search.el b/mu4e/mu4e-search.el index 6e7da095..19e1ed0a 100644 --- a/mu4e/mu4e-search.el +++ b/mu4e/mu4e-search.el @@ -515,18 +515,21 @@ the mode-line.") (define-key map "b" #'mu4e-search-bookmark) (define-key map "B" #'mu4e-search-bookmark-edit) - (let ((menumap (make-sparse-keymap))) - (define-key map [menu-bar search] (cons "Mu4e" menumap)) - (define-key menumap [query-next] - '("Next query" . mu4e-search-next)) - (define-key menumap [query-prev] '("Previous query" . - mu4e-search-prev)) - (define-key menumap [narrow-search] '("Narrow search" . - mu4e-search-narrow)) - (define-key menumap [bookmark] '("Search bookmark" . - mu4e-search-bookmark)) - (define-key menumap [refresh] '("Refresh" . mu4e-search-rerun)) - map))) + map)) + +(defvar mu4e--search-menu-items + '("--" + ["Search" mu4e-search + :help "Search using expression"] + ["Search bookmark" mu4e-search-bookmark + :help "Search some bookmark"] + ["Previous query" mu4e-search-prev + :help "Run previous query"] + ["Next query" mu4e-search-next + :help "Run next query"] + ["Narrow search" mu4e-search-narrow + :help "Narrow the search query"]) + "Easy menu items for search.") (provide 'mu4e-search) ;;; mu4e-search.el ends here diff --git a/mu4e/mu4e-view.el b/mu4e/mu4e-view.el index 05ba5441..f4090317 100644 --- a/mu4e/mu4e-view.el +++ b/mu4e/mu4e-view.el @@ -951,57 +951,6 @@ This is useful for advising some Gnus-functionality that does not work in mu4e." (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)) - - (define-key menumap [quit-buffer] - '("Quit view" . mu4e-view-quit)) - (define-key menumap [display-help] '("Help" . mu4e-view-quit)) - - (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 [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 [sepa4] '("--")) - (define-key menumap [next] '("Next" . mu4e-view-headers-next)) - (define-key menumap [previous] '("Previous" . mu4e-view-headers-prev))) - ;; Make 0..9 shortcuts for digit-argument. Actually, none of the bound ;; functions seem to use a prefix arg but those bindings existed because we ;; used to use `suppress-keymap'. And possibly users added their own @@ -1010,10 +959,32 @@ This is useful for advising some Gnus-functionality that does not work in mu4e." (define-key map (kbd (format "%d" i)) #'digit-argument)) (set-keymap-parent map special-mode-map) + (set-keymap-parent map button-buffer-map) map) "Keymap for mu4e-view mode.") -(set-keymap-parent mu4e-view-mode-map button-buffer-map) +(easy-menu-define mu4e-view-mode-menu + mu4e-view-mode-map "Menu for mu4e's view-mode." + (append + '("View" + "--" + ["Toggle wrap lines" visual-line-mode] + ["View raw" mu4e-view-raw-message] + ["Pipe through shell" mu4e-view-pipe] + "--" + ["Mark for deletion" mu4e-view-mark-for-delete] + ["Mark for untrash" mu4e-view-mark-for-untrash] + ["Mark for trash" mu4e-view-mark-for-trash] + ["Mark for move" mu4e-view-mark-for-move] + ) + mu4e--compose-menu-items + mu4e--search-menu-items + mu4e--context-menu-items + '( + "--" + ["Quit" mu4e-view-quit + :help "Quit the view"] + ))) (defcustom mu4e-raw-view-mode-hook nil "Hook run when entering \\[mu4e-raw-view] mode." diff --git a/mu4e/mu4e.texi b/mu4e/mu4e.texi index 4b30a34d..769d981f 100644 --- a/mu4e/mu4e.texi +++ b/mu4e/mu4e.texi @@ -953,7 +953,7 @@ headers-view. @section Keybindings Using the below key bindings, you can do various things with these -messages; these actions are also listed in the @t{Mu4e} menu in the +messages; these actions are also listed in the @t{Headers} menu in the Emacs menu bar. @verbatim @@ -1282,8 +1282,8 @@ to prevent this behavior, set @code{mu4e-view-scroll-to-next} to @node MSGV Keybindings @section Keybindings -You can find most things you can do with this message in the @emph{Mu4e} -menu, or by using the keyboard; the default bindings are: +You can find most things you can do with this message in the @emph{View} menu, +or by using the keyboard; the default bindings are: @verbatim key description