diff --git a/README.md b/README.md index 8b8dfbacfc9..d2071fa4305 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ require("nvim-tree").setup() require("nvim-tree").setup({ sort_by = "case_sensitive", view = { - adaptive_size = true, + width = 30, mappings = { list = { { key = "u", action = "dir_up" }, diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 2075c42195e..cbc5d42aff6 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -81,6 +81,7 @@ Setup should be run in a lua file or in a |lua-heredoc| if using in a vim file. require("nvim-tree").setup({ sort_by = "case_sensitive", view = { + width = 30, mappings = { list = { { key = "u", action = "dir_up" }, @@ -733,13 +734,17 @@ Window / buffer setup. Type: `string | number | function | table`, Default: `30` *nvim-tree.view.width.min* - Minimum dynamic width. + Minimum dynamic width. Type: `string | number | function`, Default: `30` *nvim-tree.view.width.max* - Maximum dynamic width, -1 for unbounded. + Maximum dynamic width, -1 for unbounded. Type: `string | number | function`, Default: `-1` + *nvim-tree.view.width.padding* + Extra padding to the right. + Type: `string | number | function`, Default: `1` + *nvim-tree.view.side* Side of the tree, can be `"left"`, `"right"`. Type: `string`, Default: `"left"` diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index 2a7e48638ef..f38f2e5489a 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -6,6 +6,7 @@ local log = require "nvim-tree.log" local DEFAULT_MIN_WIDTH = 30 local DEFAULT_MAX_WIDTH = -1 +local DEFAULT_PADDING = 1 M.View = { adaptive_size = false, @@ -102,7 +103,6 @@ local function create_buffer(bufnr) end local function get_size(size) - size = size or M.View.width if type(size) == "number" then return size elseif type(size) == "function" then @@ -113,6 +113,11 @@ local function get_size(size) return math.floor(vim.o.columns * percent_as_decimal) end +local function get_width(size) + size = size or M.View.width + return get_size(size) +end + local move_tbl = { left = "H", right = "L", @@ -249,8 +254,16 @@ end local function grow() local starts_at = M.is_root_folder_visible(require("nvim-tree.core").get_cwd()) and 1 or 0 local lines = vim.api.nvim_buf_get_lines(M.get_bufnr(), starts_at, -1, false) - -- 1 column of right-padding to indicate end of path - local padding = 3 + -- number of columns of right-padding to indicate end of path + local padding = get_size(M.View.padding) + + -- account for sign/number columns etc. + local wininfo = vim.fn.getwininfo(M.get_winnr()) + if type(wininfo) == "table" and type(wininfo[1]) == "table" then + padding = padding + wininfo[1].textoff + end + print(padding) + local resizing_width = M.View.initial_width - padding local max_width @@ -258,7 +271,7 @@ local function grow() if M.View.max_width == -1 then max_width = -1 else - max_width = get_size(M.View.max_width) - padding + max_width = get_width(M.View.max_width) - padding end for _, l in pairs(lines) do @@ -310,7 +323,7 @@ function M.resize(size) return end - local new_size = get_size() + local new_size = get_width() vim.api.nvim_win_set_width(M.get_winnr(), new_size) events._dispatch_on_tree_resize(new_size) @@ -517,12 +530,13 @@ function M.setup(opts) M.View.adaptive_size = true M.View.width = options.width.min or DEFAULT_MIN_WIDTH M.View.max_width = options.width.max or DEFAULT_MAX_WIDTH + M.View.padding = options.width.padding or DEFAULT_PADDING else M.View.adaptive_size = false M.View.width = options.width end - M.View.initial_width = get_size() + M.View.initial_width = get_width() end return M