X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=contrib%2Fnotmuch-pick%2Fnotmuch-pick.el;h=69bea2a45add4ad30a4f61fd7f5556d1230098c9;hp=49f298a6e2b9f4367d024e681ad3cc4ec2e49918;hb=c8f7b6e0c4ae1cdce41239e41a21440bbc74b258;hpb=6c8116c05b5cb1de4cabf5ffd2abca444fcdd717 diff --git a/contrib/notmuch-pick/notmuch-pick.el b/contrib/notmuch-pick/notmuch-pick.el index 49f298a6..69bea2a4 100644 --- a/contrib/notmuch-pick/notmuch-pick.el +++ b/contrib/notmuch-pick/notmuch-pick.el @@ -65,13 +65,18 @@ (defcustom notmuch-pick-result-format `(("date" . "%12s ") ("authors" . "%-20s") - ("subject" . " %-54s ") + ((("tree" . "%s")("subject" . "%s")) ." %-54s ") ("tags" . "(%s)")) "Result formatting for Pick. Supported fields are: date, - authors, subject, tags Note: subject includes the tree - structure graphics, and the author string should not - contain whitespace (put it in the neighbouring fields - instead). For example: + authors, subject, tree, tags. Tree means the thread tree + box graphics. The field may also be a list in which case + the formatting rules are applied recursively and then the + output of all the fields in the list is inserted + according to format-string. + +Note the author string should not contain + whitespace (put it in the neighbouring fields instead). + For example: (setq notmuch-pick-result-format \(\(\"authors\" . \"%-40s\"\) \(\"subject\" . \"%s\"\)\)\)" :type '(alist :key-type (string) :value-type (string)) @@ -103,6 +108,12 @@ :group 'notmuch-pick :group 'notmuch-faces) +(defface notmuch-pick-match-tree-face + '((t :inherit default)) + "Face used in pick mode for the thread tree block graphics in messages matching the query." + :group 'notmuch-pick + :group 'notmuch-faces) + (defface notmuch-pick-match-tag-face '((((class color) (background dark)) @@ -129,6 +140,12 @@ :group 'notmuch-pick :group 'notmuch-faces) +(defface notmuch-pick-no-match-tree-face + '((t (:foreground "gray"))) + "Face used in pick mode for the thread tree block graphics in messages matching the query." + :group 'notmuch-pick + :group 'notmuch-faces) + (defface notmuch-pick-no-match-author-face '((t (:foreground "gray"))) "Face used in pick mode for the date in messages matching the query." @@ -411,17 +428,6 @@ Does NOT change the database." (notmuch-pick-close-message-window) (notmuch-pick query))) -;; This function should be in notmuch-hello.el but we are trying to -;; minimise impact on the rest of the codebase. -(defun notmuch-pick-from-hello (&optional search) - "Run a query and display results in experimental notmuch-pick mode" - (interactive) - (unless (null search) - (setq search (notmuch-hello-trim search)) - (let ((history-delete-duplicates t)) - (add-to-history 'notmuch-search-history search))) - (notmuch-pick search)) - ;; This function should be in notmuch-show.el but be we trying to ;; minimise impact on the rest of the codebase. (defun notmuch-pick-from-show-current-query () @@ -675,6 +681,10 @@ unchanged ADDRESS if parsing fails." (match (plist-get msg :match)) formatted-field) (cond + ((listp field) + (setq formatted-field + (format format-string (notmuch-pick-format-field-list field msg)))) + ((string-equal field "date") (let ((face (if match 'notmuch-pick-match-date-face @@ -683,19 +693,27 @@ unchanged ADDRESS if parsing fails." (propertize (format format-string (plist-get msg :date_relative)) 'face face)))) - ((string-equal field "subject") + ((string-equal field "tree") (let ((tree-status (plist-get msg :tree-status)) - (bare-subject (notmuch-show-strip-re (plist-get headers :Subject))) + (face (if match + 'notmuch-pick-match-tree-face + 'notmuch-pick-no-match-tree-face))) + + (setq formatted-field + (propertize (format format-string + (mapconcat #'identity (reverse tree-status) "")) + 'face face)))) + + ((string-equal field "subject") + (let ((bare-subject (notmuch-show-strip-re (plist-get headers :Subject))) (face (if match 'notmuch-pick-match-subject-face 'notmuch-pick-no-match-subject-face))) (setq formatted-field (propertize (format format-string - (concat - (mapconcat #'identity (reverse tree-status) "") - (if (string= notmuch-pick-previous-subject bare-subject) - " ..." - bare-subject))) + (if (string= notmuch-pick-previous-subject bare-subject) + " ..." + bare-subject)) 'face face)) (setq notmuch-pick-previous-subject bare-subject))) @@ -722,13 +740,19 @@ unchanged ADDRESS if parsing fails." 'face face))))) formatted-field)) +(defun notmuch-pick-format-field-list (field-list msg) + "Format fields of MSG according to FIELD-LIST and return string" + (let (result-string) + (dolist (spec field-list result-string) + (let ((field-string (notmuch-pick-format-field (car spec) (cdr spec) msg))) + (setq result-string (concat result-string field-string)))))) + (defun notmuch-pick-insert-msg (msg) "Insert the message MSG according to notmuch-pick-result-format" ;; We need to save the previous subject as it will get overwritten ;; by the insert-field calls. (let ((previous-subject notmuch-pick-previous-subject)) - (dolist (spec notmuch-pick-result-format) - (insert (notmuch-pick-format-field (car spec) (cdr spec) msg))) + (insert (notmuch-pick-format-field-list notmuch-pick-result-format msg)) (notmuch-pick-set-message-properties msg) (notmuch-pick-set-prop :previous-subject previous-subject) (insert "\n"))) @@ -931,12 +955,10 @@ The arguments are: ;; Set up key bindings from the rest of notmuch. -(define-key 'notmuch-search-mode-map "z" 'notmuch-pick) -(define-key 'notmuch-search-mode-map "Z" 'notmuch-pick-from-search-current-query) -(define-key 'notmuch-search-mode-map (kbd "M-RET") 'notmuch-pick-from-search-thread) -(define-key 'notmuch-hello-mode-map "z" 'notmuch-pick-from-hello) -(define-key 'notmuch-show-mode-map "z" 'notmuch-pick) -(define-key 'notmuch-show-mode-map "Z" 'notmuch-pick-from-show-current-query) +(define-key notmuch-common-keymap "z" 'notmuch-pick) +(define-key notmuch-search-mode-map "Z" 'notmuch-pick-from-search-current-query) +(define-key notmuch-search-mode-map (kbd "M-RET") 'notmuch-pick-from-search-thread) +(define-key notmuch-show-mode-map "Z" 'notmuch-pick-from-show-current-query) (notmuch-pick-setup-show-out) (message "Initialised notmuch-pick")