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)
(funcall mu4e-view-auto-mark-as-read msg)
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)))
@ -1767,28 +1770,28 @@ other windows."
;;; 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
"mu4e:loading"
(use-local-map mu4e-loading-mode-map)
(let ((inhibit-read-only t))
(erase-buffer)
(insert (propertize "Loading message..."
'face 'mu4e-system-face 'intangible t))))
(defun mu4e~loading-close ()
"Bury the mu4e Loading... buffer, if any."
(let* ((buf mu4e~headers-loading-buf)
(win (and (buffer-live-p buf) (get-buffer-window buf t))))
(when (window-live-p win)
(delete-window win))))
(define-minor-mode mu4e-loading-mode
"Minor mode for buffers awaiting data from mu"
:init-value nil :lighter " Loading" :keymap nil
(if mu4e-loading-mode
(progn
(when mu4e-dim-when-loading
(set (make-variable-buffer-local 'mu4e--loading-overlay-bg)
(let ((overlay (make-overlay (point-min) (point-max))))
(overlay-put overlay 'face `(:foreground "gray22" :background
,(face-attribute 'default :background)))
(overlay-put overlay 'priority 9998)
overlay)))
(set (make-variable-buffer-local 'mu4e--loading-overlay-text)
(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)
;;; 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
debuggable (backtrace) error."
(mu4e-log 'error (apply 'mu4e-format frm args))
;; opportunistically close the "loading" window.
(mu4e~loading-close)
(error "%s" (apply 'mu4e-format frm args)))
(defun mu4e-warn (frm &rest args)

View File

@ -56,6 +56,12 @@ Follows the format of `format-time-string'."
:type 'string
: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

View File

@ -619,7 +619,8 @@ As a side-effect, a message that is being viewed loses its
(insert-file-contents-literally
(mu4e-message-readable-path msg) nil nil nil t)
(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)
(with-current-buffer mu4e-linked-headers-buffer
;; We need this here as we want to avoid displaying the buffer until

View File

@ -24,9 +24,6 @@
;;; 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*"
"Buffer name for sexp buffers.")
@ -110,7 +107,6 @@ tested."
(and pred (funcall pred buf)))))
(buffer-list)))
(defun mu4e--view-detached-p (buffer)
"Return non-nil if BUFFER is a detached view buffer."
(with-current-buffer buffer
@ -121,7 +117,6 @@ tested."
(defun mu4e--get-current-buffer-type ()
"Return an internal symbol that corresponds to each mu4e major mode."
(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-compose-mode) 'compose)
((derived-mode-p 'mu4e-main-mode) 'main)
@ -130,8 +125,7 @@ tested."
(defun mu4e-current-buffer-type-p (type)
"Return non-nil if the current buffer is a mu4e buffer of TYPE.
Where TYPE is `view', `loading', `headers', `compose',
`main' or `unknown'.
Where TYPE is `view', `headers', `compose', `main' or `unknown'.
Checks are performed using `derived-mode-p' and the current
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)))
(`(,_ . t) nil)))
(window-action (cond
((memq buffer-type '(loader)) '(display-buffer-same-window))
((memq buffer-type '(headers compose))
'(display-buffer-reuse-mode-window display-buffer-same-window))
((memq mu4e-split-view '(horizontal vertical))