Subject: bug#20519: face-at-point: do not compute the final list if a sole value is wanted

From: Ivan Shmakov <[email-masked]>
Date: Wed, 06 May 2015 21:25:40 +0000

Package:  emacs
Severity: wishlist

	The face-at-point function currently (1c7f0cdc4c1f, 2015-04-27
	16:59:11 +00:00) uses delete-dups to compute a duplicate-free
	version of the list… just before taking a single value of it and
	discarding the rest in the (not multiple) case.

	Please thus consider the following patch.

	* lisp/faces.el (face-at-point): Do not compute the properly
	ordered, duplicate-free list if only a single value is
	requested.

-- 
FSF associate member #7257  http://am-1.org/~ivan/      … 3013 B6A0 230E 334A
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -1937,8 +1937,9 @@ defun face-at-point (&optional thing multiple)
              (dolist (face faceprop)
                (if (facep face)
                    (push face faces))))))
-    (setq faces (delete-dups (nreverse faces)))
-    (if multiple faces (car faces))))
+    (if multiple
+        (delete-dups (nreverse faces))
+      (car (last faces)))))
 
 (defun foreground-color-at-point ()
   "Return the foreground color of the character after point."