summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTaylor R Campbell <campbell@mumble.net>2011-03-20 18:37:04 +0000
committerTaylor R Campbell <campbell@mumble.net>2011-03-20 18:37:04 +0000
commitb7f234ab0e201b5e8366ad27ecd0fd70f5101b55 (patch)
treea36d4d46b8cbeb8c4fa01b483bbd7b974bb3d3ea
parent00110906360df491b3dc925ba11f156a98ee59d7 (diff)
Preserve column in `paredit-reindent-defun'.
Ignore-this: 9c3342808317128eefc0b83bf63cfb15 Also use `lisp-fill-paragraph' rather than `fill-paragraph'. Thanks to Eitan Postavsky for the suggestion. darcs-hash:20110320183704-00fcc-d64d8a2d2e06db8a206a0fadb3b9dbe0f8c10abf
-rw-r--r--paredit.el26
1 files changed, 21 insertions, 5 deletions
diff --git a/paredit.el b/paredit.el
index 23acb5f..637dd72 100644
--- a/paredit.el
+++ b/paredit.el
@@ -984,11 +984,22 @@ If the point is in a string or a comment, fill the paragraph instead,
(interactive "P")
(if (or (paredit-in-string-p)
(paredit-in-comment-p))
- (fill-paragraph argument)
- (save-excursion
- (end-of-defun)
- (beginning-of-defun)
- (indent-sexp))))
+ (lisp-fill-paragraph argument)
+ (let ((column (current-column))
+ (indentation (paredit-current-indentation)))
+ (save-excursion (end-of-defun) (beginning-of-defun) (indent-sexp))
+ ;; Preserve the point's position either in the indentation or in
+ ;; the code: if on code, move with the code; if in indentation,
+ ;; leave it in the indentation, either where it was (if that's
+ ;; still indentation) or at the end of the indentation (if the
+ ;; code moved far enough left).
+ (let ((indentation* (paredit-current-indentation)))
+ (goto-char
+ (+ (point-at-bol)
+ (cond ((not (< column indentation))
+ (+ column (- indentation* indentation)))
+ ((<= indentation* column) indentation*)
+ (t column))))))))
;;;; Comment Insertion
@@ -2479,6 +2490,11 @@ If no parse state is supplied, compute one from the beginning of the
(forward-sexp))))
t)
nil))
+
+(defun paredit-current-indentation ()
+ (save-excursion
+ (back-to-indentation)
+ (current-column)))
;;;; Initialization