Skip to content

Commit

Permalink
feat: set defaults for each picker in telescope setup
Browse files Browse the repository at this point in the history
  • Loading branch information
Conni2461 committed Jun 1, 2021
1 parent 57ac8dc commit 01be067
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 3 deletions.
1 change: 1 addition & 0 deletions .luacheckrc
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ globals = {
"TelescopeCachedTails",
"TelescopeCachedNgrams",
"_TelescopeConfigurationValues",
"_TelescopeConfigurationPickers",
"__TelescopeKeymapStore",
}

Expand Down
37 changes: 37 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,43 @@ EOF
| `file_ignore_patterns` | Pattern to be ignored `{ "scratch/.*", "%.env" }` | dict |
| `shorten_path` | Whether to shorten paths or not. | boolean |

### Customize Default Builtin behavior

You can customize each default builtin behavior by adding the prefered options
into the table that is passed into `require("telescope").setup()`.

Example:

```lua
require("telescope").setup {
defaults = {
-- Your defaults config goes in here
},
pickers = {
-- Your special builtin config goes in here
buffers = {
sort_lastused = true,
theme = "dropdown",
previewer = false,
mappings = {
i = {
["<c-d>"] = require("telescope.actions").delete_buffer,
},
n = {
["<c-d>"] = require("telescope.actions").delete_buffer,
}
}
},
find_files = {
theme = "dropdown"
}
},
extensions = {
-- your extension config goes in here
}
}
```

## Mappings

Mappings are fully customizable.
Expand Down
76 changes: 73 additions & 3 deletions lua/telescope/builtin/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,37 @@
---
--- <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,
--- },
--- 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
Expand Down Expand Up @@ -322,4 +350,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
10 changes: 10 additions & 0 deletions lua/telescope/config.lua
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
-- Keep the values around between reloads
_TelescopeConfigurationValues = _TelescopeConfigurationValues or {}
_TelescopeConfigurationPickers = _TelescopeConfigurationPickers or {}

local function first_non_null(...)
local n = select('#', ...)
Expand Down Expand Up @@ -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 {}
Expand Down
1 change: 1 addition & 0 deletions lua/telescope/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down

0 comments on commit 01be067

Please sign in to comment.