summaryrefslogtreecommitdiff
path: root/lua/telescope/config/resolve.lua
diff options
context:
space:
mode:
authorTJ DeVries <devries.timothyj@gmail.com>2021-07-01 02:41:58 -0700
committerGitHub <noreply@github.com>2021-07-01 05:41:58 -0400
commit5a53ec5c2fdab10ca8775d3979b1a85e63d57953 (patch)
tree40c62f0a260a3328c3b5578c06a729b76d36d5cb /lua/telescope/config/resolve.lua
parente5bd4963da81b5d044749ee4507061801aeb0f78 (diff)
feat: Consistent and sensible layout_config (#922)
* feat: Consistent and sensible layout_config * [docgen] Update doc/telescope.txt skip-checks: true * [WIP]: Thu 17 Jun 2021 03:36:44 PM EDT * [WIP]: Thu 17 Jun 2021 03:38:11 PM EDT * layout_default -> layout_defaults * remove options from bug repot * Conni2461 suggestions: part 1 * [docgen] Update doc/telescope.txt skip-checks: true * Conni2461 suggestions: part 2 * [docgen] Update doc/telescope.txt skip-checks: true * Linting * Improve deprecation checks - Move `layout_defaults` handling to `deprecated.lua` - Check for "layout keys" outside of `layout_config` on `setup` * fixup: Just add a few more words Co-authored-by: Luke Kershaw <35707277+l-kershaw@users.noreply.github.com> Co-authored-by: Github Actions <actions@github>
Diffstat (limited to 'lua/telescope/config/resolve.lua')
-rw-r--r--lua/telescope/config/resolve.lua126
1 files changed, 91 insertions, 35 deletions
diff --git a/lua/telescope/config/resolve.lua b/lua/telescope/config/resolve.lua
index 464bffb..6881830 100644
--- a/lua/telescope/config/resolve.lua
+++ b/lua/telescope/config/resolve.lua
@@ -1,3 +1,8 @@
+---@tag telescope.resolve
+
+---@brief [[
+--- Provides "resolver functions" to allow more customisable inputs for options.
+---@brief ]]
--[[
@@ -40,7 +45,7 @@ height =
3. function(picker, columns, lines)
-> returns one of the above options
- return max.min(110, max_rows * .5)
+ return math.min(110, max_rows * .5)
if columns > 120 then
return 110
@@ -88,46 +93,80 @@ That's the next step to scrolling.
local get_default = require('telescope.utils').get_default
local resolver = {}
+local _resolve_map = {}
-local _resolve_map = {
- -- Booleans
- [function(val) return val == false end] = function(selector, val)
- return function(...)
- return val
- end
- end,
+-- Booleans
+_resolve_map[function(val) return val == false end] = function(_, val)
+ return function(...)
+ return val
+ end
+end
- -- Percentages
- [function(val) return type(val) == 'number' and val >= 0 and val < 1 end] = function(selector, val)
- return function(...)
- local selected = select(selector, ...)
- return math.floor(val * selected)
- end
- end,
+-- Percentages
+_resolve_map[function(val) return type(val) == 'number' and val >= 0 and val < 1 end] = function(selector, val)
+ return function(...)
+ local selected = select(selector, ...)
+ return math.floor(val * selected)
+ end
+end
- -- Numbers
- [function(val) return type(val) == 'number' and val >= 1 end] = function(selector, val)
- return function(...)
- local selected = select(selector, ...)
- return math.min(val, selected)
- end
- end,
+-- Numbers
+_resolve_map[function(val) return type(val) == 'number' and val >= 1 end] = function(selector, val)
+ return function(...)
+ local selected = select(selector, ...)
+ return math.min(val, selected)
+ end
+end
+-- Tables TODO:
+-- ... {70, max}
- -- Tables TODO:
- -- ... {70, max}
+-- function:
+-- Function must have same signature as get_window_layout
+-- function(self, max_columns, max_lines): number
+--
+-- Resulting number is used for this configuration value.
+_resolve_map[function(val) return type(val) == 'function' end] = function(_, val)
+ return val
+end
+-- Add padding option
+_resolve_map[function(val) return type(val) == 'table' and val['padding'] ~= nil end] = function(selector, val)
+ local resolve_pad = function(value)
+ for k, v in pairs(_resolve_map) do
+ if k(value) then
+ return v(selector, value)
+ end
+ end
+
+ error('invalid configuration option for padding:' .. tostring(value))
+ end
+
+ return function(...)
+ local selected = select(selector, ...)
+ local padding = resolve_pad(val['padding'])
+ return math.floor(selected - 2 * padding(...))
+ end
+end
- -- function:
- -- Function must have same signature as get_window_layout
- -- function(self, max_columns, max_lines): number
- --
- -- Resulting number is used for this configuration value.
- [function(val) return type(val) == 'function' end] = function(selector, val)
- return val
- end,
-}
+--- Converts input to a function that returns the height.
+--- The input must take one of four forms:
+--- 1. 0 <= number < 1 <br>
+--- This means total height as a percentage.
+--- 2. 1 <= number <br>
+--- This means total height as a fixed number.
+--- 3. function <br>
+--- Must have signature:
+--- function(self, max_columns, max_lines): number
+--- 4. table of the form: {padding = `foo`} <br>
+--- where `foo` has one of the previous three forms. <br>
+--- The height is then set to be the remaining space after padding.
+--- For example, if the window has height 50, and the input is {padding = 5},
+--- the height returned will be `40 = 50 - 2*5`
+---
+--- The returned function will have signature:
+--- function(self, max_columns, max_lines): number
resolver.resolve_height = function(val)
for k, v in pairs(_resolve_map) do
if k(val) then
@@ -138,6 +177,23 @@ resolver.resolve_height = function(val)
error('invalid configuration option for height:' .. tostring(val))
end
+--- Converts input to a function that returns the width.
+--- The input must take one of four forms:
+--- 1. 0 <= number < 1 <br>
+--- This means total width as a percentage.
+--- 2. 1 <= number <br>
+--- This means total width as a fixed number.
+--- 3. function <br>
+--- Must have signature:
+--- function(self, max_columns, max_lines): number
+--- 4. table of the form: {padding = `foo`} <br>
+--- where `foo` has one of the previous three forms. <br>
+--- The width is then set to be the remaining space after padding.
+--- For example, if the window has width 100, and the input is {padding = 5},
+--- the width returned will be `90 = 100 - 2*5`
+---
+--- The returned function will have signature:
+--- function(self, max_columns, max_lines): number
resolver.resolve_width = function(val)
for k, v in pairs(_resolve_map) do
if k(val) then
@@ -148,8 +204,8 @@ resolver.resolve_width = function(val)
error('invalid configuration option for width:' .. tostring(val))
end
---- Win option always returns a table with preview, results, and prompt.
---- It handles many different ways. Some examples are as follows:
+-- Win option always returns a table with preview, results, and prompt.
+-- It handles many different ways. Some examples are as follows:
--
-- -- Disable
-- borderschars = false