summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/config/resolve.lua40
-rw-r--r--lua/telescope/pickers.lua5
-rw-r--r--lua/tests/manual/resolver_spec.lua7
3 files changed, 41 insertions, 11 deletions
diff --git a/lua/telescope/config/resolve.lua b/lua/telescope/config/resolve.lua
index 5aa9c84..b00d66c 100644
--- a/lua/telescope/config/resolve.lua
+++ b/lua/telescope/config/resolve.lua
@@ -87,21 +87,41 @@ local get_default = require('telescope.utils').get_default
local resolver = {}
-local percentage_resolver = function(selector, percentage)
- assert(percentage <= 1)
- assert(percentage >= 0)
+local _resolve_map = {
+ -- Percentages
+ [function(val) return type(val) == 'number' and val > 0 and val <= 1 end] = function(selector, val)
+ return function(...)
+ return math.floor(val * select(selector, ...))
+ end
+ end,
+
+ -- Numbers
+ [function(val) return type(val) == 'number' and val > 1 end] = function(selector, val)
+ return function(...)
+ return math.min(val, select(selector, ...))
+ end
+ end,
+
+}
- return function(...)
- return percentage * select(selector, ...)
+resolver.resolve_height = function(val)
+ for k, v in pairs(_resolve_map) do
+ if k(val) then
+ return v(3, val)
+ end
end
-end
-resolver.resolve_percentage_height = function(percentage)
- return percentage_resolver(3, percentage)
+ error('invalid configuration option for height:' .. tostring(val))
end
-resolver.resolve_percentage_width = function(percentage)
- return percentage_resolver(2, percentage)
+resolver.resolve_width = function(val)
+ for k, v in pairs(_resolve_map) do
+ if k(val) then
+ return v(2, val)
+ end
+ end
+
+ error('invalid configuration option for height:' .. tostring(val))
end
--- Win option always returns a table with preview, results, and prompt.
diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua
index 8ce8587..4336558 100644
--- a/lua/telescope/pickers.lua
+++ b/lua/telescope/pickers.lua
@@ -288,7 +288,6 @@ function Picker:find()
a.nvim_win_set_option(prompt_win, 'winblend', self.window.winblend)
a.nvim_win_set_option(prompt_win, 'winhl', 'Normal:TelescopeNormal')
- pcall(a.nvim_buf_set_option, prompt_bufnr, 'filetype', 'TelescopePrompt')
-- a.nvim_buf_set_option(prompt_bufnr, 'buftype', 'prompt')
-- vim.fn.prompt_setprompt(prompt_bufnr, prompt_string)
@@ -311,6 +310,7 @@ function Picker:find()
local displayed_amount = 0
local displayed_fn_amount = 0
+ -- TODO: Entry manager should have a "bulk" setter. This can prevent a lot of redraws from display
self.manager = pickers.entry_manager(
self.max_results,
vim.schedule_wrap(function(index, entry)
@@ -471,6 +471,9 @@ function Picker:find()
mappings.apply_keymap(prompt_bufnr, self.attach_mappings, default_mappings)
+ -- Do filetype last, so that users can register at the last second.
+ pcall(a.nvim_buf_set_option, prompt_bufnr, 'filetype', 'TelescopePrompt')
+
if self.default_text then
vim.api.nvim_buf_set_lines(prompt_bufnr, 0, 1, false, {self.default_text})
end
diff --git a/lua/tests/manual/resolver_spec.lua b/lua/tests/manual/resolver_spec.lua
index b71e560..24f62cf 100644
--- a/lua/tests/manual/resolver_spec.lua
+++ b/lua/tests/manual/resolver_spec.lua
@@ -49,6 +49,13 @@ eq('a', opt.preview)
eq('b', opt.prompt)
eq('c', opt.results)
+
+eq(10, resolve.resolve_height(0.1)(nil, 24, 100))
+eq(2, resolve.resolve_width(0.1)(nil, 24, 100))
+
+eq(10, resolve.resolve_width(10)(nil, 24, 100))
+eq(24, resolve.resolve_width(50)(nil, 24, 100))
+
-- local true_table = {true}
-- opt = resolve.win_option(some_specified, 'a')
-- eq('a', opt.preview)