emacs: Combine notmuch-combine-face-text-property{, -string}
authorAustin Clements <amdragon@MIT.EDU>
Sat, 22 Mar 2014 11:51:05 +0000 (11:51 +0000)
committerDavid Bremner <david@tethera.net>
Mon, 24 Mar 2014 22:42:33 +0000 (19:42 -0300)
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
emacs/notmuch-tag.el
emacs/notmuch-tree.el
emacs/notmuch.el

index 2fefdadc4e19e17b6f79f0b5b1c1e5350bbe226f..fa7646fecb8bb020c2b06cea1fb5579be19c49f4 100644 (file)
@@ -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.
 
index 908e7ade6270bccce7fb6afbbb3e63eccc261465..41b168762c82e48b67718dff722faa14c7ac39f0 100644 (file)
@@ -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))
index 4f2ac028793485d72bff372593432fff5ffcf3f5..e3aa2cd980b5555df7ec8ec65d57320eafeef177 100644 (file)
@@ -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"
index 65baa0cb8886d6ff9e8e531a7c1a8aadfe7625b2..9e39a76b254b71383f98db4620021257a684a3d7 100644 (file)
@@ -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)))