diff options
Diffstat (limited to 'data/vim/patches/8.1.0671')
-rw-r--r-- | data/vim/patches/8.1.0671 | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0671 b/data/vim/patches/8.1.0671 new file mode 100644 index 000000000..6ce7786ec --- /dev/null +++ b/data/vim/patches/8.1.0671 @@ -0,0 +1,209 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.06 +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.0671 +Problem: Cursor in the wrong column after auto-formatting. +Solution: Check for deleting more spaces than adding. (closes #3748) +Files: src/ops.c, src/testdir/test_textformat.vim, src/mark.c, + src/proto/mark.pro, src/misc1.c + + +*** ../vim-8.1.0670/src/ops.c 2018-11-22 03:07:30.948596188 +0100 +--- src/ops.c 2018-12-31 23:28:36.009220367 +0100 +*************** +*** 4707,4712 **** +--- 4707,4714 ---- + */ + for (t = count - 1; ; --t) + { ++ int spaces_removed; ++ + cend -= currsize; + mch_memmove(cend, curr, (size_t)currsize); + if (spaces[t] > 0) +*************** +*** 4714,4721 **** + cend -= spaces[t]; + vim_memset(cend, ' ', (size_t)(spaces[t])); + } + mark_col_adjust(curwin->w_cursor.lnum + t, (colnr_T)0, (linenr_T)-t, +! (long)(cend - newp + spaces[t] - (curr - curr_start))); + if (t == 0) + break; + curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1)); +--- 4716,4728 ---- + cend -= spaces[t]; + vim_memset(cend, ' ', (size_t)(spaces[t])); + } ++ ++ // If deleting more spaces than adding, the cursor moves no more than ++ // what is added if it is inside these spaces. ++ spaces_removed = (curr - curr_start) - spaces[t]; ++ + mark_col_adjust(curwin->w_cursor.lnum + t, (colnr_T)0, (linenr_T)-t, +! (long)(cend - newp - spaces_removed), spaces_removed); + if (t == 0) + break; + curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1)); +*************** +*** 5225,5231 **** + { + (void)del_bytes((long)next_leader_len, FALSE, FALSE); + mark_col_adjust(curwin->w_cursor.lnum, (colnr_T)0, 0L, +! (long)-next_leader_len); + } else + #endif + if (second_indent > 0) /* the "leader" for FO_Q_SECOND */ +--- 5232,5238 ---- + { + (void)del_bytes((long)next_leader_len, FALSE, FALSE); + mark_col_adjust(curwin->w_cursor.lnum, (colnr_T)0, 0L, +! (long)-next_leader_len, 0); + } else + #endif + if (second_indent > 0) /* the "leader" for FO_Q_SECOND */ +*************** +*** 5236,5242 **** + { + (void)del_bytes(indent, FALSE, FALSE); + mark_col_adjust(curwin->w_cursor.lnum, +! (colnr_T)0, 0L, (long)-indent); + } + } + curwin->w_cursor.lnum--; +--- 5243,5249 ---- + { + (void)del_bytes(indent, FALSE, FALSE); + mark_col_adjust(curwin->w_cursor.lnum, +! (colnr_T)0, 0L, (long)-indent, 0); + } + } + curwin->w_cursor.lnum--; +*** ../vim-8.1.0670/src/testdir/test_textformat.vim 2018-01-31 19:23:08.000000000 +0100 +--- src/testdir/test_textformat.vim 2018-12-31 23:53:25.517721631 +0100 +*************** +*** 450,454 **** +--- 450,465 ---- + \ ], getline(1, '$')) + + unmap gg ++ set tw& + enew! + endfunc ++ ++ func Test_format_list_auto() ++ new ++ call setline(1, ['1. abc', '2. def', '3. ghi']) ++ set fo=tan ai bs=2 ++ call feedkeys("3G0lli\<BS>\<BS>x\<Esc>", 'tx') ++ call assert_equal('2. defx ghi', getline(2)) ++ bwipe! ++ set fo& ai& bs& ++ endfunc +*** ../vim-8.1.0670/src/mark.c 2018-10-25 13:31:33.829906902 +0200 +--- src/mark.c 2018-12-31 23:31:10.716045773 +0100 +*************** +*** 1211,1216 **** +--- 1211,1218 ---- + posp->lnum += lnum_amount; \ + if (col_amount < 0 && posp->col <= (colnr_T)-col_amount) \ + posp->col = 0; \ ++ else if (posp->col < spaces_removed) \ ++ posp->col = col_amount + spaces_removed; \ + else \ + posp->col += col_amount; \ + } \ +*************** +*** 1220,1232 **** + * Adjust marks in line "lnum" at column "mincol" and further: add + * "lnum_amount" to the line number and add "col_amount" to the column + * position. + */ + void + mark_col_adjust( + linenr_T lnum, + colnr_T mincol, + long lnum_amount, +! long col_amount) + { + int i; + int fnum = curbuf->b_fnum; +--- 1222,1237 ---- + * Adjust marks in line "lnum" at column "mincol" and further: add + * "lnum_amount" to the line number and add "col_amount" to the column + * position. ++ * "spaces_removed" is the number of spaces that were removed, matters when the ++ * cursor is inside them. + */ + void + mark_col_adjust( + linenr_T lnum, + colnr_T mincol, + long lnum_amount, +! long col_amount, +! int spaces_removed) + { + int i; + int fnum = curbuf->b_fnum; +*** ../vim-8.1.0670/src/proto/mark.pro 2018-05-17 13:52:43.000000000 +0200 +--- src/proto/mark.pro 2018-12-31 23:24:07.791228166 +0100 +*************** +*** 21,27 **** + void ex_changes(exarg_T *eap); + void mark_adjust(linenr_T line1, linenr_T line2, long amount, long amount_after); + void mark_adjust_nofold(linenr_T line1, linenr_T line2, long amount, long amount_after); +! void mark_col_adjust(linenr_T lnum, colnr_T mincol, long lnum_amount, long col_amount); + void cleanup_jumplist(win_T *wp, int loadfiles); + void copy_jumplist(win_T *from, win_T *to); + void free_jumplist(win_T *wp); +--- 21,27 ---- + void ex_changes(exarg_T *eap); + void mark_adjust(linenr_T line1, linenr_T line2, long amount, long amount_after); + void mark_adjust_nofold(linenr_T line1, linenr_T line2, long amount, long amount_after); +! void mark_col_adjust(linenr_T lnum, colnr_T mincol, long lnum_amount, long col_amount, int spaces_removed); + void cleanup_jumplist(win_T *wp, int loadfiles); + void copy_jumplist(win_T *from, win_T *to); + void free_jumplist(win_T *wp); +*** ../vim-8.1.0670/src/misc1.c 2018-12-30 11:38:49.933270875 +0100 +--- src/misc1.c 2018-12-31 23:24:32.519045003 +0100 +*************** +*** 1705,1711 **** + if (flags & OPENLINE_MARKFIX) + mark_col_adjust(curwin->w_cursor.lnum, + curwin->w_cursor.col + less_cols_off, +! 1L, (long)-less_cols); + } + else + changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col); +--- 1705,1711 ---- + if (flags & OPENLINE_MARKFIX) + mark_col_adjust(curwin->w_cursor.lnum, + curwin->w_cursor.col + less_cols_off, +! 1L, (long)-less_cols, 0); + } + else + changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col); +*** ../vim-8.1.0670/src/version.c 2018-12-31 22:09:53.106187962 +0100 +--- src/version.c 2018-12-31 23:56:32.647983178 +0100 +*************** +*** 801,802 **** +--- 801,804 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 671, + /**/ + +-- +You can't have everything. Where would you put it? + -- Steven Wright + + /// 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 /// |