From ffd93e7858424b1ef1320a69b1a830213bf67dd3 Mon Sep 17 00:00:00 2001 From: booperlv Date: Wed, 30 Jun 2021 00:34:36 +0800 Subject: [PATCH 1/3] add option to make width a percentage of "&columns" --- README.md | 2 +- doc/nvim-tree-lua.txt | 5 ++++- lua/nvim-tree/view.lua | 15 +++++++++++++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a384cfe2e1b..ac3d67a2cbe 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Plug 'kyazdani42/nvim-tree.lua' ```vim let g:nvim_tree_side = 'right' "left by default -let g:nvim_tree_width = 40 "30 by default +let g:nvim_tree_width = 40 "30 by default, can be width_in_columns or 'width_in_percent%' let g:nvim_tree_ignore = [ '.git', 'node_modules', '.cache' ] "empty by default let g:nvim_tree_gitignore = 1 "0 by default let g:nvim_tree_auto_open = 1 "0 by default, opens the tree when typing `vim $DIR` or `vim` diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 231020e4be9..7a90f57feb2 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -54,7 +54,10 @@ OPTIONS *nvim-tree-options* |g:nvim_tree_width| *g:nvim_tree_width* -width of the window (default to 30) +width of the window, can be *width_in_columns* or *'width_in_percent%'* +> + let g:nvim_tree_width = 30 " indicates width of 30 columns + let g:nvim_tree_width = '30%' " indicates width of 30% of '&columns' |g:nvim_tree_side| *g:nvim_tree_side* diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index 0d3efc3f19d..4d61b74eb78 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -202,12 +202,23 @@ function M.focus(winnr, open_if_closed) a.nvim_set_current_win(wnr) end +local function get_width() + if type(M.View.width) == "string" then + if vim.endswith(M.View.width, "%") then + local width_as_number = tonumber(M.View.width:match('[^%d]*([%d%.]+)%%')) + local percent_as_decimal = width_as_number / 100 + return math.floor(vim.o.columns * percent_as_decimal) + end + end + return M.View.width +end + function M.resize() if not a.nvim_win_is_valid(M.get_winnr()) then return end - a.nvim_win_set_width(M.get_winnr(), M.View.width) + a.nvim_win_set_width(M.get_winnr(), get_width()) end local move_tbl = { @@ -225,7 +236,7 @@ function M.open() a.nvim_command("vsp") local move_to = move_tbl[M.View.side] a.nvim_command("wincmd "..move_to) - a.nvim_command("vertical resize "..M.View.width) + a.nvim_command("vertical resize "..get_width()) local winnr = a.nvim_get_current_win() local tabpage = a.nvim_get_current_tabpage() M.View.tabpages[tabpage] = vim.tbl_extend("force", M.View.tabpages[tabpage] or {help = false}, {winnr = winnr}) From 6f48c0de437d0d4d57cf8de10ce171b7eafb36dd Mon Sep 17 00:00:00 2001 From: booperlv Date: Wed, 30 Jun 2021 11:52:49 +0800 Subject: [PATCH 2/3] changes to tree width percentage --- lua/nvim-tree/view.lua | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index 4d61b74eb78..effb647d070 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -203,14 +203,13 @@ function M.focus(winnr, open_if_closed) end local function get_width() - if type(M.View.width) == "string" then - if vim.endswith(M.View.width, "%") then - local width_as_number = tonumber(M.View.width:match('[^%d]*([%d%.]+)%%')) - local percent_as_decimal = width_as_number / 100 - return math.floor(vim.o.columns * percent_as_decimal) - end + if type(M.View.width) == "number" then + return M.View.width + elseif type(M.View.width) == "string" and vim.endswith(M.View.width, "%") then + local width_as_number = tonumber(M.View.width:sub(0, -2)) + local percent_as_decimal = width_as_number / 100 + return math.floor(vim.o.columns * percent_as_decimal) end - return M.View.width end function M.resize() From 0583d8d62df3d5eacd722c0134aec70ebe1d039b Mon Sep 17 00:00:00 2001 From: booperlv Date: Thu, 1 Jul 2021 03:21:29 +0800 Subject: [PATCH 3/3] width percentage function cleanup --- lua/nvim-tree/view.lua | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index effb647d070..f6acd0ff67e 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -205,11 +205,10 @@ end local function get_width() if type(M.View.width) == "number" then return M.View.width - elseif type(M.View.width) == "string" and vim.endswith(M.View.width, "%") then - local width_as_number = tonumber(M.View.width:sub(0, -2)) - local percent_as_decimal = width_as_number / 100 - return math.floor(vim.o.columns * percent_as_decimal) end + local width_as_number = tonumber(M.View.width:sub(0, -2)) + local percent_as_decimal = width_as_number / 100 + return math.floor(vim.o.columns * percent_as_decimal) end function M.resize()