diff options
| -rw-r--r-- | runtime/doc/news.txt | 7 | ||||
| -rw-r--r-- | runtime/doc/ui.txt | 16 | ||||
| -rw-r--r-- | src/nvim/api/ui_events.in.h | 6 | ||||
| -rw-r--r-- | src/nvim/ex_getln.c | 7 | ||||
| -rw-r--r-- | src/nvim/message.c | 12 | ||||
| -rw-r--r-- | test/functional/lua/ui_event_spec.lua | 11 | ||||
| -rw-r--r-- | test/functional/ui/cmdline_spec.lua | 62 | ||||
| -rw-r--r-- | test/functional/ui/messages_spec.lua | 218 | ||||
| -rw-r--r-- | test/functional/ui/screen.lua | 29 |
9 files changed, 282 insertions, 86 deletions
diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt index eb04702ec2..c4ba4f0ad1 100644 --- a/runtime/doc/news.txt +++ b/runtime/doc/news.txt @@ -92,6 +92,13 @@ EVENTS • |vim.ui_attach()| callbacks for |ui-messages| `msg_show` events are executed in |api-fast| context. +• New/enhanced arguments in these existing UI events: + • `cmdline_show`: `hl_id` argument to highlight the prompt text. + • `cmdline_hide`: `abort` argument indicating if the cmdline was aborted. + • `msg_show`: + • `history` argument indicating if the message was added to the history. + • new message kinds: "bufwrite", "completion", "list_cmd", + "lua_print", "number_prompt", "search_cmd", "undo", "wildlist". HIGHLIGHTS diff --git a/runtime/doc/ui.txt b/runtime/doc/ui.txt index f531411354..1b11565eeb 100644 --- a/runtime/doc/ui.txt +++ b/runtime/doc/ui.txt @@ -715,7 +715,7 @@ Activated by the `ext_cmdline` |ui-option|. This UI extension delegates presentation of the |cmdline| (except 'wildmenu'). For command-line 'wildmenu' UI events, activate |ui-popupmenu|. -["cmdline_show", content, pos, firstc, prompt, indent, level] ~ +["cmdline_show", content, pos, firstc, prompt, indent, level, hl_id] ~ content: List of [attrs, string] [[{}, "t"], [attrs, "est"], ...] @@ -728,8 +728,8 @@ For command-line 'wildmenu' UI events, activate |ui-popupmenu|. `firstc` and `prompt` are text, that if non-empty should be displayed in front of the command line. `firstc` always indicates built-in command lines such as `:` (ex command) and `/` `?` (search), - while `prompt` is an |input()| prompt. `indent` tells how many spaces - the content should be indented. + while `prompt` is an |input()| prompt, highlighted with `hl_id`. + `indent` tells how many spaces the content should be indented. The Nvim command line can be invoked recursively, for instance by typing `<c-r>=` at the command line prompt. The `level` field is used @@ -749,8 +749,9 @@ For command-line 'wildmenu' UI events, activate |ui-popupmenu|. Should be hidden at next cmdline_show. -["cmdline_hide"] ~ - Hide the cmdline. +["cmdline_hide", abort] ~ + Hide the cmdline. `abort` is true if the cmdline is hidden after an + aborting condition (|c_Esc| or |c_CTRL-C|). ["cmdline_block_show", lines] ~ Show a block of context to the current command line. For example if @@ -783,7 +784,7 @@ will be set to zero, but can be changed and used for the replacing cmdline or message window. Cmdline state is emitted as |ui-cmdline| events, which the UI must handle. -["msg_show", kind, content, replace_last] ~ +["msg_show", kind, content, replace_last, history] ~ Display a message to the user. kind @@ -826,6 +827,9 @@ must handle. true: Replace the message in the most-recent `msg_show` call, but any other visible message should still remain. + history + True if the message was added to the |:messages| history. + ["msg_clear"] ~ Clear all messages currently displayed by "msg_show". (Messages sent by other "msg_" events below will not be affected). diff --git a/src/nvim/api/ui_events.in.h b/src/nvim/api/ui_events.in.h index 0ed208fc1a..74718e7ac5 100644 --- a/src/nvim/api/ui_events.in.h +++ b/src/nvim/api/ui_events.in.h @@ -136,13 +136,13 @@ void tabline_update(Tabpage current, Array tabs, Buffer current_buffer, Array bu FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; void cmdline_show(Array content, Integer pos, String firstc, String prompt, Integer indent, - Integer level) + Integer level, Integer hl_id) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; void cmdline_pos(Integer pos, Integer level) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; void cmdline_special_char(String c, Boolean shift, Integer level) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; -void cmdline_hide(Integer level) +void cmdline_hide(Integer level, Boolean abort) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; void cmdline_block_show(Array lines) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; @@ -158,7 +158,7 @@ void wildmenu_select(Integer selected) void wildmenu_hide(void) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; -void msg_show(String kind, Array content, Boolean replace_last) +void msg_show(String kind, Array content, Boolean replace_last, Boolean history) FUNC_API_SINCE(6) FUNC_API_FAST FUNC_API_REMOTE_ONLY; void msg_clear(void) FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY; diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 09d4c88dcd..ff752fb489 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -956,7 +956,7 @@ theend: char *p = ccline.cmdbuff; if (ui_has(kUICmdline)) { - ui_call_cmdline_hide(ccline.level); + ui_call_cmdline_hide(ccline.level, s->gotesc); msg_ext_clear_later(); } if (!cmd_silent) { @@ -3423,8 +3423,7 @@ static void ui_ext_cmdline_show(CmdlineInfo *line) ui_call_cmdline_show(content, line->cmdpos, cstr_as_string(charbuf), cstr_as_string((line->cmdprompt)), - line->cmdindent, - line->level); + line->cmdindent, line->level, line->hl_id); if (line->special_char) { charbuf[0] = line->special_char; ui_call_cmdline_special_char(cstr_as_string(charbuf), @@ -4478,7 +4477,7 @@ static int open_cmdwin(void) invalidate_botline(curwin); if (ui_has(kUICmdline)) { ccline.redraw_state = kCmdRedrawNone; - ui_call_cmdline_hide(ccline.level); + ui_call_cmdline_hide(ccline.level, false); } redraw_later(curwin, UPD_SOME_VALID); diff --git a/src/nvim/message.c b/src/nvim/message.c index a654395455..125f602c6c 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -153,6 +153,7 @@ static sattr_T msg_ext_last_attr = -1; static int msg_ext_last_hl_id; static size_t msg_ext_cur_len = 0; +static bool msg_ext_history = false; ///< message was added to history static bool msg_ext_overwrite = false; ///< will overwrite last message static int msg_ext_visible = 0; ///< number of messages currently visible @@ -988,7 +989,7 @@ static void add_msg_hist(const char *s, int len, int hl_id, bool multiline) static void add_msg_hist_multihl(const char *s, int len, int hl_id, bool multiline, HlMessage multihl) { - if (msg_hist_off || msg_silent != 0) { + if (msg_hist_off || msg_silent != 0 || (s != NULL && *s == NUL)) { hl_msg_free(multihl); return; } @@ -999,12 +1000,13 @@ static void add_msg_hist_multihl(const char *s, int len, int hl_id, bool multili if (len < 0) { len = (int)strlen(s); } + assert(len > 0); // remove leading and trailing newlines - while (len > 0 && *s == '\n') { + while (*s == '\n') { s++; len--; } - while (len > 0 && s[len - 1] == '\n') { + while (s[len - 1] == '\n') { len--; } p->msg = xmemdupz(s, (size_t)len); @@ -1024,6 +1026,7 @@ static void add_msg_hist_multihl(const char *s, int len, int hl_id, bool multili first_msg_hist = last_msg_hist; } msg_hist_len++; + msg_ext_history = true; check_msg_hist(); } @@ -3138,13 +3141,14 @@ void msg_ext_ui_flush(void) msg_ext_emit_chunk(); if (msg_ext_chunks->size > 0) { Array *tofree = msg_ext_init_chunks(); - ui_call_msg_show(cstr_as_string(msg_ext_kind), *tofree, msg_ext_overwrite); + ui_call_msg_show(cstr_as_string(msg_ext_kind), *tofree, msg_ext_overwrite, msg_ext_history); api_free_array(*tofree); xfree(tofree); if (!msg_ext_overwrite) { msg_ext_visible++; } msg_ext_overwrite = false; + msg_ext_history = false; msg_ext_kind = NULL; } } diff --git a/test/functional/lua/ui_event_spec.lua b/test/functional/lua/ui_event_spec.lua index 25cc46e260..7e890e8ae0 100644 --- a/test/functional/lua/ui_event_spec.lua +++ b/test/functional/lua/ui_event_spec.lua @@ -261,9 +261,11 @@ describe('vim.ui_attach', function() lled in a fast event context | {1:~ }| ]], + cmdline = { { abort = false } }, messages = { { content = { { 'E122: Function Foo already exists, add ! to replace it', 9, 6 } }, + history = true, kind = 'emsg', }, }, @@ -278,9 +280,11 @@ describe('vim.ui_attach', function() Y)? | {1:~ }| ]], + cmdline = { { abort = false } }, messages = { { content = { { 'replace with Replacement (y/n/a/q/l/^E/^Y)?', 6, 18 } }, + history = true, kind = 'confirm_sub', }, }, @@ -294,13 +298,16 @@ describe('vim.ui_attach', function() e mouse (q or empty cancels): | {1:^~ }| ]], + cmdline = { { abort = false } }, messages = { { content = { { 'Select:\nOne\nTwo\n' } }, + history = false, kind = 'list_cmd', }, { content = { { 'Type number and <Enter> or click with the mouse (q or empty cancels): ' } }, + history = false, kind = 'number_prompt', }, }, @@ -359,6 +366,7 @@ describe('vim.ui_attach', function() {9:back from ns: 1.} | {100:Press ENTER or type command to continue}^ | ]], + cmdline = { { abort = false } }, }) feed('<cr>') -- Also when scheduled @@ -378,6 +386,7 @@ describe('vim.ui_attach', function() 6, }, }, + history = true, kind = 'lua_error', }, { @@ -388,10 +397,12 @@ describe('vim.ui_attach', function() 6, }, }, + history = true, kind = 'lua_error', }, { content = { { 'Press ENTER or type command to continue', 100, 18 } }, + history = false, kind = 'return_prompt', }, }, diff --git a/test/functional/ui/cmdline_spec.lua b/test/functional/ui/cmdline_spec.lua index 0221c1e0b0..63764a9b6c 100644 --- a/test/functional/ui/cmdline_spec.lua +++ b/test/functional/ui/cmdline_spec.lua @@ -91,25 +91,27 @@ local function test_cmdline(linegrid) {1:~ }|*3 | ]], + cmdline = { { abort = true } }, } end) it('works with input()', function() feed(':call input("input", "default")<cr>') - screen:expect { + screen:expect({ grid = [[ - ^ | - {1:~ }|*3 - | - ]], + ^ | + {1:~ }|*3 + | + ]], cmdline = { { - prompt = 'input', content = { { 'default' } }, + hl_id = 0, pos = 7, + prompt = 'input', }, }, - } + }) feed('<cr>') screen:expect { @@ -118,6 +120,7 @@ local function test_cmdline(linegrid) {1:~ }|*3 | ]], + cmdline = { { abort = false } }, } end) @@ -210,6 +213,7 @@ local function test_cmdline(linegrid) content = { { 'xx3' } }, pos = 3, }, + { abort = false }, }, } @@ -220,6 +224,7 @@ local function test_cmdline(linegrid) {1:~ }|*3 | ]], + cmdline = { { abort = true } }, } end) @@ -294,6 +299,7 @@ local function test_cmdline(linegrid) {1:~ }|*3 | ]], + cmdline = { { abort = false } }, } -- Try once more, to check buffer is reinitialized. #8007 @@ -324,6 +330,7 @@ local function test_cmdline(linegrid) {1:~ }|*3 | ]], + cmdline = { { abort = false } }, } end) @@ -353,6 +360,7 @@ local function test_cmdline(linegrid) {3:[Command Line] }| | ]], + cmdline = { { abort = false } }, } -- nested cmdline @@ -404,6 +412,7 @@ local function test_cmdline(linegrid) {3:[Command Line] }| | ]], + cmdline = { [2] = { abort = true } }, } feed('<c-c>') @@ -452,6 +461,7 @@ local function test_cmdline(linegrid) cmdline = { { prompt = 'secret:', + hl_id = 0, content = { { '******' } }, pos = 6, }, @@ -495,6 +505,7 @@ local function test_cmdline(linegrid) cmdline = { { prompt = '>', + hl_id = 0, content = { { '(', 30 }, { 'a' }, @@ -797,11 +808,14 @@ local function test_cmdline(linegrid) -- This used to send an invalid event where pos where larger than the total -- length of content. Checked in _handle_cmdline_show. feed('<esc>') - screen:expect([[ - ^ | - {1:~ }|*3 - | - ]]) + screen:expect({ + grid = [[ + ^ | + {1:~ }|*3 + | + ]], + cmdline = { { abort = true } }, + }) end) it('does not move cursor to curwin #20309', function() @@ -827,6 +841,30 @@ local function test_cmdline(linegrid) } }, } end) + + it('show prompt hl_id', function() + screen:expect([[ + ^ | + {1:~ }|*3 + | + ]]) + feed(':echohl Error | call input("Prompt:")<CR>') + screen:expect({ + grid = [[ + ^ | + {1:~ }|*3 + | + ]], + cmdline = { + { + content = { { '' } }, + hl_id = 237, + pos = 0, + prompt = 'Prompt:', + }, + }, + }) + end) end -- the representation of cmdline and cmdline_block contents changed with ext_linegrid diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua index 8f8795370f..8acf8495c6 100644 --- a/test/functional/ui/messages_spec.lua +++ b/test/functional/ui/messages_spec.lua @@ -47,9 +47,11 @@ describe('ui/ext_messages', function() line ^1 | {1:~ }|*4 ]], + cmdline = { { abort = false } }, messages = { { content = { { '\ntest\n[O]k: ', 6, 10 } }, + history = false, kind = 'confirm', }, }, @@ -75,9 +77,11 @@ describe('ui/ext_messages', function() line ^2 | {1:~ }|*3 ]], + cmdline = { { abort = false } }, messages = { { content = { { '\ntest\n[O]k: ', 6, 10 } }, + history = false, kind = 'confirm', }, }, @@ -87,14 +91,17 @@ describe('ui/ext_messages', function() messages = { { content = { { '\ntest\n[O]k: ', 6, 10 } }, + history = false, kind = 'confirm', }, { content = { { '1' } }, + history = false, kind = 'echo', }, { content = { { 'Press ENTER or type command to continue', 6, 18 } }, + history = false, kind = 'return_prompt', }, }, @@ -109,9 +116,11 @@ describe('ui/ext_messages', function() l{10:i}ne ^2 | {1:~ }|*3 ]], + cmdline = { { abort = false } }, messages = { { content = { { 'replace with X (y/n/a/q/l/^E/^Y)?', 6, 18 } }, + history = true, kind = 'confirm_sub', }, }, @@ -131,6 +140,7 @@ describe('ui/ext_messages', function() messages = { { content = { { 'W10: Warning: Changing a readonly file', 19, 26 } }, + history = true, kind = 'wmsg', }, }, @@ -144,9 +154,11 @@ describe('ui/ext_messages', function() line 2 | {1:~ }|*3 ]], + cmdline = { { abort = false } }, messages = { { content = { { 'search hit BOTTOM, continuing at TOP', 19, 26 } }, + history = true, kind = 'wmsg', }, }, @@ -155,17 +167,21 @@ describe('ui/ext_messages', function() -- kind=emsg after :throw feed(':throw "foo"<cr>') screen:expect { + cmdline = { { abort = false } }, messages = { { content = { { 'Error detected while processing :', 9, 6 } }, + history = true, kind = 'emsg', }, { content = { { 'E605: Exception not caught: foo', 9, 6 } }, + history = true, kind = 'emsg', }, { content = { { 'Press ENTER or type command to continue', 6, 18 } }, + history = false, kind = 'return_prompt', }, }, @@ -181,9 +197,11 @@ describe('ui/ext_messages', function() ^line 2 | {1:~ }|*3 ]], + cmdline = { { abort = false } }, messages = { { content = { { '(2 of 2): line2' } }, + history = true, kind = 'quickfix', }, }, @@ -197,15 +215,20 @@ describe('ui/ext_messages', function() line 2 | {1:~ }|*3 ]], - messages = { { - content = { { '?line ' } }, - kind = 'search_cmd', - } }, + cmdline = { { abort = false } }, + messages = { + { + content = { { '?line ' } }, + history = false, + kind = 'search_cmd', + }, + }, }) -- highlight feed(':filter character highlight<CR>') screen:expect({ + cmdline = { { abort = false } }, messages = { { content = { @@ -219,6 +242,7 @@ describe('ui/ext_messages', function() { 'links to', 18, 5 }, { ' SpecialChar' }, }, + history = false, kind = 'list_cmd', }, }, @@ -234,6 +258,7 @@ describe('ui/ext_messages', function() messages = { { content = { { 'Already at oldest change' } }, + history = true, kind = 'undo', }, }, @@ -249,6 +274,7 @@ describe('ui/ext_messages', function() messages = { { content = { { 'Already at newest change' } }, + history = true, kind = 'undo', }, }, @@ -261,6 +287,7 @@ describe('ui/ext_messages', function() messages = { { content = { { 'The only match' } }, + history = false, kind = 'completion', }, }, @@ -276,10 +303,14 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], - messages = { { - content = { { 'raa', 9, 6 } }, - kind = 'echoerr', - } }, + cmdline = { { abort = false } }, + messages = { + { + content = { { 'raa', 9, 6 } }, + history = true, + kind = 'echoerr', + }, + }, } -- cmdline in a later input cycle clears error message @@ -302,17 +333,21 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], + cmdline = { { abort = false } }, messages = { { content = { { 'bork', 9, 6 } }, + history = true, kind = 'echoerr', }, { content = { { 'fail', 9, 6 } }, + history = true, kind = 'echoerr', }, { content = { { 'Press ENTER or type command to continue', 6, 18 } }, + history = false, kind = 'return_prompt', }, }, @@ -324,21 +359,26 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], + cmdline = { { abort = false } }, messages = { { content = { { 'bork', 9, 6 } }, + history = true, kind = 'echoerr', }, { content = { { 'fail', 9, 6 } }, + history = true, kind = 'echoerr', }, { content = { { 'extrafail', 9, 6 } }, + history = true, kind = 'echoerr', }, { content = { { 'Press ENTER or type command to continue', 6, 18 } }, + history = false, kind = 'return_prompt', }, }, @@ -359,13 +399,17 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], - messages = { { - content = { { 'problem', 9, 6 } }, - kind = 'echoerr', - } }, + messages = { + { + content = { { 'problem', 9, 6 } }, + history = true, + kind = 'echoerr', + }, + }, cmdline = { { prompt = 'foo> ', + hl_id = 0, content = { { '' } }, pos = 0, }, @@ -378,6 +422,7 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], + cmdline = { { abort = false } }, } eq('solution', eval('x')) @@ -387,6 +432,7 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], + cmdline = { { abort = false } }, msg_history = { { kind = 'echoerr', content = { { 'raa', 9, 6 } } }, { kind = 'echoerr', content = { { 'bork', 9, 6 } } }, @@ -397,6 +443,7 @@ describe('ui/ext_messages', function() messages = { { content = { { 'Press ENTER or type command to continue', 6, 18 } }, + history = false, kind = 'return_prompt', }, }, @@ -419,9 +466,11 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], + cmdline = { { abort = false } }, messages = { { content = { { 'bork\nfail', 9, 6 } }, + history = true, kind = 'echoerr', }, }, @@ -433,9 +482,11 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], + cmdline = { { abort = false } }, messages = { { content = { { 'Press ENTER or type command to continue', 6, 18 } }, + history = false, kind = 'return_prompt', }, }, @@ -459,8 +510,9 @@ describe('ui/ext_messages', function() {10:line} 2 | {1:~ }|*3 ]], + cmdline = { { abort = false } }, messages = { - { content = { { '/line W [1/2]' } }, kind = 'search_count' }, + { content = { { '/line W [1/2]' } }, kind = 'search_count', history = false }, }, } @@ -472,7 +524,7 @@ describe('ui/ext_messages', function() {1:~ }|*3 ]], messages = { - { content = { { '/line [2/2]' } }, kind = 'search_count' }, + { content = { { '/line [2/2]' } }, kind = 'search_count', history = false }, }, } end) @@ -485,11 +537,13 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], + cmdline = { { abort = false } }, messages = { - { content = { { 'x #1' } }, kind = 'list_cmd' }, - { content = { { 'y #2' } }, kind = 'list_cmd' }, + { content = { { 'x #1' } }, kind = 'list_cmd', history = false }, + { content = { { 'y #2' } }, kind = 'list_cmd', history = false }, { content = { { 'Press ENTER or type command to continue', 6, 18 } }, + history = false, kind = 'return_prompt', }, }, @@ -560,10 +614,13 @@ describe('ui/ext_messages', function() items = { { 'alphpabet', '', '', '' }, { 'alphanum', '', '', '' } }, pos = 1, }, - messages = { { - content = { { 'stuff' } }, - kind = 'echomsg', - } }, + messages = { + { + content = { { 'stuff' } }, + history = true, + kind = 'echomsg', + }, + }, showmode = { { '-- Keyword Local completion (^N^P) ', 5, 11 }, { 'match 1 of 2', 6, 18 } }, } @@ -580,10 +637,13 @@ describe('ui/ext_messages', function() items = { { 'alphpabet', '', '', '' }, { 'alphanum', '', '', '' } }, pos = 0, }, - messages = { { - content = { { 'stuff' } }, - kind = 'echomsg', - } }, + messages = { + { + content = { { 'stuff' } }, + history = true, + kind = 'echomsg', + }, + }, showmode = { { '-- Keyword Local completion (^N^P) ', 5, 11 }, { 'match 2 of 2', 6, 18 } }, } @@ -595,6 +655,7 @@ describe('ui/ext_messages', function() alphpabe^t | {1:~ }|*2 ]], + cmdline = { { abort = false } }, msg_history = { { content = { { 'stuff' } }, kind = 'echomsg', @@ -602,6 +663,7 @@ describe('ui/ext_messages', function() messages = { { content = { { 'Press ENTER or type command to continue', 6, 18 } }, + history = false, kind = 'return_prompt', }, }, @@ -793,10 +855,14 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], - messages = { { - content = { { 'howdy' } }, - kind = 'echomsg', - } }, + cmdline = { { abort = false } }, + messages = { + { + content = { { 'howdy' } }, + history = true, + kind = 'echomsg', + }, + }, } -- always test a message without kind. If this one gets promoted to a @@ -810,6 +876,7 @@ describe('ui/ext_messages', function() messages = { { content = { { 'Type :qa and press <Enter> to exit Nvim' } }, + history = true, kind = '', }, }, @@ -821,10 +888,14 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], - messages = { { - content = { { 'bork', 9, 6 } }, - kind = 'echoerr', - } }, + cmdline = { { abort = false } }, + messages = { + { + content = { { 'bork', 9, 6 } }, + history = true, + kind = 'echoerr', + }, + }, } feed(':echo "xyz"<cr>') @@ -833,10 +904,14 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], - messages = { { - content = { { 'xyz' } }, - kind = 'echo', - } }, + cmdline = { { abort = false } }, + messages = { + { + content = { { 'xyz' } }, + history = false, + kind = 'echo', + }, + }, } feed(':call nosuchfunction()<cr>') @@ -845,9 +920,11 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], + cmdline = { { abort = false } }, messages = { { content = { { 'E117: Unknown function: nosuchfunction', 9, 6 } }, + history = true, kind = 'emsg', }, }, @@ -859,6 +936,7 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], + cmdline = { { abort = false } }, msg_history = { { kind = 'echomsg', content = { { 'howdy' } } }, { kind = '', content = { { 'Type :qa and press <Enter> to exit Nvim' } } }, @@ -868,6 +946,7 @@ describe('ui/ext_messages', function() messages = { { content = { { 'Press ENTER or type command to continue', 6, 18 } }, + history = false, kind = 'return_prompt', }, }, @@ -892,11 +971,14 @@ describe('ui/ext_messages', function() } feed('<cr>') - screen:expect([[ - ^ | - {1:~ }|*3 - | - ]]) + screen:expect({ + grid = [[ + ^ | + {1:~ }|*3 + | + ]], + cmdline = { { abort = false } }, + }) eq(1, eval('&cmdheight')) feed(':set cmdheight=0') @@ -915,10 +997,15 @@ describe('ui/ext_messages', function() }, } feed('<cr>') - screen:expect([[ - ^ | - {1:~ }|*4 - ]]) + screen:expect({ + grid = [[ + ^ | + {1:~ }|*4 + ]], + cmdline = { { + abort = false, + } }, + }) eq(0, eval('&cmdheight')) end) @@ -929,6 +1016,7 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], + cmdline = { { abort = false } }, messages = { { content = { @@ -943,6 +1031,7 @@ stack traceback: 6, }, }, + history = true, kind = 'lua_error', }, }, @@ -957,11 +1046,13 @@ stack traceback: ^ | {1:~ }|*4 ]], + cmdline = { { abort = false } }, messages = { { content = { { "Error invoking 'test_method' on channel 1:\ncomplete\nerror\n\nmessage", 9, 6 }, }, + history = true, kind = 'rpc_error', }, }, @@ -981,6 +1072,7 @@ stack traceback: feed(':map<cr>') screen:expect { + cmdline = { { abort = false } }, messages = { { content = { @@ -988,6 +1080,7 @@ stack traceback: { '*', 18, 1 }, { ' k' }, }, + history = false, kind = 'list_cmd', }, }, @@ -1008,6 +1101,7 @@ stack traceback: messages = { { content = { { 'wildmenu wildmode' } }, + history = false, kind = 'wildlist', }, }, @@ -1035,10 +1129,12 @@ stack traceback: messages = { { content = { { 'Change "helllo" to:\n 1 "Hello"\n 2 "Hallo"\n 3 "Hullo"\n' } }, + history = false, kind = 'list_cmd', }, { content = { { 'Type number and <Enter> or click with the mouse (q or empty cancels): ' } }, + history = false, kind = 'number_prompt', }, }, @@ -1054,14 +1150,17 @@ stack traceback: messages = { { content = { { 'Change "helllo" to:\n 1 "Hello"\n 2 "Hallo"\n 3 "Hullo"\n' } }, + history = false, kind = 'list_cmd', }, { content = { { 'Type number and <Enter> or click with the mouse (q or empty cancels): ' } }, + history = false, kind = 'number_prompt', }, { content = { { '1' } }, + history = false, kind = '', |