From deb1f253f48ac0287db0440bd1c54353307c9a32 Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Sat, 9 Apr 2022 09:56:22 -0300 Subject: [PATCH] fix(statusline): better window picker highlight (#1139) --- lua/nvim-tree/actions/open-file.lua | 38 ++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/lua/nvim-tree/actions/open-file.lua b/lua/nvim-tree/actions/open-file.lua index e1641dc4..84a73e9a 100644 --- a/lua/nvim-tree/actions/open-file.lua +++ b/lua/nvim-tree/actions/open-file.lua @@ -58,17 +58,23 @@ local function pick_window() local laststatus = vim.o.laststatus vim.o.laststatus = 2 + local not_selectable = vim.tbl_filter(function(id) + return not vim.tbl_contains(selectable, id) + end, win_ids) + if laststatus == 3 then - local ok_status, statusline = pcall(api.nvim_win_get_option, tree_winid, "statusline") - local ok_hl, winhl = pcall(api.nvim_win_get_option, tree_winid, "winhl") + for _, win_id in ipairs(not_selectable) do + local ok_status, statusline = pcall(api.nvim_win_get_option, win_id, "statusline") + local ok_hl, winhl = pcall(api.nvim_win_get_option, win_id, "winhl") - win_opts[tree_winid] = { - statusline = ok_status and statusline or "", - winhl = ok_hl and winhl or "", - } + win_opts[win_id] = { + statusline = ok_status and statusline or "", + winhl = ok_hl and winhl or "", + } - api.nvim_win_set_option(tree_winid, "statusline", " ") - api.nvim_win_set_option(tree_winid, "winhl", "StatusLine:NvimTreeWindowPicker") + -- Clear statusline for windows not selectable + api.nvim_win_set_option(win_id, "statusline", " ") + end end -- Setup UI @@ -106,13 +112,19 @@ local function pick_window() end if laststatus == 3 then - for opt, value in pairs(win_opts[tree_winid]) do - api.nvim_win_set_option(tree_winid, opt, value) + for _, id in ipairs(not_selectable) do + for opt, value in pairs(win_opts[id]) do + api.nvim_win_set_option(id, opt, value) + end end end vim.o.laststatus = laststatus + if not vim.tbl_contains(vim.split(M.window_picker.chars, ""), resp) then + return + end + return win_map[resp] end @@ -168,7 +180,11 @@ function M.fn(mode, filename) if not M.window_picker.enable or mode == "edit_no_picker" then target_winid = lib.target_winid else - target_winid = pick_window() + local pick_window_id = pick_window() + if pick_window_id == nil then + return + end + target_winid = pick_window_id end if target_winid == -1 then