mirror of https://github.com/djcb/mu.git
mu4e: handle marks outside headers-view
Ensure we the marks get counted correctly outside the headers view. This avoids mu4e trying to refresh the headers buffer when we're reading a message.
This commit is contained in:
parent
7d895dbd69
commit
c115d75a50
|
@ -105,16 +105,16 @@ where
|
||||||
(defmacro mu4e~mark-in-context (&rest body)
|
(defmacro mu4e~mark-in-context (&rest body)
|
||||||
"Evaluate BODY in the context of the headers buffer in case this
|
"Evaluate BODY in the context of the headers buffer in case this
|
||||||
is either a headers or view buffer."
|
is either a headers or view buffer."
|
||||||
`(cond
|
`(cond
|
||||||
((eq major-mode 'mu4e-headers-mode) ,@body)
|
((eq major-mode 'mu4e-headers-mode) ,@body)
|
||||||
((eq major-mode 'mu4e-view-mode)
|
((eq major-mode 'mu4e-view-mode)
|
||||||
(when (buffer-live-p mu4e~view-headers-buffer)
|
(when (buffer-live-p mu4e~view-headers-buffer)
|
||||||
(let* ((msg (mu4e-message-at-point))
|
(let* ((msg (mu4e-message-at-point))
|
||||||
(docid (mu4e-message-field msg :docid)))
|
(docid (mu4e-message-field msg :docid)))
|
||||||
(with-current-buffer mu4e~view-headers-buffer
|
(with-current-buffer mu4e~view-headers-buffer
|
||||||
(if (mu4e~headers-goto-docid docid)
|
(if (mu4e~headers-goto-docid docid)
|
||||||
,@body
|
,@body
|
||||||
(mu4e-error "cannot find message in headers buffer."))))))
|
(mu4e-error "cannot find message in headers buffer."))))))
|
||||||
(t
|
(t
|
||||||
;; even in other modes (e.g. mu4e-main-mode we try to find
|
;; even in other modes (e.g. mu4e-main-mode we try to find
|
||||||
;; the headers buffer
|
;; the headers buffer
|
||||||
|
@ -188,7 +188,7 @@ is either a headers or view buffer."
|
||||||
:char ("*" . "✱")
|
:char ("*" . "✱")
|
||||||
:prompt "*something"
|
:prompt "*something"
|
||||||
:action (mu4e-error "No action for deferred mark")))
|
:action (mu4e-error "No action for deferred mark")))
|
||||||
|
|
||||||
"The list of all the possible marks.
|
"The list of all the possible marks.
|
||||||
This is an alist mapping mark symbols to their properties. The
|
This is an alist mapping mark symbols to their properties. The
|
||||||
properties are:
|
properties are:
|
||||||
|
@ -253,7 +253,7 @@ The following marks are available, and the corresponding props:
|
||||||
(show-fct (plist-get markdesc :show-target))
|
(show-fct (plist-get markdesc :show-target))
|
||||||
(shown-target (if show-fct
|
(shown-target (if show-fct
|
||||||
(funcall show-fct target)
|
(funcall show-fct target)
|
||||||
(if target (format "%S" target)))))
|
(if target (format "%S" target)))))
|
||||||
(unless docid (mu4e-warn "No message on this line"))
|
(unless docid (mu4e-warn "No message on this line"))
|
||||||
(unless (eq major-mode 'mu4e-headers-mode) (mu4e-error "Not in headers-mode"))
|
(unless (eq major-mode 'mu4e-headers-mode) (mu4e-error "Not in headers-mode"))
|
||||||
(save-excursion
|
(save-excursion
|
||||||
|
@ -391,28 +391,28 @@ If NO-CONFIRMATION is non-nil, don't ask user for confirmation."
|
||||||
(mu4e~mark-in-context
|
(mu4e~mark-in-context
|
||||||
(let ((marknum (hash-table-count mu4e~mark-map)))
|
(let ((marknum (hash-table-count mu4e~mark-map)))
|
||||||
(if (zerop marknum)
|
(if (zerop marknum)
|
||||||
(message "Nothing is marked")
|
(message "Nothing is marked")
|
||||||
(mu4e-mark-resolve-deferred-marks)
|
(mu4e-mark-resolve-deferred-marks)
|
||||||
(when (or no-confirmation
|
(when (or no-confirmation
|
||||||
(y-or-n-p
|
(y-or-n-p
|
||||||
(format "Are you sure you want to execute %d mark%s?"
|
(format "Are you sure you want to execute %d mark%s?"
|
||||||
marknum (if (> marknum 1) "s" ""))))
|
marknum (if (> marknum 1) "s" ""))))
|
||||||
(maphash
|
(maphash
|
||||||
(lambda (docid val)
|
(lambda (docid val)
|
||||||
(let* ((mark (car val)) (target (cdr val))
|
(let* ((mark (car val)) (target (cdr val))
|
||||||
(markdescr (assq mark mu4e-marks))
|
(markdescr (assq mark mu4e-marks))
|
||||||
(msg (save-excursion
|
(msg (save-excursion
|
||||||
(mu4e~headers-goto-docid docid)
|
(mu4e~headers-goto-docid docid)
|
||||||
(mu4e-message-at-point))))
|
(mu4e-message-at-point))))
|
||||||
;; note: whenever you do something with the message,
|
;; note: whenever you do something with the message,
|
||||||
;; it looses its N (new) flag
|
;; it looses its N (new) flag
|
||||||
(if markdescr
|
(if markdescr
|
||||||
(progn
|
(progn
|
||||||
(run-hook-with-args
|
(run-hook-with-args
|
||||||
'mu4e-mark-execute-pre-hook mark msg)
|
'mu4e-mark-execute-pre-hook mark msg)
|
||||||
(funcall (plist-get (cdr markdescr) :action) docid msg target))
|
(funcall (plist-get (cdr markdescr) :action) docid msg target))
|
||||||
(mu4e-error "Unrecognized mark %S" mark))))
|
(mu4e-error "Unrecognized mark %S" mark))))
|
||||||
mu4e~mark-map))
|
mu4e~mark-map))
|
||||||
(mu4e-mark-unmark-all)
|
(mu4e-mark-unmark-all)
|
||||||
(message nil)))))
|
(message nil)))))
|
||||||
|
|
||||||
|
@ -438,8 +438,8 @@ If NO-CONFIRMATION is non-nil, don't ask user for confirmation."
|
||||||
|
|
||||||
(defun mu4e-mark-marks-num ()
|
(defun mu4e-mark-marks-num ()
|
||||||
"Return the number of marks in the current buffer."
|
"Return the number of marks in the current buffer."
|
||||||
(if mu4e~mark-map (hash-table-count mu4e~mark-map) 0))
|
(mu4e~mark-in-context
|
||||||
|
(if mu4e~mark-map (hash-table-count mu4e~mark-map) 0)))
|
||||||
|
|
||||||
(defun mu4e-mark-handle-when-leaving ()
|
(defun mu4e-mark-handle-when-leaving ()
|
||||||
"If there are any marks in the current buffer, handle those
|
"If there are any marks in the current buffer, handle those
|
||||||
|
@ -447,7 +447,7 @@ according to the value of `mu4e-headers-leave-behavior'. This
|
||||||
function is to be called before any further action (like searching,
|
function is to be called before any further action (like searching,
|
||||||
quitting the buffer) is taken; returning t means 'take the following
|
quitting the buffer) is taken; returning t means 'take the following
|
||||||
action', return nil means 'don't do anything'."
|
action', return nil means 'don't do anything'."
|
||||||
(mu4e~mark-in-context
|
(mu4e~mark-in-context
|
||||||
(let ((marknum (mu4e-mark-marks-num))
|
(let ((marknum (mu4e-mark-marks-num))
|
||||||
(what mu4e-headers-leave-behavior))
|
(what mu4e-headers-leave-behavior))
|
||||||
(unless (zerop marknum) ;; nothing to do?
|
(unless (zerop marknum) ;; nothing to do?
|
||||||
|
|
Loading…
Reference in New Issue