mirror of https://github.com/djcb/mu.git
mu4e: avoid some errors when flipping through messages
Use special-mode for the loading buffer, and explicitly ignore n/p. Fixes #1443. Fixes #1217.
This commit is contained in:
parent
3e272ba82f
commit
6b2bdf4f6d
|
@ -1659,23 +1659,6 @@ _not_ refresh the last search with the new setting for threading."
|
||||||
(defvar mu4e~headers-loading-buf nil
|
(defvar mu4e~headers-loading-buf nil
|
||||||
"A buffer for loading a message view.")
|
"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)
|
(defun mu4e~decrypt-p (msg)
|
||||||
"Should we decrypt this message?"
|
"Should we decrypt this message?"
|
||||||
(and (member 'encrypted (mu4e-message-field msg :flags))
|
(and (member 'encrypted (mu4e-message-field msg :flags))
|
||||||
|
@ -1701,7 +1684,13 @@ window. "
|
||||||
(unless (window-live-p viewwin)
|
(unless (window-live-p viewwin)
|
||||||
(mu4e-error "Cannot get a message view"))
|
(mu4e-error "Cannot get a message view"))
|
||||||
(select-window viewwin)
|
(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
|
;; 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.
|
;; the body etc., we only need the path which we already have.
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -1771,6 +1771,33 @@ other windows."
|
||||||
(when (buffer-live-p (mu4e-get-headers-buffer))
|
(when (buffer-live-p (mu4e-get-headers-buffer))
|
||||||
(switch-to-buffer (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)
|
(provide 'mu4e-view)
|
||||||
;;; mu4e-view.el ends here
|
;;; mu4e-view.el ends here
|
||||||
|
|
Loading…
Reference in New Issue