fix: stop using vim.wo to set window options

vim.wo also affects the global status of the option. We only want to set
the window-local option.
This commit is contained in:
Steven Arcangeli 2023-06-15 21:42:19 -07:00
parent 097fb436b2
commit 87f9133990
4 changed files with 28 additions and 18 deletions

View file

@ -140,12 +140,12 @@ M.restore_foldmethod = function()
local ok, prev_foldmethod = pcall(vim.api.nvim_win_get_var, 0, prev_fdm)
if ok and prev_foldmethod then
vim.api.nvim_win_del_var(0, prev_fdm)
vim.wo.foldmethod = prev_foldmethod
vim.api.nvim_set_option_value("foldmethod", prev_foldmethod, { scope = "local", win = 0 })
end
local ok2, prev_foldexpr = pcall(vim.api.nvim_win_get_var, 0, prev_fde)
if ok2 and prev_foldexpr then
vim.api.nvim_win_del_var(0, prev_fde)
vim.wo.foldexpr = prev_foldexpr
vim.api.nvim_set_option_value("foldexpr", prev_foldexpr, { scope = "local", win = 0 })
end
end
@ -172,13 +172,17 @@ M.maybe_set_foldmethod = function(bufnr)
then
vim.api.nvim_win_set_var(winid, prev_fdm, fdm)
vim.api.nvim_win_set_var(winid, prev_fde, fde)
vim.wo[winid].foldmethod = "expr"
vim.wo[winid].foldexpr = "v:lua.aerial_foldexpr()"
vim.api.nvim_set_option_value("foldmethod", "expr", { scope = "local", win = winid })
vim.api.nvim_set_option_value(
"foldexpr",
"v:lua.aerial_foldexpr()",
{ scope = "local", win = winid }
)
if config.link_folds_to_tree then
local fdl = vim.wo[winid].foldlevel
require("aerial").tree_set_collapse_level(bufnr, fdl)
elseif config.link_tree_to_folds then
vim.wo[winid].foldlevel = 99
vim.api.nvim_set_option_value("foldlevel", 99, { scope = "local", win = winid })
end
end
end

View file

@ -287,11 +287,11 @@ function AerialNav:relayout()
col = main_col + main_width + border_width,
})
for k, v in pairs(config.nav.win_opts) do
vim.wo[self.main.winid][k] = v
vim.api.nvim_set_option_value(k, v, { scope = "local", win = self.main.winid })
-- Hack: we generally don't want the left/right to have cursorline enabled
if k ~= "cursorline" then
vim.wo[self.left.winid][k] = v
vim.wo[self.right.winid][k] = v
vim.api.nvim_set_option_value(k, v, { scope = "local", win = self.left.winid })
vim.api.nvim_set_option_value(k, v, { scope = "local", win = self.right.winid })
end
end
end

View file

@ -158,7 +158,7 @@ M.set_collapse_level = function(bufnr, level)
end
for _, winid in ipairs(wins) do
vim.wo[winid].foldlevel = level
vim.api.nvim_set_option_value("foldlevel", level, { scope = "local", win = winid })
end
end
_post_tree_mutate(bufnr)

View file

@ -80,20 +80,26 @@ local function create_aerial_buffer(bufnr)
return aer_bufnr
end
local default_win_opts = {
list = false,
winfixwidth = true,
number = false,
signcolumn = "no",
foldcolumn = "0",
relativenumber = false,
wrap = false,
spell = false,
}
---@param src_winid integer
---@param aer_winid integer
local function setup_aerial_win(src_winid, aer_winid, aer_bufnr)
vim.api.nvim_win_set_buf(aer_winid, aer_bufnr)
vim.wo[aer_winid].list = false
vim.wo[aer_winid].winfixwidth = true
vim.wo[aer_winid].number = false
vim.wo[aer_winid].signcolumn = "no"
vim.wo[aer_winid].foldcolumn = "0"
vim.wo[aer_winid].relativenumber = false
vim.wo[aer_winid].wrap = false
vim.wo[aer_winid].spell = false
for k, v in pairs(default_win_opts) do
vim.api.nvim_set_option_value(k, v, { scope = "local", win = aer_winid })
end
for k, v in pairs(config.layout.win_opts) do
vim.wo[aer_winid][k] = v
vim.api.nvim_set_option_value(k, v, { scope = "local", win = aer_winid })
end
vim.api.nvim_win_set_var(aer_winid, "is_aerial_win", true)