From 192c5b12bc0408255718201a2363593ad1b0b61a Mon Sep 17 00:00:00 2001 From: djcb Date: Fri, 11 May 2012 11:18:00 +0300 Subject: [PATCH] * mu4e: mark messages as flagged ('+') or unflagged ('-') this maps to the the Maildir 'F' flag, which is a persistent mark on a message file; similar to the Gmail '*' marker --- emacs/mu4e-headers.el | 13 ++++++++++--- emacs/mu4e-mark.el | 10 ++++++---- emacs/mu4e-vars.el | 5 +++++ emacs/mu4e-view.el | 25 ++++++++++++++++++++----- 4 files changed, 41 insertions(+), 12 deletions(-) diff --git a/emacs/mu4e-headers.el b/emacs/mu4e-headers.el index 190e7333..368a7db3 100644 --- a/emacs/mu4e-headers.el +++ b/emacs/mu4e-headers.el @@ -242,11 +242,13 @@ if provided, or at the end of the buffer otherwise." (flags (plist-get msg :flags)) (line (cond ((member 'draft flags) - (propertize line 'face 'mu4e-draft-face 'draft t)) + (propertize line 'face 'mu4e-draft-face)) ((member 'trashed flags) (propertize line 'face 'mu4e-trashed-face)) ((member 'unread flags) (propertize line 'face 'mu4e-unread-face)) + ((member 'flagged flags) + (propertize line 'face 'mu4e-flagged-face)) (t ;; else (propertize line 'face 'mu4e-header-face))))) @@ -286,7 +288,8 @@ after the end of the search results." (defun mu4e~headers-mark-unmark()(interactive)(mu4e-headers-mark-and-next 'unmark)) (defun mu4e~headers-mark-read()(interactive)(mu4e-headers-mark-and-next 'read)) (defun mu4e~headers-mark-unread()(interactive)(mu4e-headers-mark-and-next 'unread)) - + (defun mu4e~headers-mark-flag()(interactive)(mu4e-headers-mark-and-next 'flag)) + (defun mu4e~headers-mark-unflag()(interactive)(mu4e-headers-mark-and-next 'unflag)) (setq mu4e-headers-mode-map (let ((map (make-sparse-keymap))) @@ -335,7 +338,9 @@ after the end of the search results." (define-key map (kbd "o") 'mu4e~headers-mark-unread) (define-key map (kbd "r") 'mu4e~headers-mark-read) (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 "m" 'mu4e-headers-mark-for-move-and-next) (define-key map "U" 'mu4e-mark-unmark-all) @@ -635,6 +640,8 @@ header." ("elete" ?D delete) ("unread" ?o unread) ("read" nil read) + ("star" ?+ star) + ("unstar" ?- unstar) ("unmark" nil unmark)))) (target (when (eq mark 'move) diff --git a/emacs/mu4e-mark.el b/emacs/mu4e-mark.el index dd8bc26c..2825f1d9 100644 --- a/emacs/mu4e-mark.el +++ b/emacs/mu4e-mark.el @@ -65,10 +65,6 @@ where (defconst mu4e~mark-fringe-format (format "%%-%ds" mu4e~mark-fringe-len) "Format string to set a mark and leave remaining space.") - - - - (defun mu4e~mark-initialize () "Initialize the marks subsystem." (make-local-variable 'mu4e~mark-map) @@ -94,6 +90,8 @@ The following marks are available, and the corresponding props: `delete' n remove the message `read' n mark the message as read `unread' n mark the message as unread + `flag' n mark this message for flagging + `unflag' n mark this message for unflagging `unmark' n unmark this message" (interactive) (let* ((docid (mu4e~headers-docid-at-point)) @@ -104,6 +102,8 @@ The following marks are available, and the corresponding props: ('delete "D") ('unread "U") ('read "R") + ('flag "+") + ('unflag "-") ('unmark " ") (t (error "Invalid mark %S" mark))))) (unless docid (error "No message on this line")) @@ -194,6 +194,8 @@ If NO-CONFIRMATION is non-nil, don't ask user for confirmation." (move (mu4e~proc-move docid target)) (read (mu4e~proc-move docid nil "+S-u-N")) (unread (mu4e~proc-move docid nil "-S+u")) + (flag (mu4e~proc-move docid nil "+F-u-N")) + (unflag (mu4e~proc-move docid nil "-F")) (trash (unless mu4e-trash-folder (error "`mu4e-trash-folder' not set")) diff --git a/emacs/mu4e-vars.el b/emacs/mu4e-vars.el index 3d4ed027..0d75e3e8 100644 --- a/emacs/mu4e-vars.el +++ b/emacs/mu4e-vars.el @@ -183,6 +183,11 @@ be sure it no longer matches)." flag set)." :group 'mu4e-faces) +(defface mu4e-flagged-face + '((t :inherit font-lock-builtin-face :bold t)) + "Face for a flagged message header." + :group 'mu4e-faces) + (defface mu4e-header-face '((t :inherit default)) "Face for a header without any special flags." diff --git a/emacs/mu4e-view.el b/emacs/mu4e-view.el index 685648c8..b0173bc0 100644 --- a/emacs/mu4e-view.el +++ b/emacs/mu4e-view.el @@ -312,11 +312,11 @@ is nil, and otherwise open it." (define-key map "s" 'mu4e-headers-search) (define-key map "S" 'mu4e-view-headers-search-edit) (define-key map "/" 'mu4e-view-headers-search-narrow) - + (define-key map (kbd "") 'mu4e-headers-query-prev) (define-key map (kbd "") 'mu4e-headers-query-next) - - (define-key map "b" 'mu4e-headers-search-bookmark) + + (define-key map "b" 'mu4e-headers-search-bookmark) (define-key map "B" 'mu4e-headers-search-bookmark-edit) (define-key map "%" 'mu4e-view-mark-pattern) @@ -371,6 +371,9 @@ is nil, and otherwise open it." (define-key map "D" 'mu4e-view-mark-for-delete) (define-key map "m" 'mu4e-view-mark-for-move) + (define-key map (kbd "+") 'mu4e-view-mark-flag) + (define-key map (kbd "-") 'mu4e-view-mark-unflag) + ;; misc (define-key map "w" 'mu4e-view-toggle-wrap-lines) (define-key map "h" 'mu4e-view-toggle-hide-cited) @@ -430,13 +433,13 @@ is nil, and otherwise open it." (define-key menumap [query-next] '("Next query" . mu4e-headers-query-next)) - (define-key menumap [query-prev] '("Previous query" . mu4e-headers-query-prev)) + (define-key menumap [query-prev] '("Previous query" . mu4e-headers-query-prev)) (define-key menumap [narrow-search] '("Narrow search" . mu4e-headers-search-narrow)) (define-key menumap [bookmark] '("Search bookmark" . mu4e-headers-search-bookmark)) (define-key menumap [jump] '("Jump to maildir" . mu4e~headers-jump-to-maildir)) (define-key menumap [refresh] '("Refresh" . mu4e-headers-rerun-search)) (define-key menumap [search] '("Search" . mu4e-headers-search)) - + (define-key menumap [sepa4] '("--")) (define-key menumap [next] '("Next" . mu4e-view-headers-next)) @@ -879,6 +882,18 @@ user that unmarking only works in the header list." (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-marked-execute () "Execute the marks." (interactive)