rendered paste body(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))))))