diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Src/Zle/zle_utils.c | 5 | ||||
-rw-r--r-- | Test/X02zlevi.ztst | 7 |
3 files changed, 15 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index 64d0820be..5609754f5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-11-13 Oliver Kiddle <opk@zsh.org> + + * 33669: Src/Zle/zle_utils.c, Test/X02zlevi.ztst: allow an empty + line to be yanked with yy by allocating 1 byte instead of 0 + 2014-11-11 Peter Stephenson <p.w.stephenson@ntlworld.com> * 33658: Doc/Zsh/options.yo: AUTO_CD depends on SHIN_STDIN. diff --git a/Src/Zle/zle_utils.c b/Src/Zle/zle_utils.c index 03a2bdca7..f56063e82 100644 --- a/Src/Zle/zle_utils.c +++ b/Src/Zle/zle_utils.c @@ -916,7 +916,7 @@ cut(int i, int ct, int flags) void cuttext(ZLE_STRING_T line, int ct, int flags) { - if (!ct || zmod.flags & MOD_NULL) + if (!(ct || vilinerange) || zmod.flags & MOD_NULL) return; UNMETACHECK(); @@ -989,8 +989,9 @@ cuttext(ZLE_STRING_T line, int ct, int flags) cutbuf.buf = s; cutbuf.len += ct; } else { + /* don't alloc 0 bytes; length 0 occurs for blank lines in vi mode */ cutbuf.buf = realloc((char *)cutbuf.buf, - (cutbuf.len + ct) * ZLE_CHAR_SIZE); + (cutbuf.len + (ct ? ct : 1)) * ZLE_CHAR_SIZE); ZS_memcpy(cutbuf.buf + cutbuf.len, line, ct); cutbuf.len += ct; } diff --git a/Test/X02zlevi.ztst b/Test/X02zlevi.ztst index 7e5385bfe..4b9c4d91f 100644 --- a/Test/X02zlevi.ztst +++ b/Test/X02zlevi.ztst @@ -30,6 +30,13 @@ >BUFFER: one >CURSOR: 0 + zletest $'1\eo\eyya2\epa3' +0:yank and paste blank line +>BUFFER: 1 +>2 +>3 +>CURSOR: 5 + zletest $' four\eO\C-v\tthree\eO two\eOone\e3J' 0:join lines with line count >BUFFER: one two three |