From b49ee9666d7f8a3a18f42fdf1d402c3a4b2d7484 Mon Sep 17 00:00:00 2001 From: j-hui Date: Mon, 20 Nov 2023 11:50:58 -0500 Subject: [PATCH 1/4] feat(#2544): add API for querying win ID, api.tree.winid() --- doc/nvim-tree-lua.txt | 12 ++++++++++++ lua/nvim-tree/api.lua | 2 ++ lua/nvim-tree/view.lua | 11 +++++++++++ 3 files changed, 25 insertions(+) diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 9633d9e9946..91e30df6737 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -1698,6 +1698,18 @@ tree.is_visible({opts}) *nvim-tree-api.tree.is_visible()* Return: ~ (boolean) nvim-tree is visible +tree.winid({opts}) *nvim-tree-api.tree.winid()* + Retrieve the winid of the open tree. + + Parameters: ~ + • {opts} (table) optional parameters + + Options: ~ + • {tabpage} (number) tabpage, 0 for current, default 0 + + Return: ~ + (number) winid or nil if tree is not visible + ============================================================================== 6.2 API FILE SYSTEM *nvim-tree-api.fs* diff --git a/lua/nvim-tree/api.lua b/lua/nvim-tree/api.lua index 0b8df43f88e..6f17f64e341 100644 --- a/lua/nvim-tree/api.lua +++ b/lua/nvim-tree/api.lua @@ -145,6 +145,8 @@ Api.tree.is_tree_buf = wrap(require("nvim-tree.utils").is_nvim_tree_buf) Api.tree.is_visible = wrap(require("nvim-tree.view").is_visible) +Api.tree.winid = wrap(require("nvim-tree.view").winid) + Api.fs.create = wrap_node_or_nil(require("nvim-tree.actions.fs.create-file").fn) Api.fs.remove = wrap_node(require("nvim-tree.actions.fs.remove-file").fn) Api.fs.trash = wrap_node(require("nvim-tree.actions.fs.trash").fn) diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index 2b54df6a8d7..a06b866f74d 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -427,6 +427,17 @@ function M.focus(winnr, open_if_closed) vim.api.nvim_set_current_win(wnr) end +--- Retrieve the winid of the open tree. +--- Unlike get_winnr(), this returns nil if the nvim-tree window is not visible. +function M.winid(opts) + local tabpage = opts and opts.tabpage + if M.is_visible { tabpage = tabpage } then + return M.get_winnr(tabpage) + else + return nil + end +end + --- Restores the state of a NvimTree window if it was initialized before. function M.restore_tab_state() local tabpage = vim.api.nvim_get_current_tabpage() From f78e9d5d3dc1a532b25fea9e3870cf31e2599c46 Mon Sep 17 00:00:00 2001 From: John Hui <11800204+j-hui@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:47:32 -0500 Subject: [PATCH 2/4] Document winid() opts Co-authored-by: Alexander Courtis --- lua/nvim-tree/api.lua | 3 +++ lua/nvim-tree/view.lua | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lua/nvim-tree/api.lua b/lua/nvim-tree/api.lua index 6f17f64e341..886ff345f63 100644 --- a/lua/nvim-tree/api.lua +++ b/lua/nvim-tree/api.lua @@ -145,6 +145,9 @@ Api.tree.is_tree_buf = wrap(require("nvim-tree.utils").is_nvim_tree_buf) Api.tree.is_visible = wrap(require("nvim-tree.view").is_visible) +---@class ApiTreeWinIdOpts +---@field tabpage number|nil default nil + Api.tree.winid = wrap(require("nvim-tree.view").winid) Api.fs.create = wrap_node_or_nil(require("nvim-tree.actions.fs.create-file").fn) diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index a06b866f74d..ffe0c2cdff2 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -428,7 +428,8 @@ function M.focus(winnr, open_if_closed) end --- Retrieve the winid of the open tree. ---- Unlike get_winnr(), this returns nil if the nvim-tree window is not visible. +--- @param opts ApiTreeWinIdOpts|nil +--- @return number|nil winid unlike get_winnr(), this returns nil if the nvim-tree window is not visible function M.winid(opts) local tabpage = opts and opts.tabpage if M.is_visible { tabpage = tabpage } then From 8f8ce580d40887fb78fa0fc2ba0836ea01c7ab4c Mon Sep 17 00:00:00 2001 From: John Hui <11800204+j-hui@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:48:22 -0500 Subject: [PATCH 3/4] Fix winid() docs Co-authored-by: Alexander Courtis --- doc/nvim-tree-lua.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 91e30df6737..691611fdd27 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -1705,7 +1705,7 @@ tree.winid({opts}) *nvim-tree-api.tree.winid()* • {opts} (table) optional parameters Options: ~ - • {tabpage} (number) tabpage, 0 for current, default 0 + • {tabpage} (number|nil) tabpage, 0 or nil for current, default nil Return: ~ (number) winid or nil if tree is not visible From 1cba6daef316c544d1c4873af5a751d4f02b4e51 Mon Sep 17 00:00:00 2001 From: j-hui Date: Mon, 20 Nov 2023 20:52:04 -0500 Subject: [PATCH 4/4] Handle case where tabpage = 0 --- lua/nvim-tree/view.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index ffe0c2cdff2..c6dc4ef1e9f 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -432,6 +432,9 @@ end --- @return number|nil winid unlike get_winnr(), this returns nil if the nvim-tree window is not visible function M.winid(opts) local tabpage = opts and opts.tabpage + if tabpage == 0 then + tabpage = vim.api.nvim_get_current_tabpage() + end if M.is_visible { tabpage = tabpage } then return M.get_winnr(tabpage) else