From 72914cd7f21570a725fdace9c9fe2b171ec4c107 Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Thu, 1 Oct 2020 21:46:16 -0400 Subject: vim-patch:8.2.1779: some debian changelog files are not recognized Problem: Some debian changelog files are not recognized. Solution: Add */debian/changelog. (Jason Franklin) https://github.com/vim/vim/commit/0022675aa362da0969666e48ced252b57ca1f79e --- runtime/filetype.vim | 2 +- src/nvim/testdir/test_filetype.vim | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/runtime/filetype.vim b/runtime/filetype.vim index c464e8cebd..7accc22b3d 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -313,7 +313,7 @@ au BufNewFile,BufRead *.css setf css au BufNewFile,BufRead *.con setf cterm " Changelog -au BufNewFile,BufRead changelog.Debian,changelog.dch,NEWS.Debian,NEWS.dch +au BufNewFile,BufRead changelog.Debian,changelog.dch,NEWS.Debian,NEWS.dch,*/debian/changelog \ setf debchangelog au BufNewFile,BufRead [cC]hange[lL]og diff --git a/src/nvim/testdir/test_filetype.vim b/src/nvim/testdir/test_filetype.vim index 9f8939f2f6..c7ca682c8c 100644 --- a/src/nvim/testdir/test_filetype.vim +++ b/src/nvim/testdir/test_filetype.vim @@ -128,6 +128,7 @@ let s:filename_checks = { \ 'dart': ['file.dart', 'file.drt'], \ 'datascript': ['file.ds'], \ 'dcd': ['file.dcd'], + \ 'debchangelog': ['changelog.Debian', 'changelog.dch', 'NEWS.Debian', 'NEWS.dch', '/debian/changelog'], \ 'debcontrol': ['/debian/control'], \ 'debsources': ['/etc/apt/sources.list', '/etc/apt/sources.list.d/file.list'], \ 'def': ['file.def'], -- cgit From 25513049b3c3f9276dfa560ef0920f3ed6cc5f2f Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Thu, 1 Oct 2020 21:47:35 -0400 Subject: vim-patch:8.2.1780: statusline not updated when splitting windows Problem: Statusline not updated when splitting windows. Solution: Call status_redraw_all(). (Jason Franklin, closes vim/vim#5496) https://github.com/vim/vim/commit/668008be66326ed9e5b1122abede34ed3d2de2d8 --- src/nvim/testdir/test_statusline.vim | 19 +++++++++++++++++++ src/nvim/window.c | 8 +++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/nvim/testdir/test_statusline.vim b/src/nvim/testdir/test_statusline.vim index 8c81ec3431..7efd181d04 100644 --- a/src/nvim/testdir/test_statusline.vim +++ b/src/nvim/testdir/test_statusline.vim @@ -412,3 +412,22 @@ func Test_statusline_removed_group() call StopVimInTerminal(buf) call delete('XTest_statusline') endfunc + +func Test_statusline_after_split_vsplit() + only + + " Make the status line of each window show the window number. + set ls=2 stl=%{winnr()} + + split | redraw + vsplit | redraw + + " The status line of the third window should read '3' here. + call assert_equal('3', nr2char(screenchar(&lines - 1, 1))) + + only + set ls& stl& +endfunc + + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/window.c b/src/nvim/window.c index 6608deb231..e53570edd8 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -1490,13 +1490,11 @@ int win_split_ins(int size, int flags, win_T *new_wp, int dir) if (flags & (WSP_TOP | WSP_BOT)) (void)win_comp_pos(); - /* - * Both windows need redrawing - */ + // Both windows need redrawing. Update all status lines, in case they + // show something related to the window count or position. redraw_win_later(wp, NOT_VALID); - wp->w_redr_status = TRUE; redraw_win_later(oldwin, NOT_VALID); - oldwin->w_redr_status = TRUE; + status_redraw_all(); if (need_status) { msg_row = Rows - 1; -- cgit From 2000e1621d5e529d660dc0a7534f0884b6179c8b Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Fri, 2 Oct 2020 22:46:54 -0400 Subject: vim-patch:8.2.1787: crash with 'incsearch' and very long line Problem: Crash with 'incsearch' and very long line. Solution: Check whether regprog becomes NULL. (closes vim/vim#7063) https://github.com/vim/vim/commit/795aaa1e84d76a6fe066694de9876b8a21cbe40c N/A patches for version.c: vim-patch:8.2.1784: commits are not scanned for security problems Problem: commits are not scanned for security problems Solution: Enable Github code scanning. (Christian Brabandt, closes vim/vim#7057) https://github.com/vim/vim/commit/fa79be6b10e1d34fd697a56e85f6c0ce101f3d62 --- src/nvim/search.c | 27 ++++++++++++++++++++++----- src/nvim/testdir/test_search.vim | 15 +++++++++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/nvim/search.c b/src/nvim/search.c index b053459c7f..ea2107c5c7 100644 --- a/src/nvim/search.c +++ b/src/nvim/search.c @@ -651,6 +651,10 @@ int searchit( colnr_T col = at_first_line && (options & SEARCH_COL) ? pos->col : 0; nmatched = vim_regexec_multi(®match, win, buf, lnum, col, tm, timed_out); + // vim_regexec_multi() may clear "regprog" + if (regmatch.regprog == NULL) { + break; + } // Abort searching on an error (e.g., out of stack). if (called_emsg || (timed_out != NULL && *timed_out)) { break; @@ -722,6 +726,10 @@ int searchit( match_ok = false; break; } + // vim_regexec_multi() may clear "regprog" + if (regmatch.regprog == NULL) { + break; + } matchpos = regmatch.startpos[0]; endpos = regmatch.endpos[0]; submatch = first_submatch(®match); @@ -811,10 +819,13 @@ int searchit( } break; } - - /* Need to get the line pointer again, a - * multi-line search may have made it invalid. */ - ptr = ml_get_buf(buf, lnum + matchpos.lnum, FALSE); + // vim_regexec_multi() may clear "regprog" + if (regmatch.regprog == NULL) { + break; + } + // Need to get the line pointer again, a + // multi-line search may have made it invalid. + ptr = ml_get_buf(buf, lnum + matchpos.lnum, false); } /* @@ -891,6 +902,11 @@ int searchit( } at_first_line = FALSE; + // vim_regexec_multi() may clear "regprog" + if (regmatch.regprog == NULL) { + break; + } + // Stop the search if wrapscan isn't set, "stop_lnum" is // specified, after an interrupt, after a match and after looping // twice. @@ -4243,7 +4259,8 @@ is_zero_width(char_u *pattern, int move, pos_T *cur, Direction direction) if (nmatched != 0) { break; } - } while (direction == FORWARD + } while (regmatch.regprog != NULL + && direction == FORWARD ? regmatch.startpos[0].col < pos.col : regmatch.startpos[0].col > pos.col); diff --git a/src/nvim/testdir/test_search.vim b/src/nvim/testdir/test_search.vim index 211fc73562..5db23c22a8 100644 --- a/src/nvim/testdir/test_search.vim +++ b/src/nvim/testdir/test_search.vim @@ -981,6 +981,21 @@ func Test_incsearch_substitute() call Incsearch_cleanup() endfunc +func Test_incsearch_substitute_long_line() + throw 'skipped: Nvim does not support test_override()' + new + call test_override("char_avail", 1) + set incsearch + + call repeat('x', 100000)->setline(1) + call feedkeys(':s/\%c', 'xt') + redraw + call feedkeys("\", 'xt') + + call Incsearch_cleanup() + bwipe! +endfunc + func Test_search_undefined_behaviour() if !has("terminal") return -- cgit From 970d6ee0d1fafb92eeaa56a3d767e704c6ef42c2 Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Fri, 2 Oct 2020 01:05:12 -0400 Subject: vim-patch:8.1.2143: cannot see each command even when 'verbose' is set Problem: Cannot see each command even when 'verbose' is set. Solution: List each command when 'verbose' is at least 16. https://github.com/vim/vim/commit/4facea310c2788c88f021b262658b847381a50a8 Cherry-pick Test_tselect() from patch 8.1.2141. It requires screendump so it won't run. I cannot port it to a lua screen test. --- src/nvim/ex_docmd.c | 36 ++++++++++++++++++++++++++---------- src/nvim/testdir/test_cmdline.vim | 23 +++++++++++++++++++++++ src/nvim/testdir/test_tagjump.vim | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 10 deletions(-) diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 7bb4bd32a3..a4ed86e4c0 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -258,6 +258,27 @@ void do_exmode(int improved) msg_scroll = save_msg_scroll; } +// Print the executed command for when 'verbose' is set. +// When "lnum" is 0 only print the command. +static void msg_verbose_cmd(linenr_T lnum, char_u *cmd) + FUNC_ATTR_NONNULL_ALL +{ + no_wait_return++; + verbose_enter_scroll(); + + if (lnum == 0) { + smsg(_("Executing: %s"), cmd); + } else { + smsg(_("line %" PRIdLINENR ": %s"), lnum, cmd); + } + if (msg_silent == 0) { + msg_puts("\n"); // don't overwrite this + } + + verbose_leave_scroll(); + no_wait_return--; +} + /* * Execute a simple command line. Used for translated commands like "*". */ @@ -568,16 +589,7 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline, } if (p_verbose >= 15 && sourcing_name != NULL) { - ++no_wait_return; - verbose_enter_scroll(); - - smsg(_("line %" PRIdLINENR ": %s"), sourcing_lnum, cmdline_copy); - if (msg_silent == 0) { - msg_puts("\n"); // don't overwrite this either - } - - verbose_leave_scroll(); - --no_wait_return; + msg_verbose_cmd(sourcing_lnum, cmdline_copy); } /* @@ -1269,6 +1281,10 @@ static char_u * do_one_cmd(char_u **cmdlinep, goto doend; } + if (p_verbose >= 16) { + msg_verbose_cmd(0, *cmdlinep); + } + // 1. Skip comment lines and leading white space and colons. // 2. Handle command modifiers. diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim index f8d84f1a49..27db957149 100644 --- a/src/nvim/testdir/test_cmdline.vim +++ b/src/nvim/testdir/test_cmdline.vim @@ -1,5 +1,8 @@ " Tests for editing the command line. +source check.vim +source screendump.vim + func Test_complete_tab() call writefile(['testfile'], 'Xtestfile') call feedkeys(":e Xtestf\t\r", "tx") @@ -718,6 +721,26 @@ func Test_verbosefile() call delete('Xlog') endfunc +func Test_verbose_option() + CheckScreendump + + let lines =<< trim [SCRIPT] + command DoSomething echo 'hello' |set ts=4 |let v = '123' |echo v + call feedkeys("\r", 't') " for the hit-enter prompt + set verbose=20 + [SCRIPT] + call writefile(lines, 'XTest_verbose') + + let buf = RunVimInTerminal('-S XTest_verbose', {'rows': 12}) + call term_wait(buf, 100) + call term_sendkeys(buf, ":DoSomething\") + call VerifyScreenDump(buf, 'Test_verbose_option_1', {}) + + " clean up + call StopVimInTerminal(buf) + call delete('XTest_verbose') +endfunc + func Test_setcmdpos() func InsertTextAtPos(text, pos) call assert_equal(0, setcmdpos(a:pos)) diff --git a/src/nvim/testdir/test_tagjump.vim b/src/nvim/testdir/test_tagjump.vim index 6abe5b7c89..7057cdefb2 100644 --- a/src/nvim/testdir/test_tagjump.vim +++ b/src/nvim/testdir/test_tagjump.vim @@ -1,5 +1,8 @@ " Tests for tagjump (tags and special searches) +source check.vim +source screendump.vim + " SEGV occurs in older versions. (At least 7.4.1748 or older) func Test_ptag_with_notagstack() set notagstack @@ -551,6 +554,37 @@ func Test_tag_line_toolong() let &verbose = old_vbs endfunc +" Check that using :tselect does not run into the hit-enter prompt. +" Requires a terminal to trigger that prompt. +func Test_tselect() + CheckScreendump + + call writefile([ + \ 'main Xtest.h /^void test();$/;" f', + \ 'main Xtest.c /^int main()$/;" f', + \ 'main Xtest.x /^void test()$/;" f', + \ ], 'Xtags') + cal writefile([ + \ 'int main()', + \ 'void test()', + \ ], 'Xtest.c') + + let lines =<< trim [SCRIPT] + set tags=Xtags + [SCRIPT] + call writefile(lines, 'XTest_tselect') + let buf = RunVimInTerminal('-S XTest_tselect', {'rows': 10, 'cols': 50}) + + call term_wait(buf, 100) + call term_sendkeys(buf, ":tselect main\2\") + call VerifyScreenDump(buf, 'Test_tselect_1', {}) + + call StopVimInTerminal(buf) + call delete('Xtags') + call delete('Xtest.c') + call delete('XTest_tselect') +endfunc + func Test_tagline() call writefile([ \ 'provision Xtest.py /^ def provision(self, **kwargs):$/;" m line:1 language:Python class:Foo', -- cgit From 86ab4a1cb4cbf377d2ddf90f785d811a0be50cfc Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Fri, 2 Oct 2020 01:22:30 -0400 Subject: vim-patch:8.2.0841: 'verbose' value 16 causes duplicate output Problem: 'verbose' value 16 causes duplicate output. Solution: Combine levels 15 and 16 into one message. (Christian Brabandt, closes vim/vim#6153) https://github.com/vim/vim/commit/823654bc06c847af20967d41db32d592aba416cb --- runtime/doc/options.txt | 4 +++- src/nvim/ex_docmd.c | 6 +----- src/nvim/testdir/test_cmdline.vim | 1 + test/functional/ui/cmdline_spec.lua | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index bd61d113fb..beb5e9f4c2 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -6505,7 +6505,9 @@ A jump table for the options with a short description can be found at |Q_op|. >= 12 Every executed function. >= 13 When an exception is thrown, caught, finished, or discarded. >= 14 Anything pending in a ":finally" clause. - >= 15 Every executed Ex command (truncated at 200 characters). + >= 15 Every executed Ex command from a script (truncated at 200 + characters). + >= 16 Every executed Ex command This option can also be set with the "-V" argument. See |-V|. This option is also set by the |:verbose| command. diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index a4ed86e4c0..ccaa0b0e52 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -588,7 +588,7 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline, } } - if (p_verbose >= 15 && sourcing_name != NULL) { + if ((p_verbose >= 15 && sourcing_name != NULL) || p_verbose >= 16) { msg_verbose_cmd(sourcing_lnum, cmdline_copy); } @@ -1281,10 +1281,6 @@ static char_u * do_one_cmd(char_u **cmdlinep, goto doend; } - if (p_verbose >= 16) { - msg_verbose_cmd(0, *cmdlinep); - } - // 1. Skip comment lines and leading white space and colons. // 2. Handle command modifiers. diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim index 27db957149..871143699a 100644 --- a/src/nvim/testdir/test_cmdline.vim +++ b/src/nvim/testdir/test_cmdline.vim @@ -722,6 +722,7 @@ func Test_verbosefile() endfunc func Test_verbose_option() + " See test/functional/ui/cmdline_spec.lua CheckScreendump let lines =<< trim [SCRIPT] diff --git a/test/functional/ui/cmdline_spec.lua b/test/functional/ui/cmdline_spec.lua index 21c01b3458..01f0d8a4d7 100644 --- a/test/functional/ui/cmdline_spec.lua +++ b/test/functional/ui/cmdline_spec.lua @@ -3,6 +3,7 @@ local Screen = require('test.functional.ui.screen') local clear, feed = helpers.clear, helpers.feed local source = helpers.source local command = helpers.command +local feed_command = helpers.feed_command local function new_screen(opt) local screen = Screen.new(25, 5) @@ -842,3 +843,34 @@ describe('cmdline redraw', function() ]], unchanged=true} end) end) + +describe('cmdline', function() + before_each(function() + clear() + end) + + it('prints every executed Ex command if verbose >= 16', function() + local screen = Screen.new(50, 12) + screen:attach() + source([[ + command DoSomething echo 'hello' |set ts=4 |let v = '123' |echo v + call feedkeys("\r", 't') " for the hit-enter prompt + set verbose=20 + ]]) + feed_command('DoSomething') + screen:expect([[ + | + ~ | + | + Executing: DoSomething | + Executing: echo 'hello' |set ts=4 |let v = '123' || + echo v | + hello | + Executing: set ts=4 |let v = '123' |echo v | + Executing: let v = '123' |echo v | + Executing: echo v | + 123 | + Press ENTER or type command to continue^ | + ]]) + end) +end) -- cgit