aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/api/ui.c2
-rw-r--r--src/nvim/channel.c2
-rw-r--r--src/nvim/terminal.c2
-rw-r--r--test/functional/core/channels_spec.lua49
-rw-r--r--test/functional/terminal/buffer_spec.lua28
-rw-r--r--test/functional/terminal/tui_spec.lua26
6 files changed, 106 insertions, 3 deletions
diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c
index 7aa4cf4576..aa9dc1098e 100644
--- a/src/nvim/api/ui.c
+++ b/src/nvim/api/ui.c
@@ -510,7 +510,7 @@ void nvim_ui_term_event(uint64_t channel_id, String event, Object value, Error *
MAXSIZE_TEMP_DICT(data, 1);
PUT_C(data, "sequence", value);
- apply_autocmds_group(EVENT_TERMRESPONSE, NULL, NULL, false, AUGROUP_ALL, NULL, NULL,
+ apply_autocmds_group(EVENT_TERMRESPONSE, NULL, NULL, true, AUGROUP_ALL, NULL, NULL,
&DICT_OBJ(data));
}
}
diff --git a/src/nvim/channel.c b/src/nvim/channel.c
index c964748a20..9fc0a82ca3 100644
--- a/src/nvim/channel.c
+++ b/src/nvim/channel.c
@@ -897,7 +897,7 @@ static void set_info_event(void **argv)
tv_dict_add_dict(dict, S_LEN("info"), retval.vval.v_dict);
tv_dict_set_keys_readonly(dict);
- apply_autocmds(event, NULL, NULL, false, curbuf);
+ apply_autocmds(event, NULL, NULL, true, curbuf);
restore_v_event(dict, &save_v_event);
arena_mem_free(arena_finish(&arena));
diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c
index c0f938adda..ed757a63f9 100644
--- a/src/nvim/terminal.c
+++ b/src/nvim/terminal.c
@@ -243,7 +243,7 @@ static void emit_termrequest(void **argv)
PUT_C(data, "cursor", ARRAY_OBJ(cursor));
buf_T *buf = handle_get_buffer(term->buf_handle);
- apply_autocmds_group(EVENT_TERMREQUEST, NULL, NULL, false, AUGROUP_ALL, buf, NULL,
+ apply_autocmds_group(EVENT_TERMREQUEST, NULL, NULL, true, AUGROUP_ALL, buf, NULL,
&DICT_OBJ(data));
xfree(sequence);
diff --git a/test/functional/core/channels_spec.lua b/test/functional/core/channels_spec.lua
index 7b10eb05ef..11617905dd 100644
--- a/test/functional/core/channels_spec.lua
+++ b/test/functional/core/channels_spec.lua
@@ -3,6 +3,8 @@ local n = require('test.functional.testnvim')()
local clear, eq, eval, next_msg, ok, source = n.clear, t.eq, n.eval, n.next_msg, t.ok, n.source
local command, fn, api = n.command, n.fn, n.api
+local feed = n.feed
+local exec_lua = n.exec_lua
local matches = t.matches
local sleep = vim.uv.sleep
local get_session, set_session = n.get_session, n.set_session
@@ -416,6 +418,53 @@ describe('channels', function()
-- works correctly with no output
eq({ 'notification', 'exit', { id, 1, { '' } } }, next_msg())
end)
+
+ it('ChanOpen works with vim.wait() from another autocommand #32706', function()
+ exec_lua([[
+ vim.api.nvim_create_autocmd('ChanOpen', {
+ callback = function(ev)
+ _G.chan = vim.v.event.info.id
+ end,
+ })
+ vim.api.nvim_create_autocmd('InsertEnter', {
+ buffer = 0,
+ callback = function()
+ local chan = vim.fn.jobstart({ 'cat' })
+ _G.result = vim.wait(3000, function()
+ return _G.chan == chan
+ end)
+ end,
+ })
+ ]])
+ feed('i')
+ retry(nil, 4000, function()
+ eq(true, exec_lua('return _G.result'))
+ end)
+ end)
+
+ it('ChanInfo works with vim.wait() from another autocommand #32706', function()
+ exec_lua([[
+ vim.api.nvim_create_autocmd('ChanInfo', {
+ callback = function(ev)
+ _G.foo = vim.v.event.info.client.attributes.foo
+ end,
+ })
+ vim.api.nvim_create_autocmd('InsertEnter', {
+ buffer = 0,
+ callback = function()
+ local chan = vim.fn.jobstart({ 'cat' })
+ _G.result = vim.wait(3000, function()
+ return _G.foo == 'bar'
+ end)
+ end,
+ })
+ ]])
+ feed('i')
+ api.nvim_set_client_info('test', {}, 'remote', {}, { foo = 'bar' })
+ retry(nil, 4000, function()
+ eq(true, exec_lua('return _G.result'))
+ end)
+ end)
end)
describe('loopback', function()
diff --git a/test/functional/terminal/buffer_spec.lua b/test/functional/terminal/buffer_spec.lua
index 4fd348af41..599adc87e1 100644
--- a/test/functional/terminal/buffer_spec.lua
+++ b/test/functional/terminal/buffer_spec.lua
@@ -390,6 +390,34 @@ describe(':terminal buffer', function()
}, exec_lua('return _G.input'))
end)
+ it('works with vim.wait() from another autocommand #32706', function()
+ command('autocmd! nvim.terminal TermRequest')
+ exec_lua([[
+ local term = vim.api.nvim_open_term(0, {})
+ vim.api.nvim_create_autocmd('TermRequest', {
+ buffer = 0,
+ callback = function(ev)
+ _G.sequence = ev.data.sequence
+ _G.v_termrequest = vim.v.termrequest
+ end,
+ })
+ vim.api.nvim_create_autocmd('TermEnter', {
+ buffer = 0,
+ callback = function()
+ vim.api.nvim_chan_send(term, '\027]11;?\027\\')
+ _G.result = vim.wait(3000, function()
+ local expected = '\027]11;?'
+ return _G.sequence == expected and _G.v_termrequest == expected
+ end)
+ end,
+ })
+ ]])
+ feed('i')
+ retry(nil, 4000, function()
+ eq(true, exec_lua('return _G.result'))
+ end)
+ end)
+
it('includes cursor position #31609', function()
command('autocmd! nvim.terminal TermRequest')
local screen = Screen.new(50, 10)
diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua
index a2d5b39f84..5e452ce9c9 100644
--- a/test/functional/terminal/tui_spec.lua
+++ b/test/functional/terminal/tui_spec.lua
@@ -2222,6 +2222,32 @@ describe('TUI', function()
eq({ { id = 0xE1EA0000, url = 'https://example.com' } }, exec_lua([[return _G.urls]]))
end)
end)
+
+ it('TermResponse works with vim.wait() from another autocommand #32706', function()
+ child_exec_lua([[
+ _G.termresponse = nil
+ vim.api.nvim_create_autocmd('TermResponse', {
+ callback = function(ev)
+ _G.sequence = ev.data.sequence
+ _G.v_termresponse = vim.v.termresponse
+ end,
+ })
+ vim.api.nvim_create_autocmd('InsertEnter', {
+ buffer = 0,
+ callback = function()
+ _G.result = vim.wait(3000, function()
+ local expected = '\027P1+r5463'
+ return _G.sequence == expected and _G.v_termresponse == expected
+ end)
+ end,
+ })
+ ]])
+ feed_data('i')
+ feed_data('\027P1+r5463\027\\')
+ retry(nil, 4000, function()
+ eq(true, child_exec_lua('return _G.result'))
+ end)
+ end)
end)
describe('TUI', function()