From f26abf3a1733b31e2f24c15b07e7c64b1659d95d Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Sat, 15 Nov 2014 21:27:44 +0100 Subject: 33695: fix various vi-indent problems and vi-swap-case on a blank line --- ChangeLog | 5 +++++ Src/Zle/zle_vi.c | 14 ++++++++++---- Test/X02zlevi.ztst | 21 +++++++++++++++++++++ Test/comptest | 2 +- 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 + + * 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 * 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##*}[1,-2]}" + print -lr "${(@)${(@ps:\r\n:)log##*}[2,-2]}" } -- cgit 1.4.1