From 9d4670c74898c6050546580c71211746b9bb8aa7 Mon Sep 17 00:00:00 2001 From: Senghan Bright Date: Thu, 28 Jan 2021 22:39:05 +0100 Subject: [PATCH] feat: allow a callback to be called on on_lines update (for filtering tags from query text) (#455) * allow a callback to be called on on_lines update * . * remove unused _filter_marker var * nit: Move to table and implement 'close' Co-authored-by: TJ DeVries --- lua/telescope/finders.lua | 4 +++- lua/telescope/pickers.lua | 13 ++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lua/telescope/finders.lua b/lua/telescope/finders.lua index 7bc4ec5..cf616b0 100644 --- a/lua/telescope/finders.lua +++ b/lua/telescope/finders.lua @@ -11,6 +11,8 @@ local _callable_obj = function() obj.__index = obj obj.__call = function(t, ...) return t:_find(...) end + obj.close = function() end + return obj end @@ -33,7 +35,7 @@ local JobFinder = _callable_obj() function JobFinder:new(opts) opts = opts or {} -> assert(not opts.results, "`results` should be used with finder.new_table") + assert(not opts.results, "`results` should be used with finder.new_table") assert(not opts.static, "`static` should be used with finder.new_oneshot_job") local obj = setmetatable({ diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua index 4165ec5..403371f 100644 --- a/lua/telescope/pickers.lua +++ b/lua/telescope/pickers.lua @@ -76,6 +76,7 @@ function Picker:new(opts) default_text = opts.default_text, get_status_text = get_default(opts.get_status_text, config.values.get_status_text), + _on_input_filter_cb = opts.on_input_filter_cb or function() end, finder = opts.finder, sorter = opts.sorter, @@ -445,7 +446,17 @@ function Picker:find() return end - local prompt = self:_get_prompt() + local original_prompt = self:_get_prompt() + local on_input_result = self._on_input_filter_cb(original_prompt) or {} + + local prompt = on_input_result.prompt or original_prompt + local finder = on_input_result.updated_finder + + if finder then + self.finder:close() + self.finder = finder + end + if self.sorter then self.sorter:_start(prompt) end