# HG changeset patch # User Bram Moolenaar # Date 1602621006 -7200 # Node ID fb5546aa68172843ef0d57f380406e021f7bf34a # Parent c4bb7a69c6a2d522886728e6d66dc8b7aeee6dfc patch 8.2.1844: using "q" at the more prompt doesn't stop a long message Commit: https://github.com/vim/vim/commit/3d30af8783bf43fbfece641ec81ad8d2f01b3735 Author: Bram Moolenaar Date: Tue Oct 13 22:15:56 2020 +0200 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 https://github.com/vim/vim/issues/7122) diff --git a/src/message.c b/src/message.c --- a/src/message.c +++ b/src/message.c @@ -1551,6 +1551,10 @@ msg_outtrans_len_attr(char_u *msgstr, in 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, in * 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, in } } - 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 --- /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 --- 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 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1844, +/**/ 1843, /**/ 1842,