feat: Better border configuration.
Started adding `resolve` which will allow you to do some really nice stuff easily with options to get the window options from a variety of inputs. You can see how we do it in pickers.lua for borders & borderchars currently.
This commit is contained in:
@@ -79,8 +79,12 @@ That's the next step to scrolling.
|
||||
width = ...
|
||||
}
|
||||
|
||||
|
||||
|
||||
--]]
|
||||
|
||||
local get_default = require('telescope.utils').get_default
|
||||
|
||||
local resolver = {}
|
||||
|
||||
local percentage_resolver = function(selector, percentage)
|
||||
@@ -100,4 +104,52 @@ resolver.resolve_percentage_width = function(percentage)
|
||||
return percentage_resolver(2, percentage)
|
||||
end
|
||||
|
||||
--- Win option always returns a table with preview, results, and prompt.
|
||||
--- It handles many different ways. Some examples are as follows:
|
||||
--
|
||||
-- -- Disable
|
||||
-- borderschars = false
|
||||
--
|
||||
-- -- All three windows share the same
|
||||
-- borderchars = { '─', '│', '─', '│', '┌', '┐', '┘', '└'},
|
||||
--
|
||||
-- -- Each window gets it's own configuration
|
||||
-- borderchars = {
|
||||
-- preview = {...},
|
||||
-- results = {...},
|
||||
-- prompt = {...},
|
||||
-- }
|
||||
--
|
||||
-- -- Default to [1] but override with specific items
|
||||
-- borderchars = {
|
||||
-- {...}
|
||||
-- prompt = {...},
|
||||
-- }
|
||||
resolver.win_option = function(val, default)
|
||||
if type(val) ~= 'table' or vim.tbl_islist(val) then
|
||||
if val == nil then
|
||||
val = default
|
||||
end
|
||||
|
||||
return {
|
||||
preview = val,
|
||||
results = val,
|
||||
prompt = val,
|
||||
}
|
||||
elseif type(val) == 'table' then
|
||||
assert(not vim.tbl_islist(val))
|
||||
|
||||
local val_to_set = val[1]
|
||||
if val_to_set == nil then
|
||||
val_to_set = default
|
||||
end
|
||||
|
||||
return {
|
||||
preview = get_default(val.preview, val_to_set),
|
||||
results = get_default(val.results, val_to_set),
|
||||
prompt = get_default(val.prompt, val_to_set),
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
return resolver
|
||||
@@ -3,6 +3,7 @@ local popup = require('popup')
|
||||
|
||||
local actions = require('telescope.actions')
|
||||
local config = require('telescope.config')
|
||||
local resolve = require('telescope.config.resolve')
|
||||
local layout_strategies = require('telescope.pickers.layout_strategies')
|
||||
local log = require('telescope.log')
|
||||
local mappings = require('telescope.mappings')
|
||||
@@ -134,28 +135,28 @@ function Picker:new(opts)
|
||||
end
|
||||
|
||||
function Picker:_get_initial_window_options(prompt_title)
|
||||
local popup_border = self.window.border
|
||||
local popup_borderchars = self.window.borderchars
|
||||
local popup_border = resolve.win_option(self.window.border)
|
||||
local popup_borderchars = resolve.win_option(self.window.borderchars)
|
||||
|
||||
local preview = {
|
||||
title = 'Preview',
|
||||
border = popup_border,
|
||||
borderchars = popup_borderchars,
|
||||
border = popup_border.preview,
|
||||
borderchars = popup_borderchars.preview,
|
||||
enter = false,
|
||||
highlight = false
|
||||
}
|
||||
|
||||
local results = {
|
||||
title = 'Results',
|
||||
border = popup_border,
|
||||
borderchars = popup_borderchars,
|
||||
border = popup_border.results,
|
||||
borderchars = popup_borderchars.results,
|
||||
enter = false,
|
||||
}
|
||||
|
||||
local prompt = {
|
||||
title = prompt_title,
|
||||
border = popup_border,
|
||||
borderchars = popup_borderchars,
|
||||
border = popup_border.prompt,
|
||||
borderchars = popup_borderchars.prompt,
|
||||
enter = true
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user