diff options
Diffstat (limited to 'data/vim/patches/8.1.0971')
-rw-r--r-- | data/vim/patches/8.1.0971 | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0971 b/data/vim/patches/8.1.0971 new file mode 100644 index 000000000..6c37d5e91 --- /dev/null +++ b/data/vim/patches/8.1.0971 @@ -0,0 +1,242 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0971 +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.0971 +Problem: Failure for selecting quoted text object moves cursor. +Solution: Restore the Visual selection on failure. (Christian Brabandt, + closes #4024) +Files: src/search.c, src/testdir/test_textobjects.vim + + +*** ../vim-8.1.0970/src/search.c 2019-02-17 17:44:36.219875473 +0100 +--- src/search.c 2019-02-22 14:55:16.869702567 +0100 +*************** +*** 4359,4369 **** + int col_end; + int col_start = curwin->w_cursor.col; + int inclusive = FALSE; +! int vis_empty = TRUE; /* Visual selection <= 1 char */ +! int vis_bef_curs = FALSE; /* Visual starts before cursor */ +! int inside_quotes = FALSE; /* Looks like "i'" done before */ +! int selected_quote = FALSE; /* Has quote inside selection */ + int i; + + /* Correct cursor when 'selection' is "exclusive". */ + if (VIsual_active) +--- 4359,4370 ---- + int col_end; + int col_start = curwin->w_cursor.col; + int inclusive = FALSE; +! int vis_empty = TRUE; // Visual selection <= 1 char +! int vis_bef_curs = FALSE; // Visual starts before cursor +! int inside_quotes = FALSE; // Looks like "i'" done before +! int selected_quote = FALSE; // Has quote inside selection + int i; ++ int restore_vis_bef = FALSE; // restore VIsual on abort + + /* Correct cursor when 'selection' is "exclusive". */ + if (VIsual_active) +*************** +*** 4377,4388 **** + { + if (!vis_bef_curs) + { +! /* VIsual needs to be start of Visual selection. */ + pos_T t = curwin->w_cursor; + + curwin->w_cursor = VIsual; + VIsual = t; + vis_bef_curs = TRUE; + } + dec_cursor(); + } +--- 4378,4390 ---- + { + if (!vis_bef_curs) + { +! // VIsual needs to be the start of Visual selection. + pos_T t = curwin->w_cursor; + + curwin->w_cursor = VIsual; + VIsual = t; + vis_bef_curs = TRUE; ++ restore_vis_bef = TRUE; + } + dec_cursor(); + } +*************** +*** 4431,4437 **** + * opening quote. */ + col_start = find_next_quote(line, col_start + 1, quotechar, NULL); + if (col_start < 0) +! return FALSE; + col_end = find_next_quote(line, col_start + 1, quotechar, + curbuf->b_p_qe); + if (col_end < 0) +--- 4433,4439 ---- + * opening quote. */ + col_start = find_next_quote(line, col_start + 1, quotechar, NULL); + if (col_start < 0) +! goto abort_search; + col_end = find_next_quote(line, col_start + 1, quotechar, + curbuf->b_p_qe); + if (col_end < 0) +*************** +*** 4445,4451 **** + { + col_end = find_prev_quote(line, col_start, quotechar, NULL); + if (line[col_end] != quotechar) +! return FALSE; + col_start = find_prev_quote(line, col_end, quotechar, + curbuf->b_p_qe); + if (line[col_start] != quotechar) +--- 4447,4453 ---- + { + col_end = find_prev_quote(line, col_start, quotechar, NULL); + if (line[col_end] != quotechar) +! goto abort_search; + col_start = find_prev_quote(line, col_end, quotechar, + curbuf->b_p_qe); + if (line[col_start] != quotechar) +*************** +*** 4480,4491 **** + /* Find open quote character. */ + col_start = find_next_quote(line, col_start, quotechar, NULL); + if (col_start < 0 || col_start > first_col) +! return FALSE; + /* Find close quote character. */ + col_end = find_next_quote(line, col_start + 1, quotechar, + curbuf->b_p_qe); + if (col_end < 0) +! return FALSE; + /* If is cursor between start and end quote character, it is + * target text object. */ + if (col_start <= first_col && first_col <= col_end) +--- 4482,4493 ---- + /* Find open quote character. */ + col_start = find_next_quote(line, col_start, quotechar, NULL); + if (col_start < 0 || col_start > first_col) +! goto abort_search; + /* Find close quote character. */ + col_end = find_next_quote(line, col_start + 1, quotechar, + curbuf->b_p_qe); + if (col_end < 0) +! goto abort_search; + /* If is cursor between start and end quote character, it is + * target text object. */ + if (col_start <= first_col && first_col <= col_end) +*************** +*** 4502,4515 **** + /* No quote before the cursor, look after the cursor. */ + col_start = find_next_quote(line, col_start, quotechar, NULL); + if (col_start < 0) +! return FALSE; + } + + /* Find close quote character. */ + col_end = find_next_quote(line, col_start + 1, quotechar, + curbuf->b_p_qe); + if (col_end < 0) +! return FALSE; + } + + /* When "include" is TRUE, include spaces after closing quote or before +--- 4504,4517 ---- + /* No quote before the cursor, look after the cursor. */ + col_start = find_next_quote(line, col_start, quotechar, NULL); + if (col_start < 0) +! goto abort_search; + } + + /* Find close quote character. */ + col_end = find_next_quote(line, col_start + 1, quotechar, + curbuf->b_p_qe); + if (col_end < 0) +! goto abort_search; + } + + /* When "include" is TRUE, include spaces after closing quote or before +*************** +*** 4596,4601 **** +--- 4598,4617 ---- + } + + return OK; ++ ++ abort_search: ++ if (VIsual_active && *p_sel == 'e') ++ { ++ inc_cursor(); ++ if (restore_vis_bef) ++ { ++ pos_T t = curwin->w_cursor; ++ ++ curwin->w_cursor = VIsual; ++ VIsual = t; ++ } ++ } ++ return FALSE; + } + + #endif /* FEAT_TEXTOBJ */ +*** ../vim-8.1.0970/src/testdir/test_textobjects.vim 2019-01-09 23:00:58.001176090 +0100 +--- src/testdir/test_textobjects.vim 2019-02-22 14:56:31.897291834 +0100 +*************** +*** 52,57 **** +--- 52,82 ---- + bw! + endfunc + ++ func Test_quote_selection_selection_exclusive_abort() ++ new ++ set selection=exclusive ++ call setline(1, "'abzzc'") ++ let exp_curs = [0, 1, 6, 0] ++ call cursor(1,1) ++ exe 'norm! fcdvi"' ++ " make sure to end visual mode to have a clear state ++ exe "norm! \<esc>" ++ call assert_equal(exp_curs, getpos('.')) ++ call cursor(1,1) ++ exe 'norm! fcvi"' ++ exe "norm! \<esc>" ++ call assert_equal(exp_curs, getpos('.')) ++ call cursor(1,2) ++ exe 'norm! vfcoi"' ++ exe "norm! \<esc>" ++ let exp_curs = [0, 1, 2, 0] ++ let exp_visu = [0, 1, 7, 0] ++ call assert_equal(exp_curs, getpos('.')) ++ call assert_equal(exp_visu, getpos("'>")) ++ set selection&vim ++ bw! ++ endfunc ++ + " Tests for string and html text objects + func Test_string_html_objects() + enew! +*** ../vim-8.1.0970/src/version.c 2019-02-22 14:38:46.447452832 +0100 +--- src/version.c 2019-02-22 15:02:30.395260732 +0100 +*************** +*** 781,782 **** +--- 781,784 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 971, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +11. You find yourself typing "com" after every period when using a word + processor.com + + /// 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 /// |