summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTJ DeVries <devries.timothyj@gmail.com>2020-09-12 14:56:58 -0400
committerTJ DeVries <devries.timothyj@gmail.com>2020-09-12 14:56:58 -0400
commitf449c0499ca63e653c9829c2e40bff7594e9eb23 (patch)
treeb9fa4cc01c589234fc8c5f9b9b313002a6e56629
parent58ab225dca31607c4a2e1a5fbebdb26b5be1d5e1 (diff)
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.
-rw-r--r--lua/telescope/config/resolve.lua (renamed from lua/telescope/pickers/config_collapse.lua)52
-rw-r--r--lua/telescope/pickers.lua17
-rw-r--r--lua/tests/manual/resolver_spec.lua58
-rw-r--r--plugin/telescope.vim8
4 files changed, 127 insertions, 8 deletions
diff --git a/lua/telescope/pickers/config_collapse.lua b/lua/telescope/config/resolve.lua
index ee59c10..5aa9c84 100644
--- a/lua/telescope/pickers/config_collapse.lua
+++ b/lua/telescope/config/resolve.lua
@@ -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
diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua
index cd83b3c..d402b39 100644
--- a/lua/telescope/pickers.lua
+++ b/lua/telescope/pickers.lua
@@ -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
}
diff --git a/lua/tests/manual/resolver_spec.lua b/lua/tests/manual/resolver_spec.lua
new file mode 100644
index 0000000..b71e560
--- /dev/null
+++ b/lua/tests/manual/resolver_spec.lua
@@ -0,0 +1,58 @@
+RELOAD('telescope')
+
+local resolve = require('telescope.config.resolve')
+
+local eq = function(a, b)
+ if a ~= b then
+ error(string.format(
+ "Expected a == b, got: %s and %s", vim.inspect(a), vim.inspect(b)
+ ))
+ end
+end
+
+local opt = nil
+
+local height_config = 0.8
+opt = resolve.win_option(height_config)
+
+eq(height_config, opt.preview)
+eq(height_config, opt.prompt)
+eq(height_config, opt.results)
+
+opt = resolve.win_option(nil, height_config)
+
+eq(height_config, opt.preview)
+eq(height_config, opt.prompt)
+eq(height_config, opt.results)
+
+local table_val = {'a'}
+opt = resolve.win_option(nil, table_val)
+eq(table_val, opt.preview)
+eq(table_val, opt.prompt)
+eq(table_val, opt.results)
+
+local prompt_override = {'a', prompt = 'b'}
+opt = resolve.win_option(prompt_override)
+eq('a', opt.preview)
+eq('a', opt.results)
+eq('b', opt.prompt)
+
+local all_specified = {preview = 'a', prompt = 'b', results = 'c'}
+opt = resolve.win_option(all_specified)
+eq('a', opt.preview)
+eq('b', opt.prompt)
+eq('c', opt.results)
+
+local some_specified = {prompt = 'b', results = 'c'}
+opt = resolve.win_option(some_specified, 'a')
+eq('a', opt.preview)
+eq('b', opt.prompt)
+eq('c', opt.results)
+
+-- local true_table = {true}
+-- opt = resolve.win_option(some_specified, 'a')
+-- eq('a', opt.preview)
+-- eq('b', opt.prompt)
+-- eq('c', opt.results)
+
+print("DONE!")
diff --git a/plugin/telescope.vim b/plugin/telescope.vim
index 3a333c9..0361f3e 100644
--- a/plugin/telescope.vim
+++ b/plugin/telescope.vim
@@ -5,6 +5,14 @@ highlight default link TelescopeSelection Visual
" "Normal" in the floating windows created by telescope.
highlight default link TelescopeNormal Normal
+" Border highlight groups.
+" Use TelescopeBorder to override the default.
+" Otherwise set them specifically
+highlight default link TelescopeBorder TelescopeNormal
+highlight default link TelescopePromptBorder TelescopeBorder
+highlight default link TelescopeResultsBorder TelescopeBorder
+highlight default link TelescopePreviewBorder TelescopeBorder
+
" This is like "<C-R>" in your terminal.
" To use it, do `cmap <C-R> <Plug>(TelescopeFuzzyCommandSearch)