Files
telescope.nvim/developers.md
Simon Hauser 4dd35ef0e1 feat: file browser & refresh interface (#290)
and more picker api stuff for sunjon. refresh is implemented for file_browser and git_status
2021-02-23 22:10:19 +01:00

57 lines
1.9 KiB
Markdown

## Overriding actions/action_set
How to override what different functions / keys do.
TODO: Talk about what actions vs actions sets are
### Relevant Files
- `lua/telescope/actions/init.lua`
- The most "user-facing" of the files, which has the actions we provide builtin
- `lua/telescope/actions/set.lua`
- The second most "user-facing" of the files. This provides actions that are consumed by several builtin actions, which allows for only overriding ONE item, instead of copying the same configuration / function several times.
- `lua/telescope/actions/state.lua`
- Provides APIs for interacting with the state of telescope while in actions.
- These are most useful for writing your own actions and interacting with telescope at that time
- `lua/telescope/actions/mt.lua`
- You probably don't need to look at this, but it defines the behavior of actions.
### `:replace(function)`
Directly override an action with a new function
```lua
local actions = require('telescope.actions')
actions.select_default:replace(git_checkout_function)
```
### `:replace_if(conditional, function)`
Override an action only when `conditional` returns true.
```lua
local action_set = require('telescope.actions.set')
action_set.select:replace_if(
function()
return action_state.get_selected_entry().path:sub(-1) == os_sep
end, function(_, type)
-- type is { "default", "horizontal", "vertical", "tab" }
local path = actions.get_selected_entry().path
action_state.get_current_picker(prompt_bufnr):refresh(gen_new_finder(new_cwd), { reset_prompt = true})
end
)
```
### `:replace_map(configuration)`
```lua
local action_set = require('telescope.actions.set')
-- Use functions as keys to map to which function to execute when called.
action_set.select:replace_map {
[function(e) return e > 0 end] = function(e) return (e / 10) end,
[function(e) return e == 0 end] = function(e) return (e + 10) end,
}
```