summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-09-20 12:45:15 +0100
committerBram Moolenaar <Bram@vim.org>2022-09-20 12:45:15 +0100
commitbdedd2bcce3a59028c7504a397ff77d901b1b12a (patch)
treed9786a098da5bb06ad6aa9ea6aff8531abd81efe
parent7c046ae99ba85a4fdf1a546157e2ed6f12b79ea6 (diff)
downloadvim-git-9.0.0511.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.c4
-rw-r--r--src/testdir/test_messages.vim32
-rw-r--r--src/version.c2
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,