To: vim_dev@googlegroups.com Subject: Patch 8.2.3698 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.3698 Problem: Match highlighting continues over breakindent. Solution: Stop before the end column. (closes #9242) Files: src/match.c, src/proto/match.pro, src/drawline.c, src/testdir/test_match.vim, src/testdir/dumps/Test_match_linebreak.dump *** ../vim-8.2.3697/src/match.c 2021-07-27 21:00:39.745712396 +0100 --- src/match.c 2021-11-29 18:59:34.048323596 +0000 *************** *** 703,708 **** --- 703,710 ---- * After end, check for start/end of next match. * When another match, have to check for start again. * Watch out for matching an empty string! + * "on_last_col" is set to TRUE with non-zero search_attr and the next column + * is endcol. * Return the updated search_attr. */ int *************** *** 715,721 **** int *has_match_conc UNUSED, int *match_conc UNUSED, int did_line_attr, ! int lcs_eol_one) { matchitem_T *cur; // points to the match list match_T *shl; // points to search_hl or a match --- 717,724 ---- int *has_match_conc UNUSED, int *match_conc UNUSED, int did_line_attr, ! int lcs_eol_one, ! int *on_last_col) { matchitem_T *cur; // points to the match list match_T *shl; // points to search_hl or a match *************** *** 832,838 **** --- 835,844 ---- else shl = &cur->hl; if (shl->attr_cur != 0) + { search_attr = shl->attr_cur; + *on_last_col = col + 1 >= shl->endcol; + } if (shl != search_hl && cur != NULL) cur = cur->next; } *** ../vim-8.2.3697/src/proto/match.pro 2020-06-28 12:17:07.551811006 +0100 --- src/proto/match.pro 2021-11-29 19:00:43.832204986 +0000 *************** *** 3,9 **** void init_search_hl(win_T *wp, match_T *search_hl); void prepare_search_hl(win_T *wp, match_T *search_hl, linenr_T lnum); int prepare_search_hl_line(win_T *wp, linenr_T lnum, colnr_T mincol, char_u **line, match_T *search_hl, int *search_attr); ! int update_search_hl(win_T *wp, linenr_T lnum, colnr_T col, char_u **line, match_T *search_hl, int *has_match_conc, int *match_conc, int did_line_attr, int lcs_eol_one); int get_prevcol_hl_flag(win_T *wp, match_T *search_hl, long curcol); void get_search_match_hl(win_T *wp, match_T *search_hl, long col, int *char_attr); void f_clearmatches(typval_T *argvars, typval_T *rettv); --- 3,9 ---- void init_search_hl(win_T *wp, match_T *search_hl); void prepare_search_hl(win_T *wp, match_T *search_hl, linenr_T lnum); int prepare_search_hl_line(win_T *wp, linenr_T lnum, colnr_T mincol, char_u **line, match_T *search_hl, int *search_attr); ! int update_search_hl(win_T *wp, linenr_T lnum, colnr_T col, char_u **line, match_T *search_hl, int *has_match_conc, int *match_conc, int did_line_attr, int lcs_eol_one, int *on_last_col); int get_prevcol_hl_flag(win_T *wp, match_T *search_hl, long curcol); void get_search_match_hl(win_T *wp, match_T *search_hl, long col, int *char_attr); void f_clearmatches(typval_T *argvars, typval_T *rettv); *** ../vim-8.2.3697/src/drawline.c 2021-11-24 16:19:41.389010087 +0000 --- src/drawline.c 2021-11-29 19:10:46.579211196 +0000 *************** *** 434,439 **** --- 434,440 ---- #if defined(FEAT_CONCEAL) || defined(FEAT_SEARCH_EXTRA) int match_conc = 0; // cchar for match functions + int on_last_col = FALSE; #endif #ifdef FEAT_CONCEAL int syntax_flags = 0; *************** *** 1382,1388 **** v = (long)(ptr - line); search_attr = update_search_hl(wp, lnum, (colnr_T)v, &line, &screen_search_hl, &has_match_conc, ! &match_conc, did_line_attr, lcs_eol_one); ptr = line + v; // "line" may have been changed // Do not allow a conceal over EOL otherwise EOL will be missed --- 1383,1390 ---- v = (long)(ptr - line); search_attr = update_search_hl(wp, lnum, (colnr_T)v, &line, &screen_search_hl, &has_match_conc, ! &match_conc, did_line_attr, lcs_eol_one, ! &on_last_col); ptr = line + v; // "line" may have been changed // Do not allow a conceal over EOL otherwise EOL will be missed *************** *** 2012,2017 **** --- 2014,2023 ---- if (n_extra < 0) n_extra = 0; } + if (on_last_col) + // Do not continue search/match highlighting over the + // line break. + search_attr = 0; if (c == TAB && n_extra + col > wp->w_width) # ifdef FEAT_VARTABS *** ../vim-8.2.3697/src/testdir/test_match.vim 2020-07-11 21:14:54.314422214 +0100 --- src/testdir/test_match.vim 2021-11-29 19:09:28.803337325 +0000 *************** *** 349,354 **** --- 349,371 ---- call delete('XscriptMatchCommon') endfunc + func Test_match_in_linebreak() + CheckRunVimInTerminal + + let lines =<< trim END + set breakindent linebreak breakat+=] + call printf('%s]%s', repeat('x', 50), repeat('x', 70))->setline(1) + call matchaddpos('ErrorMsg', [[1, 51]]) + END + call writefile(lines, 'XscriptMatchLinebreak') + let buf = RunVimInTerminal('-S XscriptMatchLinebreak', #{rows: 10}) + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_match_linebreak', {}) + + call StopVimInTerminal(buf) + call delete('XscriptMatchLinebreak') + endfunc + " Test for deleting matches outside of the screen redraw top/bottom lines " This should cause a redraw of those lines. func Test_matchdelete_redraw() *** ../vim-8.2.3697/src/testdir/dumps/Test_match_linebreak.dump 2021-11-29 19:17:23.302765479 +0000 --- src/testdir/dumps/Test_match_linebreak.dump 2021-11-29 19:09:37.827322662 +0000 *************** *** 0 **** --- 1,10 ---- + >x+0&#ffffff0@49|]+0#ffffff16#e000002| +0#0000000#ffffff0@23 + |x@69| @4 + |~+0#4040ff13&| @73 + |~| @73 + |~| @73 + |~| @73 + |~| @73 + |~| @73 + |~| @73 + | +0#0000000&@56|1|,|1| @10|A|l@1| *** ../vim-8.2.3697/src/version.c 2021-11-29 17:37:38.063265208 +0000 --- src/version.c 2021-11-29 19:08:44.399409558 +0000 *************** *** 759,760 **** --- 759,762 ---- { /* Add new patch number below this line */ + /**/ + 3698, /**/ -- There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. The other way is to make it so complicated that there are no obvious deficiencies. -C.A.R. Hoare /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///