diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-09-20 12:45:15 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-09-20 12:45:15 +0100 |
commit | bdedd2bcce3a59028c7504a397ff77d901b1b12a (patch) | |
tree | d9786a098da5bb06ad6aa9ea6aff8531abd81efe | |
parent | 7c046ae99ba85a4fdf1a546157e2ed6f12b79ea6 (diff) | |
download | vim-git-bdedd2bcce3a59028c7504a397ff77d901b1b12a.tar.gz |
patch 9.0.0511: unnecessary scrolling for message of only one linev9.0.0511
Problem: Unnecessary scrolling for message of only one line.
Solution: Only set msg_scroll when needed. (closes #11178)
-rw-r--r-- | src/message.c | 4 | ||||
-rw-r--r-- | src/testdir/test_messages.vim | 32 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 36 insertions, 2 deletions
diff --git a/src/message.c b/src/message.c index 57197c1a8..9c3554303 100644 --- a/src/message.c +++ b/src/message.c @@ -535,11 +535,11 @@ msg_source(int attr) return; recursive = TRUE; - msg_scroll = TRUE; // this will take more than one line ++no_wait_return; p = get_emsg_source(); if (p != NULL) { + msg_scroll = TRUE; // this will take more than one line msg_attr((char *)p, attr); vim_free(p); } @@ -767,8 +767,8 @@ emsg_core(char_u *s) #endif /* * Display name and line number for the source of the error. - * Sets "msg_scroll". */ + msg_scroll = TRUE; msg_source(attr); /* diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim index e35fb0c38..140f1c351 100644 --- a/src/testdir/test_messages.vim +++ b/src/testdir/test_messages.vim @@ -166,6 +166,38 @@ func Test_echospace() set ruler& showcmd& endfunc +func Test_warning_scroll() + CheckRunVimInTerminal + let lines =<< trim END + call test_override('ui_delay', 50) + set noruler + set readonly + undo + END + call writefile(lines, 'XTestWarningScroll', 'D') + let buf = RunVimInTerminal('', #{rows: 8}) + + " When the warning comes from a script, messages are scrolled so that the + " stacktrace is visible. + call term_sendkeys(buf, ":source XTestWarningScroll\n") + " only match the final colon in the line that shows the source + call WaitForAssert({-> assert_match(':$', term_getline(buf, 5))}) + call WaitForAssert({-> assert_equal('line 4:W10: Warning: Changing a readonly file', term_getline(buf, 6))}) + call WaitForAssert({-> assert_equal('Already at oldest change', term_getline(buf, 7))}) + call WaitForAssert({-> assert_equal('Press ENTER or type command to continue', term_getline(buf, 8))}) + call term_sendkeys(buf, "\n") + + " When the warning does not come from a script, messages are not scrolled. + call term_sendkeys(buf, ":enew\n") + call term_sendkeys(buf, ":set readonly\n") + call term_sendkeys(buf, 'u') + call WaitForAssert({-> assert_equal('W10: Warning: Changing a readonly file', term_getline(buf, 8))}) + call WaitForAssert({-> assert_equal('Already at oldest change', term_getline(buf, 8))}) + + " clean up + call StopVimInTerminal(buf) +endfunc + " Test more-prompt (see :help more-prompt). func Test_message_more() CheckRunVimInTerminal diff --git a/src/version.c b/src/version.c index d7d5bd393..c6f76acb8 100644 --- a/src/version.c +++ b/src/version.c @@ -700,6 +700,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 511, +/**/ 510, /**/ 509, |