X-Git-Url: https://git.hcoop.net/clinton/lisp-on-lines.git/blobdiff_plain/4358148e6c67fcc2ae24050c54d8050b4dc03f9d..e8fd1a9a2f3b68a8aee14b8776ff8398ba717eef:/src/standard-descriptions/list.lisp diff --git a/src/standard-descriptions/list.lisp b/src/standard-descriptions/list.lisp index 71c65f2..133ee69 100644 --- a/src/standard-descriptions/list.lisp +++ b/src/standard-descriptions/list.lisp @@ -1,8 +1,23 @@ (in-package :lisp-on-lines) -(define-description cons () + +(define-layered-class list-attribute (standard-attribute) + ((item-args :initform nil :initarg :item :layered t :special t))) + +(define-layered-method display-attribute-value + ((attribute list-attribute)) + (arnesi:dolist* (item (attribute-value attribute)) + (apply #'display *display* item (slot-value attribute 'item-args)))) + +(define-description list () + ((list :attribute-class list-attribute + :function #'identity + :attributes nil))) + +(define-description cons (list) ((car :label "First" :function #'car) - (cdr :label "Rest" :function #'cdr))) + (cdr :label "Rest" :function #'cdr) + )) (define-description cons () ((editp :value t :editp nil) @@ -10,6 +25,10 @@ (cdr :setter #'rplacd)) (:in-description editable)) +(define-description cons () + ((active-attributes :value '(list))) + (:in-description inline)) + (define-layered-method description-of ((c cons)) (find-description 'cons))