mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 11:28:22 +00:00
fix(messages): add append parameter to history entries (#34467)
Problem: The "append" parameter added in abb40ece
is missing from
history entries, resulting in different message formatting
for "g<".
Solution: Add "append" field to message history entries.
Co-authored-by: phanium <91544758+phanen@users.noreply.github.com>
This commit is contained in:
@@ -892,7 +892,7 @@ must handle.
|
|||||||
|
|
||||||
["msg_history_show", entries] ~
|
["msg_history_show", entries] ~
|
||||||
Sent when |:messages| command is invoked. History is sent as a list of
|
Sent when |:messages| command is invoked. History is sent as a list of
|
||||||
entries, where each entry is a `[kind, content]` tuple.
|
entries, where each entry is a `[kind, content, append]` tuple.
|
||||||
|
|
||||||
["msg_history_clear"] ~
|
["msg_history_clear"] ~
|
||||||
Clear the |:messages| history.
|
Clear the |:messages| history.
|
||||||
|
@@ -420,7 +420,7 @@ function M.msg_ruler(content)
|
|||||||
set_virttext('last')
|
set_virttext('last')
|
||||||
end
|
end
|
||||||
|
|
||||||
---@alias MsgHistory [string, MsgContent]
|
---@alias MsgHistory [string, MsgContent, boolean]
|
||||||
--- Open the message history in the pager.
|
--- Open the message history in the pager.
|
||||||
---
|
---
|
||||||
---@param entries MsgHistory[]
|
---@param entries MsgHistory[]
|
||||||
@@ -431,7 +431,7 @@ function M.msg_history_show(entries)
|
|||||||
|
|
||||||
api.nvim_buf_set_lines(ext.bufs.pager, 0, -1, false, {})
|
api.nvim_buf_set_lines(ext.bufs.pager, 0, -1, false, {})
|
||||||
for i, entry in ipairs(entries) do
|
for i, entry in ipairs(entries) do
|
||||||
M.show_msg('pager', entry[2], i == 1, false)
|
M.show_msg('pager', entry[2], i == 1, entry[3])
|
||||||
end
|
end
|
||||||
|
|
||||||
M.set_pos('pager')
|
M.set_pos('pager')
|
||||||
|
@@ -1053,6 +1053,11 @@ static void msg_hist_add_multihl(HlMessage msg, bool temp)
|
|||||||
entry->kind = msg_ext_kind;
|
entry->kind = msg_ext_kind;
|
||||||
entry->prev = msg_hist_last;
|
entry->prev = msg_hist_last;
|
||||||
entry->next = NULL;
|
entry->next = NULL;
|
||||||
|
// NOTE: this does not encode if the message was actually appended to the
|
||||||
|
// previous entry in the message history. However append is currently only
|
||||||
|
// true for :echon, which is stored in the history as a temporary entry for
|
||||||
|
// "g<" where it is guaranteed to be after the entry it was appended to.
|
||||||
|
entry->append = msg_ext_append;
|
||||||
|
|
||||||
if (msg_hist_first == NULL) {
|
if (msg_hist_first == NULL) {
|
||||||
msg_hist_first = entry;
|
msg_hist_first = entry;
|
||||||
@@ -1206,6 +1211,7 @@ void ex_messages(exarg_T *eap)
|
|||||||
ADD(content, ARRAY_OBJ(content_entry));
|
ADD(content, ARRAY_OBJ(content_entry));
|
||||||
}
|
}
|
||||||
ADD(entry, ARRAY_OBJ(content));
|
ADD(entry, ARRAY_OBJ(content));
|
||||||
|
ADD(entry, BOOLEAN_OBJ(p->append));
|
||||||
ADD(entries, ARRAY_OBJ(entry));
|
ADD(entries, ARRAY_OBJ(entry));
|
||||||
}
|
}
|
||||||
if (redirecting() || !ui_has(kUIMessages)) {
|
if (redirecting() || !ui_has(kUIMessages)) {
|
||||||
|
@@ -18,4 +18,6 @@ typedef struct msg_hist {
|
|||||||
HlMessage msg; ///< Highlighted message.
|
HlMessage msg; ///< Highlighted message.
|
||||||
const char *kind; ///< Message kind (for msg_ext)
|
const char *kind; ///< Message kind (for msg_ext)
|
||||||
bool temp; ///< Temporary message since last command ("g<")
|
bool temp; ///< Temporary message since last command ("g<")
|
||||||
|
bool append; ///< Message should be appended to previous entry, as opposed
|
||||||
|
///< to on a new line (|ui-messages|->msg_show->append).
|
||||||
} MessageHistoryEntry;
|
} MessageHistoryEntry;
|
||||||
|
@@ -136,9 +136,9 @@ describe('vim.ui_attach', function()
|
|||||||
{
|
{
|
||||||
'msg_history_show',
|
'msg_history_show',
|
||||||
{
|
{
|
||||||
{ 'echomsg', { { 0, 'message1', 0 } } },
|
{ 'echomsg', { { 0, 'message1', 0 } }, false },
|
||||||
{ 'lua_print', { { 0, 'message2', 0 } } },
|
{ 'lua_print', { { 0, 'message2', 0 } }, false },
|
||||||
{ 'echomsg', { { 0, 'message3', 0 } } },
|
{ 'echomsg', { { 0, 'message3', 0 } }, false },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, actual, vim.inspect(actual))
|
}, actual, vim.inspect(actual))
|
||||||
|
@@ -1604,14 +1604,21 @@ stack traceback:
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
it('g< mapping shows recent messages', function()
|
it('g< mapping shows recent messages', function()
|
||||||
command('echo "foo" | echo "bar"')
|
feed(':echo "foo" | echo "bar" | echon "baz"<CR>')
|
||||||
screen:expect({
|
screen:expect({
|
||||||
grid = [[
|
grid = [[
|
||||||
^ |
|
^ |
|
||||||
{1:~ }|*4
|
{1:~ }|*4
|
||||||
]],
|
]],
|
||||||
|
cmdline = { { abort = false } },
|
||||||
messages = {
|
messages = {
|
||||||
|
{ content = { { 'foo' } }, kind = 'echo' },
|
||||||
{ content = { { 'bar' } }, kind = 'echo' },
|
{ content = { { 'bar' } }, kind = 'echo' },
|
||||||
|
{ content = { { 'baz' } }, kind = 'echo', append = true },
|
||||||
|
{
|
||||||
|
content = { { 'Press ENTER or type command to continue', 6, 18 } },
|
||||||
|
kind = 'return_prompt',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
feed('g<lt>')
|
feed('g<lt>')
|
||||||
@@ -1627,14 +1634,9 @@ stack traceback:
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
msg_history = {
|
msg_history = {
|
||||||
{
|
{ content = { { 'foo' } }, kind = 'echo' },
|
||||||
content = { { 'foo' } },
|
{ content = { { 'bar' } }, kind = 'echo' },
|
||||||
kind = 'echo',
|
{ content = { { 'baz' } }, kind = 'echo', append = true },
|
||||||
},
|
|
||||||
{
|
|
||||||
content = { { 'bar' } },
|
|
||||||
kind = 'echo',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
feed('Q')
|
feed('Q')
|
||||||
|
@@ -1515,7 +1515,11 @@ function Screen:_extstate_repr(attr_state)
|
|||||||
|
|
||||||
local msg_history = {}
|
local msg_history = {}
|
||||||
for i, entry in ipairs(self.msg_history) do
|
for i, entry in ipairs(self.msg_history) do
|
||||||
msg_history[i] = { kind = entry[1], content = self:_chunks_repr(entry[2], attr_state) }
|
msg_history[i] = {
|
||||||
|
kind = entry[1],
|
||||||
|
content = self:_chunks_repr(entry[2], attr_state),
|
||||||
|
append = entry[3] or nil,
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
local win_viewport = (next(self.win_viewport) and self.win_viewport) or nil
|
local win_viewport = (next(self.win_viewport) and self.win_viewport) or nil
|
||||||
|
Reference in New Issue
Block a user