From 3d30af8783bf43fbfece641ec81ad8d2f01b3735 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 13 Oct 2020 22:15:56 +0200 Subject: patch 8.2.1844: using "q" at the more prompt doesn't stop a long message Problem: Using "q" at the more prompt doesn't stop a long message. Solution: Check for "got_int". (closes #7122) --- src/message.c | 10 ++++++++-- src/testdir/dumps/Test_quit_long_message.dump | 6 ++++++ src/testdir/test_messages.vim | 17 +++++++++++++++++ src/version.c | 2 ++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 src/testdir/dumps/Test_quit_long_message.dump (limited to 'src') diff --git a/src/message.c b/src/message.c index c52795286b..42641211ce 100644 --- a/src/message.c +++ b/src/message.c @@ -1551,6 +1551,10 @@ msg_outtrans_len_attr(char_u *msgstr, int len, int attr) char_u *s; int mb_l; int c; + int save_got_int = got_int; + + // Only quit when got_int was set in here. + got_int = FALSE; // if MSG_HIST flag set, add message to history if (attr & MSG_HIST) @@ -1568,7 +1572,7 @@ msg_outtrans_len_attr(char_u *msgstr, int len, int attr) * Go over the string. Special characters are translated and printed. * Normal characters are printed several at a time. */ - while (--len >= 0) + while (--len >= 0 && !got_int) { if (enc_utf8) // Don't include composing chars after the end. @@ -1618,10 +1622,12 @@ msg_outtrans_len_attr(char_u *msgstr, int len, int attr) } } - if (str > plain_start) + if (str > plain_start && !got_int) // print the printable chars at the end msg_puts_attr_len((char *)plain_start, (int)(str - plain_start), attr); + got_int |= save_got_int; + return retval; } diff --git a/src/testdir/dumps/Test_quit_long_message.dump b/src/testdir/dumps/Test_quit_long_message.dump new file mode 100644 index 0000000000..962474762f --- /dev/null +++ b/src/testdir/dumps/Test_quit_long_message.dump @@ -0,0 +1,6 @@ +> +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|0|,|0|-|1| @8|A|l@1| diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim index c575672073..158e94bc5a 100644 --- a/src/testdir/test_messages.vim +++ b/src/testdir/test_messages.vim @@ -4,6 +4,7 @@ source check.vim source shared.vim source term_util.vim source view_util.vim +source screendump.vim func Test_messages() let oldmore = &more @@ -309,4 +310,20 @@ func Test_mapping_at_hit_return_prompt() nunmap endfunc +func Test_quit_long_message() + CheckScreendump + + let content =<< trim END + echom range(9999)->join("\x01") + END + call writefile(content, 'Xtest_quit_message') + let buf = RunVimInTerminal('-S Xtest_quit_message', #{rows: 6}) + call term_sendkeys(buf, "q") + call VerifyScreenDump(buf, 'Test_quit_long_message', {}) + + " clean up + call StopVimInTerminal(buf) + call delete('Xtest_diff_rnu') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 0e5c4df494..c6f98c36d0 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1844, /**/ 1843, /**/ -- cgit v1.2.3