about summary refs log tree commit diff
diff options
context:
space:
mode:
authorOliver Kiddle <opk@zsh.org>2014-11-15 21:27:44 +0100
committerOliver Kiddle <opk@zsh.org>2014-11-15 21:27:44 +0100
commitf26abf3a1733b31e2f24c15b07e7c64b1659d95d (patch)
tree4fe6f8bed1fd74dcfa7857d40f9882cb762da9bc
parent8505837f89e153bbfccf8e4763a3408c09062216 (diff)
downloadzsh-f26abf3a1733b31e2f24c15b07e7c64b1659d95d.tar.gz
zsh-f26abf3a1733b31e2f24c15b07e7c64b1659d95d.tar.xz
zsh-f26abf3a1733b31e2f24c15b07e7c64b1659d95d.zip
33695: fix various vi-indent problems and vi-swap-case on a blank line
-rw-r--r--ChangeLog5
-rw-r--r--Src/Zle/zle_vi.c14
-rw-r--r--Test/X02zlevi.ztst21
-rw-r--r--Test/comptest2
4 files changed, 37 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 2b132e1a4..ef22cb5eb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2014-11-15  Oliver Kiddle  <opk@zsh.org>
+
+	* 33695: Src/Zle/zle_vi.c, Test/X02zlevi.ztst, Test/comptest:
+	fix various vi-indent problems and vi-swap-case on a blank line
+
 2014-11-13  Peter Stephenson  <p.w.stephenson@ntlworld.com>
 
 	* Artur Penttinen: 19371 plus tweak: run-help helper for ip.
diff --git a/Src/Zle/zle_vi.c b/Src/Zle/zle_vi.c
index a60caa2b4..68b1c9211 100644
--- a/Src/Zle/zle_vi.c
+++ b/Src/Zle/zle_vi.c
@@ -700,10 +700,14 @@ viindent(UNUSED(char **args))
     }
     oldcs = zlecs;
     /* add a tab to the beginning of each line within range */
-    while (zlecs < c2) {
-	spaceinline(1);
-	zleline[zlecs] = '\t';
-	zlecs = findeol() + 1;
+    while (zlecs <= c2 + 1) {
+	if (zleline[zlecs] == '\n') { /* leave blank lines alone */
+	    ++zlecs;
+	} else {
+	    spaceinline(1);
+	    zleline[zlecs] = '\t';
+	    zlecs = findeol() + 1;
+	}
     }
     /* go back to the first line of the range */
     zlecs = oldcs;
@@ -830,6 +834,8 @@ viswapcase(UNUSED(char **args))
     if (n < 1)
 	return 1;
     eol = findeol();
+    if (zlecs == eol)
+	return 1;
     while (zlecs < eol && n--) {
 	if (ZC_ilower(zleline[zlecs]))
 	    zleline[zlecs] = ZC_toupper(zleline[zlecs]);
diff --git a/Test/X02zlevi.ztst b/Test/X02zlevi.ztst
index 4b9c4d91f..4210a72cc 100644
--- a/Test/X02zlevi.ztst
+++ b/Test/X02zlevi.ztst
@@ -49,6 +49,24 @@
 >BUFFER: one two
 >CURSOR: 3
 
+  zletest $'fi\eO\eOif\e2>j'
+0:don't indent blank lines
+>BUFFER: 	if
+>
+>	fi
+>CURSOR: 1
+
+  zletest $'\C-v\ti\e>>'
+0:additional indentation
+>BUFFER: 		i
+>CURSOR: 2
+
+  zletest $'one\eox\e>k'
+0:indent with one character on final line
+>BUFFER: 	one
+>	x
+>CURSOR: 1
+
   zletest $'one two\eyb'
 0:yank left moves the cursor
 >BUFFER: one two
@@ -104,12 +122,14 @@
   zletest $'err\eddahello\e"hddP'
 0:setting named register also sets unnamed register
 >BUFFER: hello
+>
 >CURSOR: 0
 
   zletest $'first\e"ay0ddasecond\e"Add"aP'
 0:appending to named register
 >BUFFER: firs
 >second
+>
 >CURSOR: 0
 
   zletest $'word\e"a"byy"bp'
@@ -133,6 +153,7 @@
   zletest $'first\e"addasecond\eddP'
 0:retrieve unnamed register after appending
 >BUFFER: second
+>
 >CURSOR: 0
 
   zletest $'Z\exayankee doodle\e"_db0"_yeP'
diff --git a/Test/comptest b/Test/comptest
index b6256cc09..96072fdcc 100644
--- a/Test/comptest
+++ b/Test/comptest
@@ -167,5 +167,5 @@ zletest () {
     return 1
   }
   # zpty_flush After zletest
-  print -lr "${(@)${(ps:\r\n:)log##*<WIDGET><finish>}[1,-2]}"
+  print -lr "${(@)${(@ps:\r\n:)log##*<WIDGET><finish>}[2,-2]}"
 }