;; Elisp (defun slime-xref-undefine-method () (interactive) (let (begin end) (beginning-of-line) (search-forward "(") (backward-char) (setf begin (point)) (forward-sexp) (setf end (point)) (slime-eval (list 'cl-user::slime-xref-undefine-method (buffer-substring-no-properties begin end))) (beginning-of-buffer) (search-forward "DEFGENERIC ") (call-interactively 'slime-edit-definition) (goto-char begin) (beginning-of-line))) ;; Common lisp (defun cl-user::slime-xref-undefine-method (xref-string) (destructuring-bind (defmethod gf-name &rest specializers) (read-from-string xref-string) (let* ((gf (fdefinition gf-name)) (qualifiers (when (member (first specializers) '(:around :after :before)) (list (pop specializers)))) (method (find-method gf qualifiers (mapcar #'find-class specializers)))) (remove-method gf method) nil)))