From c3a756a2070ed9be880e1ed17219b0d320094913 Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Wed, 5 Jul 2023 20:27:49 +0300 Subject: [PATCH] mu4e: main: add mu4e-main-quit-or-bury So instead of quitting, you can do C-u q to merely bury the buffer. --- NEWS.org | 4 +- mu4e/mu4e-main.el | 131 ++++++++++++++++++++++++---------------------- 2 files changed, 72 insertions(+), 63 deletions(-) diff --git a/NEWS.org b/NEWS.org index c4c3b9e1..7c8cfd5e 100644 --- a/NEWS.org +++ b/NEWS.org @@ -12,7 +12,7 @@ that should _not_ be included in the contacts-cache (i.e., for ~mu cfind~ and Mu4e address completion). See the ~mu-init~ manpage for details. - It's not unusual for 'noreply`-type e-mail addresses to be the majority in + It's not unusual for 'noreply'-type e-mail addresses to be the majority in an e-mail corpus, so it useful to get rid of those, with '=--ignored-address=/.*noreply*/'= @@ -37,6 +37,8 @@ - also, there are now actions ('a' in view/header) to get to online archives for some (selected) mailing-list archives. + - In the main-view, by default ~q~ is now bound to ~mu4e-main-quit-or-bury~, + which calls either ~mu4e-quit~ or, with prefix argument, ~bury-buffer~. * 1.10 (released on March 26, 2023) diff --git a/mu4e/mu4e-main.el b/mu4e/mu4e-main.el index 33731f5a..8ba9acb1 100644 --- a/mu4e/mu4e-main.el +++ b/mu4e/mu4e-main.el @@ -110,10 +110,17 @@ the personal addresses." (current-time-string baseline-t) "Never")))) +(defun mu4e-main-quit-or-bury (&optional bury) + "Quit mu4e, or, with prefix-argument, bury the buffer." + (interactive "p") + (if bury + (bury-buffer) + (mu4e-quit))) + (defvar mu4e-main-mode-map (let ((map (make-sparse-keymap))) - (define-key map "q" #'mu4e-quit) + (define-key map "q" #'mu4e-main-quit-or-bury) (define-key map "C" #'mu4e-compose-new) (define-key map "m" #'mu4e--main-toggle-mail-sending-mode) @@ -286,70 +293,70 @@ Otherwise, do nothing." (when-let* ((buffer (get-buffer mu4e-main-buffer-name)) (buffer (and (buffer-live-p buffer) buffer))) (with-current-buffer buffer - (let* ((inhibit-read-only t) - (pos (point)) - (addrs (mu4e-personal-addresses)) - (max-length (seq-reduce (lambda (a b) - (max a (length (plist-get b :name)))) - (mu4e-query-items) 0))) - (mu4e-main-mode) - (erase-buffer) - (insert - "* " - (propertize "mu4e" 'face 'mu4e-header-key-face) - (propertize " - mu for emacs version " 'face 'mu4e-title-face) - (propertize mu4e-mu-version 'face 'mu4e-header-key-face) - "\n\n" - (propertize " Basics\n\n" 'face 'mu4e-title-face) - (mu4e--main-action - "\t* [@]jump to some maildir\n" #'mu4e-search-maildir nil "j") - (mu4e--main-action - "\t* enter a [@]search query\n" #'mu4e-search nil "s") - (mu4e--main-action - "\t* [@]Compose a new message\n" #'mu4e-compose-new nil "C") - "\n" - (propertize " Bookmarks\n\n" 'face 'mu4e-title-face) - (mu4e--main-items 'bookmarks max-length) - "\n" - (propertize " Maildirs\n\n" 'face 'mu4e-title-face) - (mu4e--main-items 'maildirs max-length) - "\n" - (propertize " Misc\n\n" 'face 'mu4e-title-face) + (let* ((inhibit-read-only t) + (pos (point)) + (addrs (mu4e-personal-addresses)) + (max-length (seq-reduce (lambda (a b) + (max a (length (plist-get b :name)))) + (mu4e-query-items) 0))) + (mu4e-main-mode) + (erase-buffer) + (insert + "* " + (propertize "mu4e" 'face 'mu4e-header-key-face) + (propertize " - mu for emacs version " 'face 'mu4e-title-face) + (propertize mu4e-mu-version 'face 'mu4e-header-key-face) + "\n\n" + (propertize " Basics\n\n" 'face 'mu4e-title-face) + (mu4e--main-action + "\t* [@]jump to some maildir\n" #'mu4e-search-maildir nil "j") + (mu4e--main-action + "\t* enter a [@]search query\n" #'mu4e-search nil "s") + (mu4e--main-action + "\t* [@]Compose a new message\n" #'mu4e-compose-new nil "C") + "\n" + (propertize " Bookmarks\n\n" 'face 'mu4e-title-face) + (mu4e--main-items 'bookmarks max-length) + "\n" + (propertize " Maildirs\n\n" 'face 'mu4e-title-face) + (mu4e--main-items 'maildirs max-length) + "\n" + (propertize " Misc\n\n" 'face 'mu4e-title-face) - (mu4e--main-action "\t* [@]Switch context\n" - #'mu4e-context-switch nil ";") - (mu4e--main-action "\t* [@]Update email & database\n" - #'mu4e-update-mail-and-index nil "U") - ;; show the queue functions if `smtpmail-queue-dir' is defined - (if (file-directory-p smtpmail-queue-dir) - (mu4e--main-view-queue) - "") - "\n" - (mu4e--main-action "\t* [@]News\n" #'mu4e-news nil "N") - (mu4e--main-action "\t* [@]About mu4e\n" #'mu4e-about nil "A") - (mu4e--main-action "\t* [@]Help\n" #'mu4e-display-manual nil "H") - (mu4e--main-action "\t* [@]quit\n" #'mu4e-quit nil "q") - "\n" - (propertize " Info\n\n" 'face 'mu4e-title-face) - (mu4e--key-val "last updated" - (current-time-string - (plist-get mu4e-index-update-status :tstamp))) - (mu4e--key-val "database-path" (mu4e-database-path)) - (mu4e--key-val "maildir" (mu4e-root-maildir)) - (mu4e--key-val "in store" - (format "%d" (plist-get mu4e--server-props :doccount)) - "messages") - (if mu4e-main-hide-personal-addresses "" - (mu4e--key-val "personal addresses" - (if addrs (mapconcat #'identity addrs ", " ) "none")))) + (mu4e--main-action "\t* [@]Switch context\n" + #'mu4e-context-switch nil ";") + (mu4e--main-action "\t* [@]Update email & database\n" + #'mu4e-update-mail-and-index nil "U") + ;; show the queue functions if `smtpmail-queue-dir' is defined + (if (file-directory-p smtpmail-queue-dir) + (mu4e--main-view-queue) + "") + "\n" + (mu4e--main-action "\t* [@]News\n" #'mu4e-news nil "N") + (mu4e--main-action "\t* [@]About mu4e\n" #'mu4e-about nil "A") + (mu4e--main-action "\t* [@]Help\n" #'mu4e-display-manual nil "H") + (mu4e--main-action "\t* [@]quit\n" #'mu4e-main-quit-or-bury nil "q") + "\n" + (propertize " Info\n\n" 'face 'mu4e-title-face) + (mu4e--key-val "last updated" + (current-time-string + (plist-get mu4e-index-update-status :tstamp))) + (mu4e--key-val "database-path" (mu4e-database-path)) + (mu4e--key-val "maildir" (mu4e-root-maildir)) + (mu4e--key-val "in store" + (format "%d" (plist-get mu4e--server-props :doccount)) + "messages") + (if mu4e-main-hide-personal-addresses "" + (mu4e--key-val "personal addresses" + (if addrs (mapconcat #'identity addrs ", " ) "none")))) - (if mu4e-main-hide-personal-addresses "" - (unless (mu4e-personal-address-p user-mail-address) - (mu4e-message (concat - "Tip: `user-mail-address' ('%s') is not part " - "of mu's addresses; add it with 'mu init + (if mu4e-main-hide-personal-addresses "" + (unless (mu4e-personal-address-p user-mail-address) + (mu4e-message (concat + "Tip: `user-mail-address' ('%s') is not part " + "of mu's addresses; add it with 'mu init --my-address='") user-mail-address))) - (goto-char pos))))) + (goto-char pos))))) (defun mu4e--main-view-queue () "Display queue-related actions in the main view."