(require 'slime) (require 'cl-lib) (define-slime-contrib slime-mdot-fu "Making M-. work on local functions." (:authors "Tobias C. Rittweiler ") (:license "GPL") (:slime-dependencies slime-enclosing-context) (:on-load (add-hook 'slime-edit-definition-hooks 'slime-edit-local-definition)) (:on-unload (remove-hook 'slime-edit-definition-hooks 'slime-edit-local-definition))) (defun slime-edit-local-definition (name &optional where) "Like `slime-edit-definition', but tries to find the definition in a local function binding near point." (interactive (list (slime-read-symbol-name "Name: "))) (cl-multiple-value-bind (binding-name point) (cl-multiple-value-call #'cl-some #'(lambda (binding-name point) (when (cl-equalp binding-name name) (cl-values binding-name point))) (slime-enclosing-bound-names)) (when (and binding-name point) (slime-edit-definition-cont `((,binding-name ,(make-slime-buffer-location (buffer-name (current-buffer)) point))) name where)))) (provide 'slime-mdot-fu)