summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Hauser <Simon-Hauser@outlook.de>2020-11-02 23:00:23 +0100
committerGitHub <noreply@github.com>2020-11-02 17:00:23 -0500
commitaba433c52229268b563ac14f4d07781275d03923 (patch)
tree18dcf1cbe975a5411f9c023ee680302c0f15aa90
parent54ef9d90d5a032906bfb007113930dac0f665f72 (diff)
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>
-rw-r--r--README.md53
-rw-r--r--lua/telescope/actions.lua43
-rw-r--r--lua/telescope/mappings.lua4
3 files changed, 78 insertions, 22 deletions
diff --git a/README.md b/README.md
index 3a77aa0..ec06972 100644
--- a/README.md
+++ b/README.md
@@ -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
-
- So, to not map "<C-n>", just put
-
- ...,
- ["<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
- ...,
+```lua
+-- To disable a keymap, put [map] = false
+-- So, to not map "<C-n>", just put
+["<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 :).
diff --git a/lua/telescope/actions.lua b/lua/telescope/actions.lua
index 878ac0e..a35ffee 100644
--- a/lua/telescope/actions.lua
+++ b/lua/telescope/actions.lua
@@ -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
diff --git a/lua/telescope/mappings.lua b/lua/telescope/mappings.lua
index 561bc8b..766f861 100644
--- a/lua/telescope/mappings.lua
+++ b/lua/telescope/mappings.lua
@@ -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,