Random useful thing: BROWSE-WC
This function makes little windows with the results of the various
who-calls type functions in, from which you can edit things, or click
right to further browse.
Does anyone know how to make CONTAIN choose a sensible height for
list-panels? The default is tiny...
--tim
(defun browse-wc (thing &rest types)
;; Now less trivial than it was...
"Browse who-calls, or in fact browse any of the *-WHO or WHO-* functions"
(setf types (or types '(:who-calls)))
(let ((selections (loop for type in types
appending
(ecase type
((:who-calls) (who-calls thing))
((:calls-who) (calls-who thing))
((:who-binds) (who-binds thing))
((:binds-who) (binds-who thing))
((:who-sets) (who-sets thing))
((:sets-who) (sets-who thing))
((:who-references) (who-references thing))
((:references-who) (references-who thing)))))
panel)
(when selections
(setf panel
(make-instance 'capi:list-panel
:items selections
:print-function #'prin1-to-string
:callback-type :data
:action-callback #'ed
:pane-menu
(make-instance
'capi:menu
:title "Browse selection"
:items '(:who-calls :calls-who
:who-binds :binds-who
:who-sets :sets-who
:who-references :references-who)
:print-function
#'(lambda (s)
(format nil "~A ~S"
(nstring-capitalize
(substitute
#\Space #\-
(symbol-name s)))
(capi:choice-selected-item panel)))
:callback-type :data
:callback
#'(lambda (type)
(browse-wc (capi:choice-selected-item panel)
type)))))
(capi:contain
panel
;; why is default size all wrong?
:best-height 120
:best-width 200
:title (format nil "~S: ~{~A~^, ~}"
thing
(mapcar #'(lambda (type)
(string-downcase
(substitute #\Space #\-
(symbol-name type))))
types))))
selections))