* mu4e: dynamic folder updates

This commit is contained in:
djcb
2012-09-27 21:53:21 +03:00
parent af5ad981a2
commit 5779820ba0
4 changed files with 63 additions and 87 deletions

View File

@ -390,9 +390,9 @@ after the end of the search results."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmacro mu4e~headers-defun-mark-func (mark) (defmacro mu4e~headers-defun-mark-for (mark)
"Define a function mu4e~headers-mark-MARK." "Define a function mu4e~headers-mark-MARK."
(let ((funcname (intern (concat "mu4e~headers-mark-" (symbol-name mark)))) (let ((funcname (intern (concat "mu4e-headers-mark-for-" (symbol-name mark))))
(docstring (concat "Mark header at point with " (symbol-name mark) "."))) (docstring (concat "Mark header at point with " (symbol-name mark) ".")))
`(defun ,funcname () ,docstring `(defun ,funcname () ,docstring
(interactive) (interactive)
@ -401,16 +401,16 @@ after the end of the search results."
;; define our mark functions; there must be some way to do this in a loop but ;; define our mark functions; there must be some way to do this in a loop but
;; since `mu4e~headers-defun-mark-func' is a macro, the argument must be a ;; since `mu4e~headers-defun-mark-func' is a macro, the argument must be a
;; literal value. ;; literal value.
(mu4e~headers-defun-mark-func refile) (mu4e~headers-defun-mark-for refile)
(mu4e~headers-defun-mark-func deferred) (mu4e~headers-defun-mark-for deferred)
(mu4e~headers-defun-mark-func delete) (mu4e~headers-defun-mark-for delete)
(mu4e~headers-defun-mark-func flag) (mu4e~headers-defun-mark-for flag)
(mu4e~headers-defun-mark-func move) (mu4e~headers-defun-mark-for move)
(mu4e~headers-defun-mark-func read) (mu4e~headers-defun-mark-for read)
(mu4e~headers-defun-mark-func trash) (mu4e~headers-defun-mark-for trash)
(mu4e~headers-defun-mark-func unflag) (mu4e~headers-defun-mark-for unflag)
(mu4e~headers-defun-mark-func unmark) (mu4e~headers-defun-mark-for unmark)
(mu4e~headers-defun-mark-func unread) (mu4e~headers-defun-mark-for unread)
;;; headers-mode and mode-map ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; headers-mode and mode-map ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -468,25 +468,24 @@ after the end of the search results."
(define-key map "y" 'mu4e-select-other-view) (define-key map "y" 'mu4e-select-other-view)
;; marking/unmarking ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; marking/unmarking ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-key map (kbd "<backspace>") 'mu4e~headers-mark-trash) (define-key map (kbd "<backspace>") 'mu4e-headers-mark-for-trash)
(define-key map (kbd "d") 'mu4e~headers-mark-trash) (define-key map (kbd "d") 'mu4e-headers-mark-for-trash)
(define-key map (kbd "<delete>") 'mu4e~headers-mark-delete) (define-key map (kbd "<delete>") 'mu4e-headers-mark-for-delete)
(define-key map (kbd "<deletechar>") 'mu4e~headers-mark-delete) (define-key map (kbd "<deletechar>") 'mu4e-headers-mark-for-delete)
(define-key map (kbd "D") 'mu4e~headers-mark-delete) (define-key map (kbd "D") 'mu4e-headers-mark-for-delete)
(define-key map (kbd "m") 'mu4e~headers-mark-move) (define-key map (kbd "m") 'mu4e-headers-mark-for-move)
(define-key map (kbd "r") 'mu4e~headers-mark-refile) (define-key map (kbd "r") 'mu4e-headers-mark-for-refile)
(define-key map (kbd "o") 'mu4e-headers-mark-for-unread)
(define-key map (kbd "s") 'mu4e-headers-mark-for-read)
(define-key map (kbd "u") 'mu4e-headers-mark-for-unmark)
(define-key map (kbd "+") 'mu4e-headers-mark-for-flag)
(define-key map (kbd "-") 'mu4e-headers-mark-for-unflag)
(define-key map (kbd "&") 'mu4e-headers-mark-for-custom)
(define-key map (kbd "o") 'mu4e~headers-mark-unread) (define-key map (kbd "*") 'mu4e-headers-mark-for-deferred)
(define-key map (kbd "s") 'mu4e~headers-mark-read) (define-key map (kbd "<kp-multiply>") 'mu4e-headers-mark-for-deferred)
(define-key map (kbd "u") 'mu4e~headers-mark-unmark)
(define-key map (kbd "+") 'mu4e~headers-mark-flag)
(define-key map (kbd "-") 'mu4e~headers-mark-unflag)
(define-key map (kbd "&") 'mu4e-headers-mark-custom)
(define-key map (kbd "*") 'mu4e~headers-mark-deferred)
(define-key map (kbd "<kp-multiply>") 'mu4e~headers-mark-deferred)
(define-key map (kbd "#") 'mu4e-mark-resolve-deferred-marks) (define-key map (kbd "#") 'mu4e-mark-resolve-deferred-marks)
(define-key map "U" 'mu4e-mark-unmark-all) (define-key map "U" 'mu4e-mark-unmark-all)

View File

@ -172,10 +172,11 @@ provided, function asks for it."
"Mark the header at point, or, if region is active, mark all "Mark the header at point, or, if region is active, mark all
headers in the region. Optionally, provide TARGET (for moves)." headers in the region. Optionally, provide TARGET (for moves)."
(let ((target ;; ask or check the target if it's a move (let ((target ;; ask or check the target if it's a move
(case mark (or target
('refile (mu4e-get-refile-folder (mu4e-message-at-point))) (case mark
('move (mu4e~mark-get-move-target target)) (refile (mu4e-get-refile-folder (mu4e-message-at-point)))
('trash (mu4e-get-trash-folder (mu4e-message-at-point))) ))) (move (mu4e~mark-get-move-target target))
(trash (mu4e-get-trash-folder (mu4e-message-at-point))) ))))
(if (not (use-region-p)) (if (not (use-region-p))
;; single message ;; single message
(mu4e-mark-at-point mark target) (mu4e-mark-at-point mark target)
@ -186,7 +187,7 @@ headers in the region. Optionally, provide TARGET (for moves)."
(while (<= (line-beginning-position) e) (while (<= (line-beginning-position) e)
(setq target ;; refile/trash targets are determined per-message (setq target ;; refile/trash targets are determined per-message
(case mark (case mark
(refile (mu4e-get-refile-folder (mu4e-message-at-point))) (refile (mu4e-get-refile-folder (mu4e-message-at-point)))
(trash (mu4e-get-trash-folder (mu4e-message-at-point))) (trash (mu4e-get-trash-folder (mu4e-message-at-point)))
(t target))) (t target)))
(mu4e-mark-at-point mark target) (mu4e-mark-at-point mark target)

View File

@ -521,7 +521,10 @@ This is used by the completion function in mu4e-compose."
(and mu4e-compose-complete-ignore-address-regexp (and mu4e-compose-complete-ignore-address-regexp
(string-match mu4e-compose-complete-ignore-address-regexp mail)) (string-match mu4e-compose-complete-ignore-address-regexp mail))
(add-to-list 'lst (add-to-list 'lst
(if name (format "\"%s\" <%s>" name mail) mail)))))) (if name (format "\"%s\" <%s>"
;; hack so we don't get ',' in e-mail addresses...
(replace-regexp-in-string "," "" name)
mail) mail))))))
(setq mu4e~contacts-for-completion lst) (setq mu4e~contacts-for-completion lst)
(mu4e-message "Contacts received: %d" (mu4e-message "Contacts received: %d"
(length mu4e~contacts-for-completion)))) (length mu4e~contacts-for-completion))))

View File

@ -546,7 +546,7 @@ at POINT, or if nil, at (point)."
(define-key map (kbd "D") 'mu4e-view-mark-for-delete) (define-key map (kbd "D") 'mu4e-view-mark-for-delete)
(define-key map (kbd "m") 'mu4e-view-mark-for-move) (define-key map (kbd "m") 'mu4e-view-mark-for-move)
(define-key map (kbd "r") 'mu4e-view-mark-for-refile) (define-key map (kbd "r") 'mu4e-view-mark-for-refile)
(define-key map (kbd "&") 'mu4e-view-mark-custom) (define-key map (kbd "&") 'mu4e-view-mark-custom)
(define-key map (kbd "+") 'mu4e-view-mark-flag) (define-key map (kbd "+") 'mu4e-view-mark-flag)
@ -559,7 +559,7 @@ at POINT, or if nil, at (point)."
;; misc ;; misc
(define-key map "w" 'longlines-mode) (define-key map "w" 'longlines-mode)
(define-key map "h" 'mu4e-view-toggle-hide-cited) (define-key map "h" 'mu4e-view-toggle-hide-cited)
;; next 3 only warn user when attempt in the message view ;; next 3 only warn user when attempt in the message view
(define-key map "u" 'mu4e-view-unmark) (define-key map "u" 'mu4e-view-unmark)
(define-key map "U" 'mu4e-view-unmark-all) (define-key map "U" 'mu4e-view-unmark-all)
@ -1059,15 +1059,7 @@ attachments) in response to a (mu4e~proc-extract 'temp ... )."
(setq buffer-read-only t)) (setq buffer-read-only t))
(t (mu4e-error "Unsupported action %S" what)))) (t (mu4e-error "Unsupported action %S" what))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun mu4e-view-mark-custom ()
;;; marking
(defun mu4e~view-mark-set (mark)
"Set mark on the current messages."
(let ((docid (mu4e-msg-field mu4e~view-msg :docid)))
(mu4e~view-in-headers-context
(mu4e-mark-at-point mark))))
(defun mu4e-view-mark-custom ()
"Run some custom mark function." "Run some custom mark function."
(mu4e~view-in-headers-context (mu4e~view-in-headers-context
(mu4e-headers-mark-custom))) (mu4e-headers-mark-custom)))
@ -1089,50 +1081,31 @@ user that unmarking only works in the header list."
user that unmarking only works in the header list." user that unmarking only works in the header list."
(interactive) (interactive)
(if (mu4e~split-view-p) (if (mu4e~split-view-p)
(mu4e~view-mark-set 'unmark) (mu4e-view-mark-for-unmark)
(mu4e-message "Unmarking needs to be done in the header list view"))) (mu4e-message "Unmarking needs to be done in the header list view")))
(defun mu4e-view-mark-for-move () (defmacro mu4e~view-defun-mark-for (mark)
"Mark the current message for moving." "Define a function mu4e-view-mark-for-MARK."
(interactive) (let ((funcname (intern (concat "mu4e-view-mark-for-" (symbol-name mark))))
(mu4e~view-mark-set 'move) (docstring (concat "Mark the current message for " (symbol-name mark) ".")))
(mu4e-view-headers-next)) `(defun ,funcname () ,docstring
(interactive)
(mu4e~view-in-headers-context
(mu4e-headers-mark-and-next (quote mark))))))
(defun mu4e-view-mark-for-trash () ;; would be cool to do something like the following, but somehow, I can't get
"Mark the current message for moving to the trash folder." ;; the quoting right...
(interactive) ;; (dolist (mark '(move trash refile delete flag unflag unmark deferred))
(mu4e~view-mark-set 'trash) ;; (mu4e~view-defun-mark-for mark))
(mu4e-view-headers-next))
(defun mu4e-view-mark-for-refile () (mu4e~view-defun-mark-for move)
"Mark the current message for refiling." (mu4e~view-defun-mark-for trash)
(interactive) (mu4e~view-defun-mark-for refile)
(mu4e~view-mark-set 'refile) (mu4e~view-defun-mark-for delete)
(mu4e-view-headers-next)) (mu4e~view-defun-mark-for flag)
(mu4e~view-defun-mark-for unflag)
(defun mu4e-view-mark-for-delete () (mu4e~view-defun-mark-for unmark)
"Mark the current message for deletion." (mu4e~view-defun-mark-for deferred)
(interactive)
(mu4e~view-mark-set 'delete)
(mu4e-view-headers-next))
(defun mu4e-view-mark-flag ()
"Mark the current message for flagging."
(interactive)
(mu4e~view-mark-set 'flag)
(mu4e-view-headers-next))
(defun mu4e-view-mark-unflag ()
"Mark the current message for unflagging."
(interactive)
(mu4e~view-mark-set 'unflag)
(mu4e-view-headers-next))
(defun mu4e-view-mark-deferred ()
"Mark the current message for unflagging."
(interactive)
(mu4e~view-mark-set 'deferred)
(mu4e-view-headers-next))
(defun mu4e-view-marked-execute () (defun mu4e-view-marked-execute ()
"Execute the marks." "Execute the marks."