From 4f231b87814b2aec60e46adb44fcffff3a41d8ec Mon Sep 17 00:00:00 2001 From: James Trew Date: Mon, 22 Nov 2021 20:21:15 -0500 Subject: [PATCH] feat: add fixed width option closes #79 --- README.md | 1 + doc/symbols-outline.txt | 13 ++++++++++++- lua/symbols-outline/config.lua | 11 ++++++++++- lua/symbols-outline/view.lua | 7 +------ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 814b291..472b002 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ vim.g.symbols_outline = { show_guides = true, auto_preview = true, position = 'right', + relative_width = true, width = 25, show_numbers = false, show_relative_numbers = false, diff --git a/doc/symbols-outline.txt b/doc/symbols-outline.txt index a4b7f9b..2d5235b 100644 --- a/doc/symbols-outline.txt +++ b/doc/symbols-outline.txt @@ -123,10 +123,21 @@ position Type: 'right' or 'left' +----------------------------------------------------------------------------- +relative_width + + Whether the width of the window is relative to the current split or an + absolute width + + Default: true ~ + + Type: boolean + ----------------------------------------------------------------------------- width - How big the window is (relative to the current split) + Width of the window as a percentage of the current split + (`relative_width `= true) or as number of columns (`relative_width `= false) Default: 25 ~ diff --git a/lua/symbols-outline/config.lua b/lua/symbols-outline/config.lua index e171cd0..bf8321c 100644 --- a/lua/symbols-outline/config.lua +++ b/lua/symbols-outline/config.lua @@ -6,6 +6,7 @@ M.defaults = { highlight_hovered_item = true, show_guides = true, position = 'right', + relative_width = true, width = 25, auto_preview = true, show_numbers = false, @@ -68,7 +69,15 @@ function M.get_position_navigation_direction() end end -function M.get_width_percentage() return M.options.width / 100 end +function M.get_window_width() + if M.options.relative_width then + -- local current_win_width = vim.api.nvim_win_get_width(0) + return math.ceil(vim.api.nvim_win_get_width(0) * (M.options.width / 100)) + else + return M.options.width + end +end + function M.get_split_command() if M.options.position == 'left' then diff --git a/lua/symbols-outline/view.lua b/lua/symbols-outline/view.lua index 5c9a8ec..5dd9dde 100644 --- a/lua/symbols-outline/view.lua +++ b/lua/symbols-outline/view.lua @@ -11,15 +11,10 @@ function M.setup_view() -- delete buffer when window is closed / buffer is hidden vim.api.nvim_buf_set_option(bufnr, "bufhidden", "delete") - - local current_win = vim.api.nvim_get_current_win() - local current_win_width = vim.api.nvim_win_get_width(current_win) - -- create a split vim.cmd(config.get_split_command()) -- resize to a % of the current window size - vim.cmd("vertical resize " .. - math.ceil(current_win_width * config.get_width_percentage())) + vim.cmd("vertical resize " .. config.get_window_width()) -- get current (outline) window and attach our buffer to it local winnr = vim.api.nvim_get_current_win()