Fix tp-group-props to handle both old and new formats, update remaining documentation examples

Co-authored-by: Kinneyzhang <38454496+Kinneyzhang@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-01-04 10:31:52 +00:00
parent 5f55263eb2
commit 5667881765
2 changed files with 24 additions and 7 deletions

View File

@ -1547,7 +1547,8 @@ Get properties for a layer or all layers in a group.
(setq tp-layer-groups nil)
(define-tp layer1 () '(face bold))
(define-tp layer2 () '(face italic))
(tp-define-layer-group 'my-group 'layer1 'layer2)
(define-tps my-group ()
'layer1 'layer2)
(length (tp-group-props 'my-group)))
;; => 2
```
@ -1579,7 +1580,8 @@ Remove layer or group definition.
(setq tp-layer-alist nil)
(setq tp-layer-groups nil)
(define-tp l1 () '(face bold))
(tp-define-layer-group 'my-group 'l1)
(define-tps my-group ()
'l1)
(tp-undefine-group 'my-group)
(assoc 'my-group tp-layer-groups))
;; => nil

25
tp.el
View File

@ -2865,11 +2865,26 @@ Recursively expands any nested layer names in the returned plist."
(defun tp-group-props (group-name &optional include-tp-name)
"Return list of properties for all layers in GROUP-NAME.
If INCLUDE-TP-NAME is non-nil, each layer's props will include tp-name."
(when-let ((layers (cdr (assoc group-name tp-layer-groups))))
(mapcar (lambda (layer)
(tp-layer-props layer include-tp-name))
layers)))
If INCLUDE-TP-NAME is non-nil, each layer's props will include tp-name.
Handles both old format (list of layer names) and new unified format
from `define-tps` (parameterized groups store ARGLIST and BODY-FORM)."
(when-let ((entry (cdr (assoc group-name tp-layer-groups))))
;; Check if it's the unified format from define-tps (ARGLIST BODY-FORM)
;; Unified format: (ARGLIST BODY-FORM) where ARGLIST is a list of symbols or nil
;; Old format: (layer1 layer2 ...) where each element is a symbol referring to a layer
(cond
;; Unified parameterized format: (ARGLIST BODY-FORM) with non-nil ARGLIST
((and (= (length entry) 2)
(listp (car entry))
(not (null (car entry)))
(cl-every #'symbolp (car entry)))
;; Parameterized group - can't get props without argument
nil)
;; Old format or non-parameterized define-tps: list of layer names
(t
(mapcar (lambda (layer)
(tp-layer-props layer include-tp-name))
entry)))))
(defun tp--is-layer-name-p (sym)
"Return non-nil if SYM is a defined layer, parameterized layer, or group name."