diff options
-rw-r--r-- | paredit.el | 18 | ||||
-rw-r--r-- | test.el | 10 |
2 files changed, 22 insertions, 6 deletions
@@ -423,7 +423,7 @@ Paredit behaves badly if parentheses are unbalanced, so exercise "|body")) ("M-?" paredit-convolute-sexp ("(let ((x 5) (y 3)) (frob |(zwonk)) (wibblethwop))" - "|(frob (let ((x 5) (y 3)) (zwonk) (wibblethwop)))")) + "(frob |(let ((x 5) (y 3)) (zwonk) (wibblethwop)))")) "Barfage & Slurpage" (("C-)" "C-<right>") @@ -2124,6 +2124,9 @@ If the point is on an S-expression, such as a string or a symbol, not (let* ((indent-start (point)) (indent-end (save-excursion (insert sexps) (point)))) (indent-region indent-start indent-end nil))))) + +;;; The effects of convolution on the surrounding whitespace are pretty +;;; random. If you have better suggestions, please let me know. (defun paredit-convolute-sexp (&optional n) "Convolute S-expressions. @@ -2134,7 +2137,7 @@ With a prefix argument N, move up N lists before wrapping." (interactive "p") (paredit-lose-if-not-in-sexp 'paredit-convolute-sexp) ;; Make sure we can move up before destroying anything. - (save-excursion (backward-up-list) (backward-up-list)) + (save-excursion (backward-up-list n) (backward-up-list)) (let (open close) ;++ Is this a good idea? (let ((prefix (let ((end (point))) @@ -2146,12 +2149,17 @@ With a prefix argument N, move up N lists before wrapping." (setq close (char-before)) (backward-delete-char 1)) (setq open (char-after)) - (delete-region (point) end))))) + (delete-region (point) end) + ;; I'm not sure this makes sense... + (if (not (eolp)) (just-one-space)))))) (backward-up-list n) (paredit-insert-pair 1 open close 'goto-char) (insert prefix) - (backward-up-list) - (paredit-ignore-sexp-errors (indent-sexp))))) + ;; I'm not sure this makes sense either... + (if (not (eolp)) (just-one-space)) + (save-excursion + (backward-up-list) + (paredit-ignore-sexp-errors (indent-sexp)))))) (defun paredit-splice-string (argument) (let ((original-point (point)) @@ -359,4 +359,12 @@ Four arguments: the paredit command, the text of the buffer ("(paredit-canary| ;\n)\n(lose)"))) (paredit-test 'paredit-convolute-sexp - '(("(let ((x 5) (y 3)) |(frob (zwonk)) (wibblethwop))" error))) + '(("(let ((x 5) (y 3)) |(frob (zwonk)) (wibblethwop))" error) + ("(let ((x 0)) (progn| x))" "(progn |(let ((x 0)) x))") + ;; Should the space be left inside the LET? In both cases? + ("(let ((x 0)) (progn| ))" "(progn |(let ((x 0)) ))") + ("(let ((x 0)) (progn|))" "(progn |(let ((x 0)) ))") + ;; One space should definitely be left between A and B here. + ("(let ((x 0)) a (progn|) b)" "(progn |(let ((x 0)) a b))") + ("(let ((x 0)) a (progn| ) b)" "(progn |(let ((x 0)) a b))") + ("(let ((x 0)) a (progn |) b)" "(progn |(let ((x 0)) a b))"))) |