I missed being able to do M-q to reindent the current defun, like in
ILISP. Here's the version I'm using. The patch is against a
month-old cvs snapshot, sorry.
--- slime.el.~1.258.~ Thu Apr 8 16:41:04 2004
+++ slime.el Sun May 2 17:02:35 2004
@@ -449,6 +449,7 @@
("\M-." slime-edit-definition :inferior t :sldb t)
("\M-," slime-pop-find-definition-stack :inferior t :sldb t)
("\C-q" slime-close-parens-at-point :prefixed t :inferior t)
+ ("\M-q" slime-reindent-defun :inferior t)
;; Evaluating
("\C-x\C-e" slime-eval-last-expression :inferior t)
("\C-x\M-e" slime-eval-last-expression-display-output :inferior t)
@@ -5523,6 +5524,29 @@
(get symbol 'slime-indent))
(put symbol 'slime-indent indent)
(put symbol 'common-lisp-indent-function indent)))))
+
+(defun slime-reindent-defun (&optional force-text-fill)
+ "Reindent the current defun, or refill the current paragraph.
+If point is inside a comment block, the text around point will be
+treated as a paragraph and will be filled with `fill-paragraph'.
+Otherwise, it will be treated as Lisp code, and the current defun
+will be reindented. If the current defun has unbalanced parens,
+an attempt will be made to fix it before reindenting.
+
+When given a prefix argument, the text around point will always
+be treated as a paragraph. This is useful for filling docstrings."
+ (interactive "P")
+ (save-excursion
+ (if (or force-text-fill (slime-beginning-of-comment))
+ (fill-paragraph nil)
+ (let ((start (progn (beginning-of-defun) (point)))
+ (end (ignore-errors (end-of-defun) (point))))
+ (unless end
+ (forward-paragraph)
+ (slime-close-all-sexp)
+ (end-of-defun)
+ (setf end (point)))
+ (indent-region start end)))))
;;; Test suite