feat: option to include_extensions in builtin picker (#953)

- add option `include_extensions` which defaults to `false`
- if `include_extensions` is `true` then add functions from extensions to results
- update `actions.run_builtin` to check if extension function provided
This commit is contained in:
Luke Kershaw
2021-07-03 22:31:45 +01:00
committed by GitHub
parent bdd0df73a6
commit a5608b9026
2 changed files with 28 additions and 3 deletions

View File

@@ -333,8 +333,17 @@ actions.run_builtin = function(prompt_bufnr)
local entry = action_state.get_selected_entry(prompt_bufnr) local entry = action_state.get_selected_entry(prompt_bufnr)
actions._close(prompt_bufnr, true) actions._close(prompt_bufnr, true)
if string.match(entry.text," : ") then
-- Call appropriate function from extensions
local split_string = vim.split(entry.text," : ")
local ext = split_string[1]
local func = split_string[2]
require('telescope').extensions[ext][func]()
else
-- Call appropriate telescope builtin
require('telescope.builtin')[entry.text]() require('telescope.builtin')[entry.text]()
end end
end
actions.insert_symbol = function(prompt_bufnr) actions.insert_symbol = function(prompt_bufnr)
local selection = action_state.get_selected_entry() local selection = action_state.get_selected_entry()

View File

@@ -21,6 +21,7 @@ local internal = {}
internal.builtin = function(opts) internal.builtin = function(opts)
opts.hide_filename = utils.get_default(opts.hide_filename, true) opts.hide_filename = utils.get_default(opts.hide_filename, true)
opts.ignore_filename = utils.get_default(opts.ignore_filename, true) opts.ignore_filename = utils.get_default(opts.ignore_filename, true)
opts.include_extensions = utils.get_default(opts.include_extensions, false)
local objs = {} local objs = {}
@@ -32,8 +33,23 @@ internal.builtin = function(opts)
}) })
end end
local title = 'Telescope Builtin'
if opts.include_extensions then
title = 'Telescope Pickers'
for ext, funcs in pairs(require'telescope'.extensions) do
for func_name, func_obj in pairs(funcs) do
local debug_info = debug.getinfo(func_obj)
table.insert(objs, {
filename = string.sub(debug_info.source, 2),
text = string.format("%s : %s", ext, func_name),
})
end
end
end
pickers.new(opts, { pickers.new(opts, {
prompt_title = 'Telescope Builtin', prompt_title = title,
finder = finders.new_table { finder = finders.new_table {
results = objs, results = objs,
entry_maker = function(entry) entry_maker = function(entry)