+(defun make-display-function (component object
+ &rest properties
+ &key type (line #'line-in)
+ &allow-other-keys)
+ "returns a function that expects a 3 argument function as its argument
+
+The function (which is usually display-using-description) will be called with the proper environment for display all set up nice n pretty like."
+
+ (lambda (function)
+ (let* ((description (find-occurence object)))
+
+ (if description
+ (dletf (((description.type description) type)
+ ((attributes description) (or
+ (attributes description)
+ (list-slots object))))
+ ;; apply the default line to the description
+ (funcall-with-description
+ description
+ (funcall line object)
+ ;; apply the passed in arguments and call display-using-description
+ #'(lambda ()
+ (funcall-with-description
+ description
+ properties
+ function description object component))))
+ (error "no description for ~A" object)))))