summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-06-15 16:43:10 +0800
committerGitHub <noreply@github.com>2022-06-15 10:43:10 +0200
commitd96eaa914aab6cfc4adccb34af421bdd496468b0 (patch)
treea220578061de2adfb395ca2315c2907105e3b3d9
parentf33df8f35f2ee0cf9bb19142a4a41b3dc6c0d0b6 (diff)
fix: block autocommands when setting preview buffer (#2010)
Telescope creates most floating windows with `noautocmd = true`, so these windows do not trigger autocommands, but preview buffer is set in window using `nvim_win_set_buf()`, which triggers buffer autocommands. This may be unwanted, so block them using 'eventignore'.
-rw-r--r--lua/telescope/previewers/buffer_previewer.lua6
-rw-r--r--lua/telescope/previewers/term_previewer.lua4
-rw-r--r--lua/telescope/utils.lua7
3 files changed, 12 insertions, 5 deletions
diff --git a/lua/telescope/previewers/buffer_previewer.lua b/lua/telescope/previewers/buffer_previewer.lua
index ed934d0..0db4365 100644
--- a/lua/telescope/previewers/buffer_previewer.lua
+++ b/lua/telescope/previewers/buffer_previewer.lua
@@ -333,7 +333,7 @@ previewers.new_buffer_previewer = function(opts)
-- Push in another buffer so the last one will not be cleaned up
if preview_window_id then
local bufnr = vim.api.nvim_create_buf(false, true)
- vim.api.nvim_win_set_buf(preview_window_id, bufnr)
+ utils.win_set_buf_noautocmd(preview_window_id, bufnr)
end
end
@@ -358,14 +358,14 @@ previewers.new_buffer_previewer = function(opts)
if opts.get_buffer_by_name and get_bufnr_by_bufname(self, opts.get_buffer_by_name(self, entry)) then
self.state.bufname = opts.get_buffer_by_name(self, entry)
self.state.bufnr = get_bufnr_by_bufname(self, self.state.bufname)
- vim.api.nvim_win_set_buf(status.preview_win, self.state.bufnr)
+ utils.win_set_buf_noautocmd(status.preview_win, self.state.bufnr)
else
local bufnr = vim.api.nvim_create_buf(false, true)
set_bufnr(self, bufnr)
vim.schedule(function()
if vim.api.nvim_buf_is_valid(bufnr) then
- vim.api.nvim_win_set_buf(status.preview_win, bufnr)
+ utils.win_set_buf_noautocmd(status.preview_win, bufnr)
end
end)
diff --git a/lua/telescope/previewers/term_previewer.lua b/lua/telescope/previewers/term_previewer.lua
index 527fd41..9ba60f8 100644
--- a/lua/telescope/previewers/term_previewer.lua
+++ b/lua/telescope/previewers/term_previewer.lua
@@ -192,12 +192,12 @@ previewers.new_termopen_previewer = function(opts)
local prev_bufnr = get_bufnr_by_bufentry(self, entry)
if prev_bufnr then
self.state.termopen_bufnr = prev_bufnr
- vim.api.nvim_win_set_buf(status.preview_win, self.state.termopen_bufnr)
+ utils.win_set_buf_noautocmd(status.preview_win, self.state.termopen_bufnr)
self.state.termopen_id = term_ids[self.state.termopen_bufnr]
else
local bufnr = vim.api.nvim_create_buf(false, true)
set_bufnr(self, bufnr)
- vim.api.nvim_win_set_buf(status.preview_win, bufnr)
+ utils.win_set_buf_noautocmd(status.preview_win, bufnr)
local term_opts = {
cwd = opts.cwd or vim.loop.cwd(),
diff --git a/lua/telescope/utils.lua b/lua/telescope/utils.lua
index 133a120..2a8de58 100644
--- a/lua/telescope/utils.lua
+++ b/lua/telescope/utils.lua
@@ -410,6 +410,13 @@ function utils.get_os_command_output(cmd, cwd)
return stdout, ret, stderr
end
+function utils.win_set_buf_noautocmd(win, buf)
+ local save_ei = vim.o.eventignore
+ vim.o.eventignore = "all"
+ vim.api.nvim_win_set_buf(win, buf)
+ vim.o.eventignore = save_ei
+end
+
local load_once = function(f)
local resolved = nil
return function(...)