Mercurial > vim
changeset 22592:fb5546aa6817 v8.2.1844
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 <Bram@vim.org>
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 13 Oct 2020 22:30:06 +0200 |
parents | c4bb7a69c6a2 |
children | a6030e19b08f |
files | src/message.c src/testdir/dumps/Test_quit_long_message.dump src/testdir/test_messages.vim src/version.c |
diffstat | 4 files changed, 33 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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; }
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|
--- 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 <C-B> 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