contrib: pick: make the tree graphics a proper part of the format

Previously the box graphics in the pick view were always attached to
the subject. Make them a field in their own right. We use the
recursive insert to change the default notmuch-pick-result-format so
that the user view does not change. (The subject touches the tree box
graphics but the next column (tags) is still vertically aligned.)
This commit is contained in:
Mark Walters 2013-09-02 04:28:08 +01:00 committed by David Bremner
parent 6ae591911c
commit 81ee7855b5

View file

@ -65,13 +65,18 @@
(defcustom notmuch-pick-result-format (defcustom notmuch-pick-result-format
`(("date" . "%12s ") `(("date" . "%12s ")
("authors" . "%-20s") ("authors" . "%-20s")
("subject" . " %-54s ") ((("tree" . "%s")("subject" . "%s")) ." %-54s ")
("tags" . "(%s)")) ("tags" . "(%s)"))
"Result formatting for Pick. Supported fields are: date, "Result formatting for Pick. Supported fields are: date,
authors, subject, tags Note: subject includes the tree authors, subject, tree, tags. Tree means the thread tree
structure graphics, and the author string should not box graphics. The field may also be a list in which case
contain whitespace (put it in the neighbouring fields the formatting rules are applied recursively and then the
instead). For example: 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\"\) (setq notmuch-pick-result-format \(\(\"authors\" . \"%-40s\"\)
\(\"subject\" . \"%s\"\)\)\)" \(\"subject\" . \"%s\"\)\)\)"
:type '(alist :key-type (string) :value-type (string)) :type '(alist :key-type (string) :value-type (string))
@ -103,6 +108,12 @@
:group 'notmuch-pick :group 'notmuch-pick
:group 'notmuch-faces) :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 (defface notmuch-pick-match-tag-face
'((((class color) '((((class color)
(background dark)) (background dark))
@ -129,6 +140,12 @@
:group 'notmuch-pick :group 'notmuch-pick
:group 'notmuch-faces) :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 (defface notmuch-pick-no-match-author-face
'((t (:foreground "gray"))) '((t (:foreground "gray")))
"Face used in pick mode for the date in messages matching the query." "Face used in pick mode for the date in messages matching the query."
@ -687,19 +704,27 @@ unchanged ADDRESS if parsing fails."
(propertize (format format-string (plist-get msg :date_relative)) (propertize (format format-string (plist-get msg :date_relative))
'face face)))) 'face face))))
((string-equal field "subject") ((string-equal field "tree")
(let ((tree-status (plist-get msg :tree-status)) (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 (face (if match
'notmuch-pick-match-subject-face 'notmuch-pick-match-subject-face
'notmuch-pick-no-match-subject-face))) 'notmuch-pick-no-match-subject-face)))
(setq formatted-field (setq formatted-field
(propertize (format format-string (propertize (format format-string
(concat (if (string= notmuch-pick-previous-subject bare-subject)
(mapconcat #'identity (reverse tree-status) "") " ..."
(if (string= notmuch-pick-previous-subject bare-subject) bare-subject))
" ..."
bare-subject)))
'face face)) 'face face))
(setq notmuch-pick-previous-subject bare-subject))) (setq notmuch-pick-previous-subject bare-subject)))