]> git.eshelyaron.com Git - emacs.git/commitdiff
Reduce face-related consing during frame creation.
authorKen Raeburn <raeburn@raeburn.org>
Wed, 14 Oct 2015 02:06:01 +0000 (22:06 -0400)
committerKen Raeburn <raeburn@raeburn.org>
Wed, 14 Oct 2015 02:12:55 +0000 (22:12 -0400)
* faces.el (face--attributes-unspecified): Compute the "unspecified"
attribute list once.
(face-spec-reset-face): Use it instead of building the list.

lisp/faces.el

index 4e7f1a42bff6a4719ef328937b1d330cb07bfa7a..de8a0b5bcb1fd1c7ca40808d636eee7724c0f4b0 100644 (file)
@@ -1598,6 +1598,13 @@ is given, in which case return its value instead."
          result
        no-match-retval))))
 
+;; When over 80 faces get processed at frame creation time, all but
+;; one specifying all attributes as "unspecified", generating this
+;; list every time means a lot of consing.
+(defconst face--attributes-unspecified
+  (apply 'append
+         (mapcar (lambda (x) (list (car x) 'unspecified))
+                 face-attribute-name-alist)))
 
 (defun face-spec-reset-face (face &optional frame)
   "Reset all attributes of FACE on FRAME to unspecified."
@@ -1622,9 +1629,7 @@ is given, in which case return its value instead."
                                     "unspecified-fg"
                                   "unspecified-bg")))))
           ;; For all other faces, unspecify all attributes.
-          (apply 'append
-                 (mapcar (lambda (x) (list (car x) 'unspecified))
-                         face-attribute-name-alist)))))
+           face--attributes-unspecified)))
 
 (defun face-spec-set (face spec &optional spec-type)
   "Set the face spec SPEC for FACE.