summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenrik Lissner <henrik@lissner.net>2016-02-23 10:13:31 -0500
committerHenrik Lissner <henrik@lissner.net>2016-02-23 10:13:31 -0500
commit8b2ca83b7cdc4ef76aa9a1af7797b70d1cb25a5e (patch)
treec0d2ee9f70c9883dca35af0dc9efeb11427fc0a8
parentbfa438cf62e29074b3fc68c582765a7e0f9907e4 (diff)
Fix #52, #39, and #5 (linewise surrounding)
-rwxr-xr-xevil-surround.el28
1 files changed, 19 insertions, 9 deletions
diff --git a/evil-surround.el b/evil-surround.el
index 5aed32b..a66e0ab 100755
--- a/evil-surround.el
+++ b/evil-surround.el
@@ -286,22 +286,31 @@ Becomes this:
(let* ((overlay (make-overlay beg end nil nil t))
(pair (evil-surround-pair char))
(open (car pair))
- (close (cdr pair)))
+ (close (cdr pair))
+ (beg-pos (overlay-start overlay)))
(unwind-protect
(progn
- (goto-char (overlay-start overlay))
-
+ (goto-char beg-pos)
(cond ((eq type 'block)
(evil-surround-block beg end char))
((eq type 'line)
+ (back-to-indentation)
+ (setq beg-pos (point))
(insert open)
- (newline-and-indent)
- (indent-region (overlay-start overlay) (overlay-end overlay))
+ (when force-new-line (newline-and-indent))
(goto-char (overlay-end overlay))
+ (if force-new-line
+ (when (eobp)
+ (newline-and-indent))
+ (backward-char)
+ (evil-last-non-blank)
+ (forward-char))
(insert close)
- (indent-according-to-mode)
- (newline))
+ (when (or force-new-line
+ (/= (line-number-at-pos) (line-number-at-pos beg-pos)))
+ (indent-region beg-pos (point))
+ (newline-and-indent)))
(force-new-line
(insert open)
@@ -309,13 +318,14 @@ Becomes this:
(newline-and-indent)
(goto-char (overlay-end overlay))
(newline-and-indent)
- (insert close))
+ (insert close)
+ (indent-region beg-pos (point)))
(t
(insert open)
(goto-char (overlay-end overlay))
(insert close)))
- (goto-char (overlay-start overlay)))
+ (goto-char beg-pos))
(delete-overlay overlay)))))
(evil-define-operator evil-Surround-region (beg end type char)