(eval-and-compile (require 'slime)) (define-slime-contrib slime-fancy-inspector "Fancy inspector for CLOS objects." (:authors "Marco Baringer and others") (:license "GPL") (:slime-dependencies slime-parse) (:swank-dependencies swank-fancy-inspector) (:on-load (add-hook 'slime-edit-definition-hooks 'slime-edit-inspector-part)) (:on-unload (remove-hook 'slime-edit-definition-hooks 'slime-edit-inspector-part))) (defun slime-inspect-definition () "Inspect definition at point" (interactive) (slime-inspect (slime-definition-at-point))) (defun slime-disassemble-definition () "Disassemble definition at point" (interactive) (slime-eval-describe `(swank:disassemble-form ,(slime-definition-at-point t)))) (defun slime-edit-inspector-part (name &optional where) (and (eq major-mode 'slime-inspector-mode) (cl-destructuring-bind (&optional property value) (slime-inspector-property-at-point) (when (eq property 'slime-part-number) (let ((location (slime-eval `(swank:find-definition-for-thing (swank:inspector-nth-part ,value)))) (name (format "Inspector part %s" value))) (when (and (consp location) (not (eq (car location) :error))) (slime-edit-definition-cont (list (make-slime-xref :dspec `(,name) :location location)) name where))))))) (provide 'slime-fancy-inspector)