summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0971
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0971')
-rw-r--r--data/vim/patches/8.1.0971242
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 ///