branch: externals/engrave-faces
commit e9a9b374538285bcbc07bb0c147ca4476e2ef175
Author: TEC <[email protected]>
Commit: TEC <[email protected]>
More face inheritance form edge cases
I /think/ it should be all sorted now.
---
engrave-faces.el | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/engrave-faces.el b/engrave-faces.el
index a6ba153..23b2562 100644
--- a/engrave-faces.el
+++ b/engrave-faces.el
@@ -36,8 +36,11 @@
;;; Code:
+(require 'map)
+
;;;###autoload
(defvar engrave-faces--backends nil)
+
;;;###autoload
(defmacro engrave-faces-define-backend (name extension face-transformer)
`(progn (add-to-list 'engrave-faces--backends
@@ -131,14 +134,18 @@ output.")
(defun engrave-faces-explicit-inheritance (faces)
"Expand :inherit for each face in FACES.
I.e. ([facea :inherit faceb] facec) results in (facea faceb facec)"
- (apply #'append (mapcar
- (lambda (face)
- (cons face
- (let ((inherit (face-attribute face :inherit nil
nil)))
- (when (and inherit (not (eq inherit
'unspecified)))
- (engrave-faces-explicit-inheritance
- (if (listp inherit) inherit (list
inherit)))))))
- faces)))
+ (delq nil
+ (mapcan
+ (lambda (face)
+ (if (listp face)
+ (let ((inherit (plist-get face :inherit)))
+ (cons (map-delete face :inherit)
+ (engrave-faces-explicit-inheritance inherit)))
+ (cons face
+ (let ((inherit (face-attribute face :inherit nil nil)))
+ (when (and inherit (not (eq inherit 'unspecified)))
+ (engrave-faces-explicit-inheritance inherit))))))
+ (if (listp faces) faces (list faces)))))
(defun engrave-faces-attribute-values (faces attribute)
"Fetch all specified instances of ATTRIBUTE for FACES, ignoring inheritence.