(defun slime-eval-macroexpand (expander &optional string) (unless string (setf string (first (slime-sexp-at-point-for-macroexpansion)))) (setf slime-eval-macroexpand-expression `(,expander ,string)) (lexical-let ((package (slime-current-package))) (slime-eval-async slime-eval-macroexpand-expression (lambda (expansion) (slime-with-output-to-temp-buffer ;; reusep for preserving `undo' functionality. ("*SLIME macroexpansion*" :mode lisp-mode :reusep t) package (slime-macroexpansion-minor-mode) (erase-buffer) (insert expansion) (indent-region (point-min) (point-max)) (font-lock-fontify-buffer))))))