changeset 5288:46cf49cc9289 v7.4b.020

updated for version 7.4b.020 Problem: "g~ap" changes first character of next paragraph. (Manuel Ortega) Solution: Avoid subtracting (0 - 1) from todo. (Mike Williams)
author Bram Moolenaar <bram@vim.org>
date Fri, 09 Aug 2013 19:48:40 +0200
parents f6cacdc34495
children d8a5b8db4b5a
files src/ops.c src/testdir/test82.in src/testdir/test82.ok src/version.c
diffstat 4 files changed, 21 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ops.c
+++ b/src/ops.c
@@ -2429,8 +2429,13 @@ swapchars(op_type, pos, length)
     {
 # ifdef FEAT_MBYTE
 	if (has_mbyte)
+	{
+	    int len = (*mb_ptr2len)(ml_get_pos(pos));
+
 	    /* we're counting bytes, not characters */
-	    todo -= (*mb_ptr2len)(ml_get_pos(pos)) - 1;
+	    if (len > 0)
+		todo -= len - 1;
+	}
 # endif
 	did_change |= swapchar(op_type, pos);
 	if (inc(pos) == -1)    /* at end of file */
--- a/src/testdir/test82.in
+++ b/src/testdir/test82.in
@@ -1,4 +1,5 @@
 Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
+Also test "g~ap".
 
 STARTTEST
 :so small.vim
@@ -88,6 +89,15 @@ ggdG
 :for n in range(0x80, 0xBF) | call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
 :for n in range(0xC0, 0xFF) | call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
 :call append(0, printf('%d checks passed', b:passed))
+:"
+:" test that g~ap changes one paragraph only.
+:new
+iabcd
+
+defggg0g~ap:let lns = getline(1,3)
+:q!
+:call append(line('$'), lns)
+:"
 :wq! test.out
 ENDTEST
 
--- a/src/testdir/test82.ok
+++ b/src/testdir/test82.ok
@@ -1,2 +1,5 @@
 3732 checks passed
 
+ABCD
+
+defg
--- a/src/version.c
+++ b/src/version.c
@@ -728,6 +728,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    20,
+/**/
     19,
 /**/
     18,