mu4e-loading-mode is now a minor mode

This commit is contained in:
Mickey Petersen 2022-12-03 14:44:18 +00:00
parent 12bad5f810
commit 37e8328975
5 changed files with 33 additions and 32 deletions

View File

@ -1611,6 +1611,9 @@ _not_ refresh the last search with the new setting for threading."
(if (functionp mu4e-view-auto-mark-as-read) (if (functionp mu4e-view-auto-mark-as-read)
(funcall mu4e-view-auto-mark-as-read msg) (funcall mu4e-view-auto-mark-as-read msg)
mu4e-view-auto-mark-as-read))) mu4e-view-auto-mark-as-read)))
(when-let ((buf (mu4e-get-view-buffer nil nil)))
(with-current-buffer buf
(mu4e-loading-mode 1)))
(mu4e--server-view docid mark-as-read))) (mu4e--server-view docid mark-as-read)))
@ -1767,28 +1770,28 @@ other windows."
;;; Loading messages ;;; Loading messages
;; ;;
(defvar mu4e-loading-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "n" #'ignore)
(define-key map "p" #'ignore)
(define-key map "q" #'bury-buffer)
map)
"Keymap for *mu4e-loading* buffers.")
(define-derived-mode mu4e-loading-mode special-mode (define-minor-mode mu4e-loading-mode
"mu4e:loading" "Minor mode for buffers awaiting data from mu"
(use-local-map mu4e-loading-mode-map) :init-value nil :lighter " Loading" :keymap nil
(let ((inhibit-read-only t)) (if mu4e-loading-mode
(erase-buffer) (progn
(insert (propertize "Loading message..." (when mu4e-dim-when-loading
'face 'mu4e-system-face 'intangible t)))) (set (make-variable-buffer-local 'mu4e--loading-overlay-bg)
(let ((overlay (make-overlay (point-min) (point-max))))
(defun mu4e~loading-close () (overlay-put overlay 'face `(:foreground "gray22" :background
"Bury the mu4e Loading... buffer, if any." ,(face-attribute 'default :background)))
(let* ((buf mu4e~headers-loading-buf) (overlay-put overlay 'priority 9998)
(win (and (buffer-live-p buf) (get-buffer-window buf t)))) overlay)))
(when (window-live-p win) (set (make-variable-buffer-local 'mu4e--loading-overlay-text)
(delete-window win)))) (let ((overlay (make-overlay (point-min) (point-min))))
(overlay-put overlay 'priority 9999)
(overlay-put overlay 'before-string (propertize "Loading…\n" 'face 'mu4e-header-title-face))
overlay)))
(when mu4e--loading-overlay-bg
(delete-overlay mu4e--loading-overlay-bg))
(when mu4e--loading-overlay-text
(delete-overlay mu4e--loading-overlay-text))))
(provide 'mu4e-headers) (provide 'mu4e-headers)
;;; mu4e-headers.el ends here ;;; mu4e-headers.el ends here

View File

@ -163,8 +163,6 @@ Create [mu4e]-prefixed error based on format FRM and ARGS. Does a
local-exit and does not return, and raises a local-exit and does not return, and raises a
debuggable (backtrace) error." debuggable (backtrace) error."
(mu4e-log 'error (apply 'mu4e-format frm args)) (mu4e-log 'error (apply 'mu4e-format frm args))
;; opportunistically close the "loading" window.
(mu4e~loading-close)
(error "%s" (apply 'mu4e-format frm args))) (error "%s" (apply 'mu4e-format frm args)))
(defun mu4e-warn (frm &rest args) (defun mu4e-warn (frm &rest args)

View File

@ -56,6 +56,12 @@ Follows the format of `format-time-string'."
:type 'string :type 'string
:group 'mu4e) :group 'mu4e)
(defcustom mu4e-dim-when-loading t
"Dim buffer text when loading new data.
If non-nil, dim some buffers during data retrieval and rendering. Disable this if you"
:type 'boolean
:group 'mu4e)
;;; Faces ;;; Faces

View File

@ -619,7 +619,8 @@ As a side-effect, a message that is being viewed loses its
(insert-file-contents-literally (insert-file-contents-literally
(mu4e-message-readable-path msg) nil nil nil t) (mu4e-message-readable-path msg) nil nil nil t)
(setq-local mu4e~view-message msg) (setq-local mu4e~view-message msg)
(mu4e~view-render-buffer msg))) (mu4e~view-render-buffer msg))
(mu4e-loading-mode 0))
(unless (mu4e--view-detached-p gnus-article-buffer) (unless (mu4e--view-detached-p gnus-article-buffer)
(with-current-buffer mu4e-linked-headers-buffer (with-current-buffer mu4e-linked-headers-buffer
;; We need this here as we want to avoid displaying the buffer until ;; We need this here as we want to avoid displaying the buffer until

View File

@ -24,9 +24,6 @@
;;; Buffer names for internal use ;;; Buffer names for internal use
(defvar mu4e~headers-loading-buf nil
"A buffer for loading a message view.")
(defconst mu4e--sexp-buffer-name "*mu4e-sexp-at-point*" (defconst mu4e--sexp-buffer-name "*mu4e-sexp-at-point*"
"Buffer name for sexp buffers.") "Buffer name for sexp buffers.")
@ -110,7 +107,6 @@ tested."
(and pred (funcall pred buf))))) (and pred (funcall pred buf)))))
(buffer-list))) (buffer-list)))
(defun mu4e--view-detached-p (buffer) (defun mu4e--view-detached-p (buffer)
"Return non-nil if BUFFER is a detached view buffer." "Return non-nil if BUFFER is a detached view buffer."
(with-current-buffer buffer (with-current-buffer buffer
@ -121,7 +117,6 @@ tested."
(defun mu4e--get-current-buffer-type () (defun mu4e--get-current-buffer-type ()
"Return an internal symbol that corresponds to each mu4e major mode." "Return an internal symbol that corresponds to each mu4e major mode."
(cond ((derived-mode-p 'mu4e-view-mode 'mu4e-raw-view-mode) 'view) (cond ((derived-mode-p 'mu4e-view-mode 'mu4e-raw-view-mode) 'view)
((derived-mode-p 'mu4e-loading-mode) 'loading)
((derived-mode-p 'mu4e-headers-mode) 'headers) ((derived-mode-p 'mu4e-headers-mode) 'headers)
((derived-mode-p 'mu4e-compose-mode) 'compose) ((derived-mode-p 'mu4e-compose-mode) 'compose)
((derived-mode-p 'mu4e-main-mode) 'main) ((derived-mode-p 'mu4e-main-mode) 'main)
@ -130,8 +125,7 @@ tested."
(defun mu4e-current-buffer-type-p (type) (defun mu4e-current-buffer-type-p (type)
"Return non-nil if the current buffer is a mu4e buffer of TYPE. "Return non-nil if the current buffer is a mu4e buffer of TYPE.
Where TYPE is `view', `loading', `headers', `compose', Where TYPE is `view', `headers', `compose', `main' or `unknown'.
`main' or `unknown'.
Checks are performed using `derived-mode-p' and the current Checks are performed using `derived-mode-p' and the current
buffer's major mode." buffer's major mode."
@ -226,7 +220,6 @@ for BUFFER-OR-NAME to be displayed in."
('(view . vertical) '((window-min-width . fit-window-to-buffer))) ('(view . vertical) '((window-min-width . fit-window-to-buffer)))
(`(,_ . t) nil))) (`(,_ . t) nil)))
(window-action (cond (window-action (cond
((memq buffer-type '(loader)) '(display-buffer-same-window))
((memq buffer-type '(headers compose)) ((memq buffer-type '(headers compose))
'(display-buffer-reuse-mode-window display-buffer-same-window)) '(display-buffer-reuse-mode-window display-buffer-same-window))
((memq mu4e-split-view '(horizontal vertical)) ((memq mu4e-split-view '(horizontal vertical))