summaryrefslogtreecommitdiff
path: root/lisp/faces.el
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@raeburn.org>2015-10-13 22:06:01 -0400
committerKen Raeburn <raeburn@raeburn.org>2015-10-13 22:12:55 -0400
commit9fa9c26e42ddb3f67133bc18112147926bae8a50 (patch)
treea7bc2ac4daefb0a1410fb50885d6c394d07d3087 /lisp/faces.el
parent85c12310ff9a6721fb1ecbfdf6d89e59a34fb882 (diff)
downloademacs-9fa9c26e42ddb3f67133bc18112147926bae8a50.tar.gz
Reduce face-related consing during frame creation.
* faces.el (face--attributes-unspecified): Compute the "unspecified" attribute list once. (face-spec-reset-face): Use it instead of building the list.
Diffstat (limited to 'lisp/faces.el')
-rw-r--r--lisp/faces.el11
1 files changed, 8 insertions, 3 deletions
diff --git a/lisp/faces.el b/lisp/faces.el
index 4e7f1a42bff..de8a0b5bcb1 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -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.