feat: refine with new_table
This commit is contained in:
committed by
Simon Hauser
parent
a0a038170d
commit
ef9137d85c
@@ -24,6 +24,10 @@
|
|||||||
---@brief ]]
|
---@brief ]]
|
||||||
|
|
||||||
local actions = require "telescope.actions"
|
local actions = require "telescope.actions"
|
||||||
|
local config = require "telescope.config"
|
||||||
|
local action_state = require "telescope.actions.state"
|
||||||
|
local finders = require "telescope.finders"
|
||||||
|
|
||||||
local action_generate = {}
|
local action_generate = {}
|
||||||
|
|
||||||
--- Display the keymaps of registered actions similar to which-key.nvim.<br>
|
--- Display the keymaps of registered actions similar to which-key.nvim.<br>
|
||||||
@@ -54,4 +58,56 @@ action_generate.which_key = function(opts)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
action_generate.refine = function(prompt_bufnr, opts)
|
||||||
|
opts = opts or {}
|
||||||
|
opts.prompt_to_prefix = vim.F.if_nil(opts.prompt_to_prefix, false)
|
||||||
|
opts.prefix_hl_group = vim.F.if_nil(opts.prompt_hl_group, "TelescopePromptPrefix")
|
||||||
|
opts.prompt_prefix = vim.F.if_nil(opts.promt_prefix, config.values.prompt_prefix)
|
||||||
|
opts.reset_multi_selection = vim.F.if_nil(opts.reset_multi_selection, false)
|
||||||
|
opts.reset_prompt = vim.F.if_nil(opts.reset_prompt, true)
|
||||||
|
opts.sorter = vim.F.if_nil(opts.sorter, config.values.generic_sorter {})
|
||||||
|
|
||||||
|
local current_picker = action_state.get_current_picker(prompt_bufnr)
|
||||||
|
|
||||||
|
-- title
|
||||||
|
if opts.prompt_title then
|
||||||
|
current_picker.prompt_border:change_title(opts.prompt_title)
|
||||||
|
end
|
||||||
|
|
||||||
|
if opts.results_title then
|
||||||
|
current_picker.results_border:change_title(opts.results_title)
|
||||||
|
end
|
||||||
|
|
||||||
|
local results = {}
|
||||||
|
for entry in current_picker.manager:iter() do
|
||||||
|
table.insert(results, entry)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- if opts.sorter == false, keep older sorter
|
||||||
|
if opts.sorter then
|
||||||
|
current_picker.sorter:_destroy()
|
||||||
|
current_picker.sorter = opts.sorter
|
||||||
|
current_picker.sorter:_init()
|
||||||
|
end
|
||||||
|
|
||||||
|
local new_finder = finders.new_table {
|
||||||
|
results = results,
|
||||||
|
entry_maker = function(x)
|
||||||
|
return x
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
if not opts.reset_multi_selection and action_state.get_current_line() ~= "" then
|
||||||
|
opts.multi = current_picker._multi
|
||||||
|
end
|
||||||
|
|
||||||
|
if opts.prompt_to_prefix then
|
||||||
|
local prompt = action_state.get_current_line()
|
||||||
|
local current_prefix = current_picker.prompt_prefix
|
||||||
|
local suffix = current_prefix ~= opts.prompt_prefix and current_prefix or ""
|
||||||
|
opts.new_prefix = suffix .. prompt .. " " .. opts.prompt_prefix
|
||||||
|
end
|
||||||
|
current_picker:refresh(new_finder, opts)
|
||||||
|
end
|
||||||
|
|
||||||
return action_generate
|
return action_generate
|
||||||
|
|||||||
@@ -111,6 +111,16 @@ files.live_grep = function(opts)
|
|||||||
-- TODO: It would be cool to use `--json` output for this
|
-- TODO: It would be cool to use `--json` output for this
|
||||||
-- and then we could get the highlight positions directly.
|
-- and then we could get the highlight positions directly.
|
||||||
sorter = sorters.highlighter_only(opts),
|
sorter = sorters.highlighter_only(opts),
|
||||||
|
attach_mappings = function(_, map)
|
||||||
|
map("i", "<c-space>", function(prompt_bufnr)
|
||||||
|
local line = action_state.get_current_line()
|
||||||
|
require("telescope.actions.generate").refine(prompt_bufnr, {
|
||||||
|
prompt_title = "Find Word (" .. line .. ")",
|
||||||
|
sorter = conf.generic_sorter(opts),
|
||||||
|
})
|
||||||
|
end)
|
||||||
|
return true
|
||||||
|
end,
|
||||||
}):find()
|
}):find()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
local channel = require("plenary.async.control").channel
|
local channel = require("plenary.async.control").channel
|
||||||
|
local action_state = require "telescope.actions.state"
|
||||||
|
local sorters = require "telescope.sorters"
|
||||||
local conf = require("telescope.config").values
|
local conf = require("telescope.config").values
|
||||||
local finders = require "telescope.finders"
|
local finders = require "telescope.finders"
|
||||||
local make_entry = require "telescope.make_entry"
|
local make_entry = require "telescope.make_entry"
|
||||||
@@ -315,7 +316,17 @@ lsp.dynamic_workspace_symbols = function(opts)
|
|||||||
fn = get_workspace_symbols_requester(opts.bufnr, opts),
|
fn = get_workspace_symbols_requester(opts.bufnr, opts),
|
||||||
},
|
},
|
||||||
previewer = conf.qflist_previewer(opts),
|
previewer = conf.qflist_previewer(opts),
|
||||||
sorter = conf.generic_sorter(opts),
|
sorter = sorters.highlighter_only(opts),
|
||||||
|
attach_mappings = function(_, map)
|
||||||
|
map("i", "<c-space>", function(prompt_bufnr)
|
||||||
|
local line = action_state.get_current_line()
|
||||||
|
require("telescope.actions.generate").refine(prompt_bufnr, {
|
||||||
|
prompt_title = "LSP Workspace Symbols (" .. line .. ")",
|
||||||
|
sorter = conf.generic_sorter(opts),
|
||||||
|
})
|
||||||
|
end)
|
||||||
|
return true
|
||||||
|
end,
|
||||||
}):find()
|
}):find()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ return function(opts)
|
|||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
results = results,
|
results = results,
|
||||||
|
entry_maker = entry_maker,
|
||||||
}, {
|
}, {
|
||||||
__call = function(_, prompt, process_result, process_complete)
|
__call = function(_, prompt, process_result, process_complete)
|
||||||
if not job_started then
|
if not job_started then
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ return function(opts)
|
|||||||
|
|
||||||
return setmetatable({
|
return setmetatable({
|
||||||
results = results,
|
results = results,
|
||||||
|
entry_maker = entry_maker,
|
||||||
close = function() end,
|
close = function() end,
|
||||||
}, {
|
}, {
|
||||||
__call = function(_, _, process_result, process_complete)
|
__call = function(_, _, process_result, process_complete)
|
||||||
|
|||||||
@@ -911,7 +911,7 @@ function Picker:refresh(finder, opts)
|
|||||||
local handle = type(opts.new_prefix) == "table" and unpack or function(x)
|
local handle = type(opts.new_prefix) == "table" and unpack or function(x)
|
||||||
return x
|
return x
|
||||||
end
|
end
|
||||||
self:change_prompt_prefix(handle(opts.new_prefix))
|
self:change_prompt_prefix(handle(opts.new_prefix), opts.prefix_hl_group)
|
||||||
end
|
end
|
||||||
|
|
||||||
if finder then
|
if finder then
|
||||||
|
|||||||
Reference in New Issue
Block a user