branch: externals/engrave-faces commit e9a9b374538285bcbc07bb0c147ca4476e2ef175 Author: TEC <t...@tecosaur.com> Commit: TEC <t...@tecosaur.com>
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.