diff options
Diffstat (limited to 'data/vim/patches/8.1.0125')
-rw-r--r-- | data/vim/patches/8.1.0125 | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0125 b/data/vim/patches/8.1.0125 new file mode 100644 index 000000000..697ddffba --- /dev/null +++ b/data/vim/patches/8.1.0125 @@ -0,0 +1,197 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0125 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0125 +Problem: Virtual edit replace with multi-byte fails at end of line. (Lukas + Werling) +Solution: use ins_char() to add the character. (Christian Brabandt, + closes #3114) Rename PCHAR() to PBYTE() to avoid mistakes like + this. +Files: src/ops.c, src/testdir/test_virtualedit.vim, src/macros.h + + +*** ../vim-8.1.0124/src/ops.c 2018-06-27 20:49:40.567862384 +0200 +--- src/ops.c 2018-06-28 19:20:39.671555865 +0200 +*************** +*** 2146,2151 **** +--- 2146,2170 ---- + #endif + + #if defined(FEAT_VISUALEXTRA) || defined(PROTO) ++ ++ # ifdef FEAT_MBYTE ++ /* ++ * Replace the character under the cursor with "c". ++ * This takes care of multi-byte characters. ++ */ ++ static void ++ replace_character(int c) ++ { ++ int n = State; ++ ++ State = REPLACE; ++ ins_char(c); ++ State = n; ++ /* Backup to the replaced character. */ ++ dec_cursor(); ++ } ++ ++ # endif + /* + * Replace a whole area with one character. + */ +*************** +*** 2331,2342 **** + * with a multi-byte and the other way around. */ + if (curwin->w_cursor.lnum == oap->end.lnum) + oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n); +! n = State; +! State = REPLACE; +! ins_char(c); +! State = n; +! /* Backup to the replaced character. */ +! dec_cursor(); + } + else + #endif +--- 2350,2356 ---- + * with a multi-byte and the other way around. */ + if (curwin->w_cursor.lnum == oap->end.lnum) + oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n); +! replace_character(c); + } + else + #endif +*************** +*** 2358,2364 **** + getvpos(&oap->end, end_vcol); + } + #endif +! PCHAR(curwin->w_cursor, c); + } + } + #ifdef FEAT_VIRTUALEDIT +--- 2372,2378 ---- + getvpos(&oap->end, end_vcol); + } + #endif +! PBYTE(curwin->w_cursor, c); + } + } + #ifdef FEAT_VIRTUALEDIT +*************** +*** 2377,2385 **** + curwin->w_cursor.col -= (virtcols + 1); + for (; virtcols >= 0; virtcols--) + { +! PCHAR(curwin->w_cursor, c); +! if (inc(&curwin->w_cursor) == -1) +! break; + } + } + #endif +--- 2391,2404 ---- + curwin->w_cursor.col -= (virtcols + 1); + for (; virtcols >= 0; virtcols--) + { +! #ifdef FEAT_MBYTE +! if ((*mb_char2len)(c) > 1) +! replace_character(c); +! else +! #endif +! PBYTE(curwin->w_cursor, c); +! if (inc(&curwin->w_cursor) == -1) +! break; + } + } + #endif +*************** +*** 2619,2625 **** + } + else + #endif +! PCHAR(*pos, nc); + return TRUE; + } + return FALSE; +--- 2638,2644 ---- + } + else + #endif +! PBYTE(*pos, nc); + return TRUE; + } + return FALSE; +*** ../vim-8.1.0124/src/testdir/test_virtualedit.vim 2018-04-25 21:58:46.000000000 +0200 +--- src/testdir/test_virtualedit.vim 2018-06-28 19:12:57.486074037 +0200 +*************** +*** 42,47 **** +--- 42,63 ---- + set virtualedit= + endfunc + ++ func Test_replace_end_of_line() ++ new ++ set virtualedit=all ++ call setline(1, range(20)) ++ exe "normal! gg2jv10lr-" ++ call assert_equal(["1", "-----------", "3"], getline(2,4)) ++ if has('multi_byte') ++ call setline(1, range(20)) ++ exe "normal! gg2jv10lr\<c-k>hh" ++ call assert_equal(["1", "───────────", "3"], getline(2,4)) ++ endif ++ ++ bwipe! ++ set virtualedit= ++ endfunc ++ + func Test_edit_CTRL_G() + new + set virtualedit=insert +*** ../vim-8.1.0124/src/macros.h 2018-04-10 18:37:19.000000000 +0200 +--- src/macros.h 2018-06-28 19:15:50.801135759 +0200 +*************** +*** 14,22 **** + */ + + /* +! * PCHAR(lp, c) - put character 'c' at position 'lp' + */ +! #define PCHAR(lp, c) (*(ml_get_buf(curbuf, (lp).lnum, TRUE) + (lp).col) = (c)) + + /* + * Position comparisons +--- 14,22 ---- + */ + + /* +! * PBYTE(lp, c) - put byte 'c' at position 'lp' + */ +! #define PBYTE(lp, c) (*(ml_get_buf(curbuf, (lp).lnum, TRUE) + (lp).col) = (c)) + + /* + * Position comparisons +*** ../vim-8.1.0124/src/version.c 2018-06-28 15:50:23.178568297 +0200 +--- src/version.c 2018-06-28 19:11:53.922415636 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 125, + /**/ + +-- +The coffee just wasn't strong enough to defend itself -- Tom Waits + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |