diff options
author | Taylor R Campbell <campbell@mumble.net> | 2011-03-20 18:37:04 +0000 |
---|---|---|
committer | Taylor R Campbell <campbell@mumble.net> | 2011-03-20 18:37:04 +0000 |
commit | b7f234ab0e201b5e8366ad27ecd0fd70f5101b55 (patch) | |
tree | a36d4d46b8cbeb8c4fa01b483bbd7b974bb3d3ea | |
parent | 00110906360df491b3dc925ba11f156a98ee59d7 (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.el | 26 |
1 files changed, 21 insertions, 5 deletions
@@ -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 |