diff options
Diffstat (limited to 'lua/lspconfig/ui/windows.lua')
| -rw-r--r-- | lua/lspconfig/ui/windows.lua | 124 |
1 files changed, 3 insertions, 121 deletions
diff --git a/lua/lspconfig/ui/windows.lua b/lua/lspconfig/ui/windows.lua index dc02c9ef..616d30cd 100644 --- a/lua/lspconfig/ui/windows.lua +++ b/lua/lspconfig/ui/windows.lua @@ -1,129 +1,11 @@ --- The following is extracted and modified from plenary.vnim by --- TJ Devries. It is not a stable API, and is expected to change --- -local api = vim.api - -local function apply_defaults(original, defaults) - if original == nil then - original = {} - end - - original = vim.deepcopy(original) - - for k, v in pairs(defaults) do - if original[k] == nil then - original[k] = v - end - end - - return original -end - local win_float = {} win_float.default_options = {} -function win_float.default_opts(options) - options = apply_defaults(options, { percentage = 0.9 }) - - local width = math.floor(vim.o.columns * options.percentage) - local height = math.floor(vim.o.lines * options.percentage) - - local top = math.floor(((vim.o.lines - height) / 2)) - local left = math.floor((vim.o.columns - width) / 2) - - local opts = { - relative = 'editor', - row = top, - col = left, - width = width, - height = height, - style = 'minimal', - border = { - { ' ', 'NormalFloat' }, - { ' ', 'NormalFloat' }, - { ' ', 'NormalFloat' }, - { ' ', 'NormalFloat' }, - { ' ', 'NormalFloat' }, - { ' ', 'NormalFloat' }, - { ' ', 'NormalFloat' }, - { ' ', 'NormalFloat' }, - }, - } - - opts.border = options.border and options.border - - return opts +function win_float.default_opts() + return {} end ---- Create window that takes up certain percentags of the current screen. ---- ---- Works regardless of current buffers, tabs, splits, etc. ---@param col_range number | Table: --- If number, then center the window taking up this percentage of the screen. --- If table, first index should be start, second_index should be end ---@param row_range number | Table: --- If number, then center the window taking up this percentage of the screen. --- If table, first index should be start, second_index should be end -function win_float.percentage_range_window(col_range, row_range, options) - options = apply_defaults(options, win_float.default_options) - - local win_opts = win_float.default_opts(options) - win_opts.relative = 'editor' - - local height_percentage, row_start_percentage - if type(row_range) == 'number' then - assert(row_range <= 1) - assert(row_range > 0) - height_percentage = row_range - row_start_percentage = (1 - height_percentage) / 3 - elseif type(row_range) == 'table' then - height_percentage = row_range[2] - row_range[1] - row_start_percentage = row_range[1] - else - error(string.format("Invalid type for 'row_range': %p", row_range)) - end - - win_opts.height = math.ceil(vim.o.lines * height_percentage) - win_opts.row = math.ceil(vim.o.lines * row_start_percentage) - win_opts.border = options.border or 'none' - - local width_percentage, col_start_percentage - if type(col_range) == 'number' then - assert(col_range <= 1) - assert(col_range > 0) - width_percentage = col_range - col_start_percentage = (1 - width_percentage) / 2 - elseif type(col_range) == 'table' then - width_percentage = col_range[2] - col_range[1] - col_start_percentage = col_range[1] - else - error(string.format("Invalid type for 'col_range': %p", col_range)) - end - - win_opts.col = math.floor(vim.o.columns * col_start_percentage) - win_opts.width = math.floor(vim.o.columns * width_percentage) - - local bufnr = options.bufnr or api.nvim_create_buf(false, true) - local win_id = api.nvim_open_win(bufnr, true, win_opts) - api.nvim_win_set_option(win_id, 'winhl', 'FloatBorder:LspInfoBorder') - - for k, v in pairs(win_float.default_options) do - if k ~= 'border' then - vim.opt_local[k] = v - end - end - - api.nvim_win_set_buf(win_id, bufnr) - - api.nvim_win_set_option(win_id, 'cursorcolumn', false) - api.nvim_buf_set_option(bufnr, 'tabstop', 2) - api.nvim_buf_set_option(bufnr, 'shiftwidth', 2) - - return { - bufnr = bufnr, - win_id = win_id, - } -end +function win_float.percentage_range_window() end return win_float |
