summaryrefslogtreecommitdiff
path: root/lisp/faces.el
diff options
context:
space:
mode:
authorIvan Shmakov <ivan@siamics.net>2015-02-26 18:09:48 +0000
committerIvan Shmakov <ivan@siamics.net>2015-02-26 18:09:48 +0000
commit619fc5c197ebef5444aed24fe30657989fc2a839 (patch)
treeb72fe2090fed30313f1eff9435b673cd22b14efa /lisp/faces.el
parent5917b7907ad0cdc38f14967d16aa8472be572e3f (diff)
downloademacs-619fc5c197ebef5444aed24fe30657989fc2a839.tar.gz
Fix 'face property handling in facemenu-add-face.
* lisp/faces.el (face-list-p): Split from face-at-point. (face-at-point): Use it. * lisp/facemenu.el (facemenu-add-face): Likewise. Fixes: debbugs:19912
Diffstat (limited to 'lisp/faces.el')
-rw-r--r--lisp/faces.el17
1 files changed, 12 insertions, 5 deletions
diff --git a/lisp/faces.el b/lisp/faces.el
index ce74c728474..54e444b730a 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -273,6 +273,17 @@ If FRAME is omitted or nil, use the selected frame."
(not (internal-lisp-face-empty-p face frame)))
+(defun face-list-p (face-or-list)
+ "True if FACE-OR-LIST is a list of faces.
+Return nil if FACE-OR-LIST is a non-nil atom, or a cons cell whose car
+is either 'foreground-color, 'background-color, or a keyword."
+ ;; The logic of merge_face_ref (xfaces.c) is recreated here.
+ (and (listp face-or-list)
+ (not (memq (car face-or-list)
+ '(foreground-color background-color)))
+ (not (keywordp (car face-or-list)))))
+
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Setting face attributes from X resources.
@@ -1922,11 +1933,7 @@ Return nil if there is no face."
(get-char-property (point) 'face))))
(cond ((facep faceprop)
(push faceprop faces))
- ((and (listp faceprop)
- ;; Don't treat an attribute spec as a list of faces.
- (not (keywordp (car faceprop)))
- (not (memq (car faceprop)
- '(foreground-color background-color))))
+ ((face-list-p faceprop)
(dolist (face faceprop)
(if (facep face)
(push face faces))))))