feat: Actions can now be summed up and center action (#204)

Closes: #182 

* Actions can now be summed up and center action

* fix: Make some complicated changes for metatable

* Update documentation

Co-authored-by: TJ DeVries <devries.timothyj@gmail.com>
This commit is contained in:
Simon Hauser
2020-11-02 23:00:23 +01:00
committed by GitHub
parent 54ef9d90d5
commit aba433c522
3 changed files with 76 additions and 20 deletions

View File

@@ -184,23 +184,28 @@ To see the full list of mappings, check out `lua/telescope/mappings.lua` and the
To override ALL of the default mappings, you can use the `default_mappings` key in the `setup` table.
```
To disable a keymap, put [map] = false
```lua
-- To disable a keymap, put [map] = false
-- So, to not map "<C-n>", just put
["<C-n>"] = false,
-- Into your config.
So, to not map "<C-n>", just put
-- Otherwise, just set the mapping to the function that you want it to be.
["<C-i>"] = actions.goto_file_selection_split,
...,
["<C-n>"] = false,
...,
Into your config.
Otherwise, just set the mapping to the function that you want it to be.
...,
["<C-i>"] = actions.goto_file_selection_split
...,
-- You can also define your own functions, which then can be mapped to a key
local function test_action(prompt_bufnr)
print("Action was attached with prompt_bufnr: ", prompt_bufnr)
-- Enter your function logic here. You can take inspiration from lua/telescope/actions.lua
end
["<C-i>"] = test_action,
-- If you want your function to run after another action you should define it as follows
local test_action = actions._transform_action(function(prompt_bufnr)
print("This function ran after another action. Prompt_bufnr: " .. prompt_bufnr)
-- Enter your function logic here. You can take inspiration from lua/telescope/actions.lua
end)
["<C-i>"] = actions.goto_file_selection_split + test_action
```
@@ -209,6 +214,12 @@ A full example:
```lua
local actions = require('telescope.actions')
-- If you want your function to run after another action you should define it as follows
local test_action = actions._transform_action(function(prompt_bufnr)
print("This function ran after another action. Prompt_bufnr: " .. prompt_bufnr)
-- Enter your function logic here. You can take inspiration from lua/telescope/actions.lua
end)
require('telescope').setup {
defaults = {
mappings = {
@@ -218,6 +229,12 @@ require('telescope').setup {
-- Create a new <c-s> mapping
["<c-s>"] = actions.goto_file_selection_split,
-- Add up multiple actions
["<CR>"] = actions.goto_file_selection_edit + actions.center,
-- You can perform as many actions in a row as you like
["<CR>"] = actions.goto_file_selection_edit + actions.center + test_action,
},
},
}
@@ -379,7 +396,7 @@ Use the telescope.
## Themes
Common groups of settings can be setup to allow for themes. We have some built in themes but are looking for more cool options.
Common groups of settings can be setup to allow for themes. We have some built in themes but are looking for more cool options.
### Dropdown
@@ -395,7 +412,7 @@ Then you can put your configuration into `get_dropdown({})`
nnoremap <Leader>f :lua require'telescope.builtin'.find_files(require('telescope.themes').get_dropdown({ winblend = 10 }))<cr>
```
Themes should work with every `telescope.builtin` function.
Themes should work with every `telescope.builtin` function.
If you wish to make theme, check out `lua/telescope/themes.lua`. If you need more features, make an issue :).

View File

@@ -12,6 +12,37 @@ local actions = setmetatable({}, {
end
})
local action_mt = {
__call = function(t, ...)
local values = {}
for _, v in ipairs(t) do
local result = {v(...)}
for _, res in ipairs(result) do
table.insert(values, res)
end
end
return unpack(values)
end,
__add = function(lhs, rhs)
local new_actions = {}
for _, v in ipairs(lhs) do
table.insert(new_actions, v)
end
for _, v in ipairs(rhs) do
table.insert(new_actions, v)
end
return setmetatable(new_actions, getmetatable(lhs))
end
}
local transform_action = function(a)
return setmetatable({a}, action_mt)
end
--- Get the current picker object for the prompt
function actions.get_current_picker(prompt_bufnr)
return state.get_status(prompt_bufnr).picker
@@ -51,7 +82,6 @@ end
-- TODO: It seems sometimes we get bad styling.
local function goto_file_selection(prompt_bufnr, command)
local picker = actions.get_current_picker(prompt_bufnr)
local entry = actions.get_selected_entry(prompt_bufnr)
if not entry then
@@ -90,7 +120,6 @@ local function goto_file_selection(prompt_bufnr, command)
a.nvim_win_set_config(preview_win, {style = ''})
end
local original_win_id = picker.original_win_id or 0
local entry_bufnr = entry.bufnr
actions.close(prompt_bufnr)
@@ -117,6 +146,10 @@ local function goto_file_selection(prompt_bufnr, command)
end
end
function actions.center(_)
vim.cmd(':normal! zz')
end
function actions.goto_file_selection_edit(prompt_bufnr)
goto_file_selection(prompt_bufnr, "edit")
end
@@ -185,4 +218,10 @@ actions.insert_value = function(prompt_bufnr)
return entry.value
end
for k, v in pairs(actions) do
actions[k] = transform_action(v)
end
actions._transform_action = transform_action
return actions

View File

@@ -16,7 +16,7 @@ mappings.default_mappings = config.values.default_mappings or {
["<Down>"] = actions.move_selection_next,
["<Up>"] = actions.move_selection_previous,
["<CR>"] = actions.goto_file_selection_edit,
["<CR>"] = actions.goto_file_selection_edit + actions.center,
["<C-x>"] = actions.goto_file_selection_split,
["<C-v>"] = actions.goto_file_selection_vsplit,
["<C-t>"] = actions.goto_file_selection_tabedit,
@@ -30,7 +30,7 @@ mappings.default_mappings = config.values.default_mappings or {
n = {
["<esc>"] = actions.close,
["<CR>"] = actions.goto_file_selection_edit,
["<CR>"] = actions.goto_file_selection_edit + actions.center,
["<C-x>"] = actions.goto_file_selection_split,
["<C-v>"] = actions.goto_file_selection_vsplit,
["<C-t>"] = actions.goto_file_selection_tabedit,