From 6b2bdf4f6dee62f13f1442f9be512888326026ea Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Thu, 27 Feb 2020 23:10:02 +0200 Subject: [PATCH] mu4e: avoid some errors when flipping through messages Use special-mode for the loading buffer, and explicitly ignore n/p. Fixes #1443. Fixes #1217. --- mu4e/mu4e-headers.el | 25 +++++++------------------ mu4e/mu4e-view.el | 29 ++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/mu4e/mu4e-headers.el b/mu4e/mu4e-headers.el index e9e42d08..02a0bd3e 100644 --- a/mu4e/mu4e-headers.el +++ b/mu4e/mu4e-headers.el @@ -1659,23 +1659,6 @@ _not_ refresh the last search with the new setting for threading." (defvar mu4e~headers-loading-buf nil "A buffer for loading a message view.") -(defun mu4e~headers-get-loading-buf () - "Get a buffer to give feedback while loading a message view." - (unless (buffer-live-p mu4e~headers-loading-buf) - (setq mu4e~headers-loading-buf - (get-buffer-create " *mu4e-loading*"))) - (with-current-buffer mu4e~headers-loading-buf - (read-only-mode) - (let ((inhibit-read-only t)) - (erase-buffer) - (local-set-key (kbd "q") - (if (eq mu4e-split-view 'single-window) - 'kill-buffer - 'kill-buffer-and-window)) - (insert (propertize "Waiting for message..." - 'face 'mu4e-system-face 'intangible t)))) - mu4e~headers-loading-buf) - (defun mu4e~decrypt-p (msg) "Should we decrypt this message?" (and (member 'encrypted (mu4e-message-field msg :flags)) @@ -1701,7 +1684,13 @@ window. " (unless (window-live-p viewwin) (mu4e-error "Cannot get a message view")) (select-window viewwin) - (switch-to-buffer (mu4e~headers-get-loading-buf)) + + (unless (buffer-live-p mu4e~headers-loading-buf) + (setq mu4e~headers-loading-buf (get-buffer-create " *mu4e-loading*")) + (with-current-buffer mu4e~headers-loading-buf + (mu4e-loading-mode))) + + (switch-to-buffer mu4e~headers-loading-buf) ;; Note, ideally in the 'gnus' case, we don't need to call the server to get ;; the body etc., we only need the path which we already have. ;; diff --git a/mu4e/mu4e-view.el b/mu4e/mu4e-view.el index 686f2f6d..4fa8cf0f 100644 --- a/mu4e/mu4e-view.el +++ b/mu4e/mu4e-view.el @@ -1771,6 +1771,33 @@ other windows." (when (buffer-live-p (mu4e-get-headers-buffer)) (switch-to-buffer (mu4e-get-headers-buffer)))))))) -;;; _ +;; +;; Loading messages +;; + +(defvar mu4e-loading-mode-map nil "Keymap for *mu4e-loading* buffers.") +(unless mu4e-loading-mode-map + (setq mu4e-loading-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "n" 'ignore) + (define-key map "p" 'ignore) + (define-key map "q" + (lambda()(interactive) + (if (eq mu4e-split-view 'single-window) + 'kill-buffer + 'kill-buffer-and-window))) + map))) +(fset 'mu4e-loading-mode-map mu4e-loading-mode-map) + +(define-derived-mode mu4e-loading-mode special-mode + "mu4e:loading" + (use-local-map mu4e-loading-mode-map) + (make-local-variable 'global-mode-string) + (let ((inhibit-read-only t)) + (erase-buffer) + (insert (propertize "Loading message..." + 'face 'mu4e-system-face 'intangible t)))) + +;;; (provide 'mu4e-view) ;;; mu4e-view.el ends here