From dfab8e5e49d90c415f9585a02a2b0d6f72b4083a Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Sat, 22 Mar 2014 11:51:05 +0000 Subject: [PATCH] emacs: Combine notmuch-combine-face-text-property{, -string} This combines our two face combining functions into one, easy to use function with a much shorter name: `notmuch-apply-face'. This function takes the full set of arguments that `notmuch-combine-face-text-property' took, but takes them in a more convenient order and provides smarter defaults that make the function easy to use on both strings and buffers. --- emacs/notmuch-lib.el | 35 ++++++++++++++++++----------------- emacs/notmuch-tag.el | 2 +- emacs/notmuch-tree.el | 2 +- emacs/notmuch.el | 2 +- 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el index 2fefdadc..fa7646fe 100644 --- a/emacs/notmuch-lib.el +++ b/emacs/notmuch-lib.el @@ -578,23 +578,32 @@ single element face list." face (list face))) -(defun notmuch-combine-face-text-property (start end face &optional below object) - "Combine FACE into the 'face text property between START and END. +(defun notmuch-apply-face (object face &optional below start end) + "Combine FACE into the 'face text property of OBJECT between START and END. This function combines FACE with any existing faces between START -and END in OBJECT (which defaults to the current buffer). -Attributes specified by FACE take precedence over existing -attributes unless BELOW is non-nil. FACE must be a face name (a -symbol or string), a property list of face attributes, or a list -of these. For convenience when applied to strings, this returns -OBJECT." +and END in OBJECT. Attributes specified by FACE take precedence +over existing attributes unless BELOW is non-nil. + +OBJECT may be a string, a buffer, or nil (which means the current +buffer). If object is a string, START and END are 0-based; +otherwise they are buffer positions (integers or markers). FACE +must be a face name (a symbol or string), a property list of face +attributes, or a list of these. If START and/or END are omitted, +they default to the beginning/end of OBJECT. For convenience +when applied to strings, this returns OBJECT." ;; A face property can have three forms: a face name (a string or ;; symbol), a property list, or a list of these two forms. In the ;; list case, the faces will be combined, with the earlier faces ;; taking precedent. Here we canonicalize everything to list form ;; to make it easy to combine. - (let ((pos start) + (let ((pos (cond (start start) + ((stringp object) 0) + (t 1))) + (end (cond (end end) + ((stringp object) (length object)) + (t (1+ (buffer-size object))))) (face-list (notmuch-face-ensure-list-form face))) (while (< pos end) (let* ((cur (get-text-property pos 'face object)) @@ -607,14 +616,6 @@ OBJECT." (setq pos next)))) object) -(defun notmuch-combine-face-text-property-string (string face &optional below) - (notmuch-combine-face-text-property - 0 - (length string) - face - below - string)) - (defun notmuch-map-text-property (start end prop func &optional object) "Transform text property PROP using FUNC. diff --git a/emacs/notmuch-tag.el b/emacs/notmuch-tag.el index 908e7ade..41b16876 100644 --- a/emacs/notmuch-tag.el +++ b/emacs/notmuch-tag.el @@ -151,7 +151,7 @@ This can be used with `notmuch-tag-format-image-data'." (defun notmuch-tag-format-tags (tags &optional face) "Return a string representing formatted TAGS." (let ((face (or face 'notmuch-tag-face))) - (notmuch-combine-face-text-property-string + (notmuch-apply-face (mapconcat #'identity ;; nil indicated that the tag was deliberately hidden (delq nil (mapcar #'notmuch-tag-format-tag tags)) diff --git a/emacs/notmuch-tree.el b/emacs/notmuch-tree.el index 4f2ac028..e3aa2cd9 100644 --- a/emacs/notmuch-tree.el +++ b/emacs/notmuch-tree.el @@ -715,7 +715,7 @@ unchanged ADDRESS if parsing fails." (dolist (spec field-list result-string) (let ((field-string (notmuch-tree-format-field (car spec) (cdr spec) msg))) (setq result-string (concat result-string field-string)))) - (notmuch-combine-face-text-property-string result-string face t))) + (notmuch-apply-face result-string face t))) (defun notmuch-tree-insert-msg (msg) "Insert the message MSG according to notmuch-tree-result-format" diff --git a/emacs/notmuch.el b/emacs/notmuch.el index 65baa0cb..9e39a76b 100644 --- a/emacs/notmuch.el +++ b/emacs/notmuch.el @@ -649,7 +649,7 @@ foreground and blue background." (let ((tag (car elem)) (attributes (cdr elem))) (when (member tag line-tag-list) - (notmuch-combine-face-text-property start end attributes)))) + (notmuch-apply-face nil attributes nil start end)))) ;; Reverse the list so earlier entries take precedence (reverse notmuch-search-line-faces)))