summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorSimon Hauser <Simon-Hauser@outlook.de>2021-06-09 19:51:03 +0200
committerGitHub <noreply@github.com>2021-06-09 19:51:03 +0200
commit618e0e6075b4215e43c6a848daa37ef4e354b5dc (patch)
tree1d14ef2c80c4b919ea2b516788ed515d9ed49b7c /lua
parentfeaed4b6e23bd56906089154f293f2b1ecb68c7e (diff)
feat: set defaults for each picker in telescope setup (#883)
This allows easier picker configuration for example: ```lua require("telescope").setup { pickers = { buffers = { show_all_buffers = true, sort_lastused = true, theme = "dropdown", previewer = false, mappings = { i = { ["<c-q>"] = "smart_send_to_qflist", } } } } } ``` This configuration will be applied when running `:Telescope buffers`
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/builtin/init.lua78
-rw-r--r--lua/telescope/config.lua10
-rw-r--r--lua/telescope/init.lua1
-rw-r--r--lua/telescope/mappings.lua81
4 files changed, 131 insertions, 39 deletions
diff --git a/lua/telescope/builtin/init.lua b/lua/telescope/builtin/init.lua
index 265196e..ca02a00 100644
--- a/lua/telescope/builtin/init.lua
+++ b/lua/telescope/builtin/init.lua
@@ -14,9 +14,39 @@
---
--- <pre>
--- :lua require('telescope.builtin').live_grep({
---- prompt_title = 'find string in open buffers...',
---- grep_open_files = true
---- })
+--- prompt_title = 'find string in open buffers...',
+--- grep_open_files = true
+--- })
+--- -- or with dropdown theme
+--- :lua require('telescope.builtin').find_files(require('telescope.themes').get_dropdown{
+--- previewer = false
+--- })
+--- </pre>
+---
+--- You can also pass default configurations to builtin pickers. These options will also be added if
+--- the picker is executed with `Telescope find_files`.
+---
+--- <pre>
+--- require("telescope").setup {
+--- pickers = {
+--- buffers = {
+--- show_all_buffers = true,
+--- sort_lastused = true,
+--- theme = "dropdown",
+--- previewer = false,
+--- mappings = {
+--- i = {
+--- ["<c-d>"] = require("telescope.actions").delete_buffer,
+--- -- or right hand side can also be a the name of the action as string
+--- ["<c-d>"] = "delete_buffer",
+--- },
+--- n = {
+--- ["<c-d>"] = require("telescope.actions").delete_buffer,
+--- }
+--- }
+--- }
+--- }
+--- }
--- </pre>
---
--- This will use the default configuration options. Other configuration options are still in flux at the moment
@@ -325,4 +355,46 @@ builtin.lsp_document_diagnostics = require('telescope.builtin.lsp').diagnostics
---@field hide_filename boolean: if true, hides the name of the file in the current picker (default is false)
builtin.lsp_workspace_diagnostics = require('telescope.builtin.lsp').workspace_diagnostics
+local apply_config = function(mod)
+ local pickers_conf = require('telescope.config').pickers
+ for k, v in pairs(mod) do
+ local pconf = vim.deepcopy(pickers_conf[k] or {})
+ if pconf.theme then
+ local theme = pconf.theme
+ pconf.theme = nil
+ pconf = require("telescope.themes")["get_" .. theme](pconf)
+ end
+ if pconf.mappings then
+ local mappings = pconf.mappings
+ pconf.mappings = nil
+ pconf.attach_mappings = function(_, map)
+ for mode, tbl in pairs(mappings) do
+ for key, action in pairs(tbl) do
+ map(mode, key, action)
+ end
+ end
+ return true
+ end
+ end
+ mod[k] = function(opts)
+ opts = opts or {}
+ if pconf.attach_mappings and opts.attach_mappings then
+ local attach_mappings = pconf.attach_mappings
+ pconf.attach_mappings = nil
+ local opts_attach = opts.attach_mappings
+ opts.attach_mappings = function(prompt_bufnr, map)
+ attach_mappings(prompt_bufnr, map)
+ return opts_attach(prompt_bufnr, map)
+ end
+ end
+
+ v(vim.tbl_extend("force", pconf, opts))
+ end
+ end
+
+ return mod
+end
+
+-- We can't do this in one statement because tree-sitter-lua docgen gets confused if we do
+builtin = apply_config(builtin)
return builtin
diff --git a/lua/telescope/config.lua b/lua/telescope/config.lua
index c62e21b..2c1b463 100644
--- a/lua/telescope/config.lua
+++ b/lua/telescope/config.lua
@@ -1,5 +1,6 @@
-- Keep the values around between reloads
_TelescopeConfigurationValues = _TelescopeConfigurationValues or {}
+_TelescopeConfigurationPickers = _TelescopeConfigurationPickers or {}
local function first_non_null(...)
local n = select('#', ...)
@@ -45,6 +46,15 @@ local config = {}
config.values = _TelescopeConfigurationValues
config.descriptions = {}
+config.pickers = _TelescopeConfigurationPickers
+
+function config.set_pickers(pickers)
+ pickers = pickers or {}
+
+ for k, v in pairs(pickers) do
+ config.pickers[k] = v
+ end
+end
function config.set_defaults(defaults)
defaults = defaults or {}
diff --git a/lua/telescope/init.lua b/lua/telescope/init.lua
index 7353755..41acb57 100644
--- a/lua/telescope/init.lua
+++ b/lua/telescope/init.lua
@@ -37,6 +37,7 @@ function telescope.setup(opts)
end
require('telescope.config').set_defaults(opts.defaults)
+ require('telescope.config').set_pickers(opts.pickers)
_extensions.set_config(opts.extensions)
end
diff --git a/lua/telescope/mappings.lua b/lua/telescope/mappings.lua
index d6ebe04..bfc153c 100644
--- a/lua/telescope/mappings.lua
+++ b/lua/telescope/mappings.lua
@@ -111,51 +111,60 @@ local telescope_map = function(prompt_bufnr, mode, key_bind, key_func, opts)
if opts.silent == nil then opts.silent = true end
if type(key_func) == "string" then
- a.nvim_buf_set_keymap(
+ key_func = actions[key_func]
+ elseif type(key_func) == "table" then
+ if key_func.type == "command" then
+ a.nvim_buf_set_keymap(
+ prompt_bufnr,
+ mode,
+ key_bind,
+ key_func[1],
+ opts or {
+ silent = true
+ }
+ )
+ return
+ elseif key_func.type == "action_key" then
+ key_func = actions[key_func[1]]
+ elseif key_func.type == "action" then
+ key_func = key_func[1]
+ end
+ end
+
+ local key_id = assign_function(prompt_bufnr, key_func)
+ local prefix
+
+ local map_string
+ if opts.expr then
+ map_string = string.format(
+ [[luaeval("require('telescope.mappings').execute_keymap(%s, %s)")]],
prompt_bufnr,
- mode,
- key_bind,
- key_func,
- opts or {
- silent = true
- }
+ key_id
)
else
- local key_id = assign_function(prompt_bufnr, key_func)
- local prefix
-
- local map_string
- if opts.expr then
- map_string = string.format(
- [[luaeval("require('telescope.mappings').execute_keymap(%s, %s)")]],
- prompt_bufnr,
- key_id
- )
+ if mode == "i" and not opts.expr then
+ prefix = "<cmd>"
+ elseif mode == "n" then
+ prefix = ":<C-U>"
else
- if mode == "i" and not opts.expr then
- prefix = "<cmd>"
- elseif mode == "n" then
- prefix = ":<C-U>"
- else
- prefix = ":"
- end
-
- map_string = string.format(
- "%slua require('telescope.mappings').execute_keymap(%s, %s)<CR>",
- prefix,
- prompt_bufnr,
- key_id
- )
+ prefix = ":"
end
- a.nvim_buf_set_keymap(
+ map_string = string.format(
+ "%slua require('telescope.mappings').execute_keymap(%s, %s)<CR>",
+ prefix,
prompt_bufnr,
- mode,
- key_bind,
- map_string,
- opts
+ key_id
)
end
+
+ a.nvim_buf_set_keymap(
+ prompt_bufnr,
+ mode,
+ key_bind,
+ map_string,
+ opts
+ )
end
mappings.apply_keymap = function(prompt_bufnr, attach_mappings, buffer_keymap)