Update attach_mappings to use new actions api (#249)

This commit is contained in:
Simon Hauser
2020-11-16 21:48:45 +01:00
committed by GitHub
parent 57a7769845
commit 749c86557e
2 changed files with 151 additions and 143 deletions

View File

@@ -201,11 +201,14 @@ end
["<C-i>"] = test_action, ["<C-i>"] = test_action,
-- If you want your function to run after another action you should define it as follows -- 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) local transform_mod = require('telescope.actions.mt').transform_mod
local test_action = transform_mod {
x = function()
print("This function ran after another action. Prompt_bufnr: " .. 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 -- Enter your function logic here. You can take inspiration from lua/telescope/actions.lua
end) end,
["<C-i>"] = actions.goto_file_selection_split + test_action }
["<C-i>"] = actions.goto_file_selection_split + test_action.x
``` ```
@@ -215,10 +218,13 @@ A full example:
local actions = require('telescope.actions') local actions = require('telescope.actions')
-- If you want your function to run after another action you should define it as follows -- 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) local transform_mod = require('telescope.actions.mt').transform_mod
local test_action = transform_mod {
x = function()
print("This function ran after another action. Prompt_bufnr: " .. 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 -- Enter your function logic here. You can take inspiration from lua/telescope/actions.lua
end) end,
}
require('telescope').setup { require('telescope').setup {
defaults = { defaults = {
@@ -259,6 +265,43 @@ function my_custom_picker(results)
end end
``` ```
To override a action, you have to use `attach_mappings` like this (prefered method):
```lua
function my_custom_picker(results)
pickers.new(opts, {
prompt_title = 'Custom Picker',
finder = finders.new_table(results),
sorter = sorters.fuzzy_with_index_bias(),
attach_mappings = function(prompt_bufnr)
-- This will replace goto_file_selection_edit no mather on which key it is mapped by default
actions.goto_file_selection_edit:replace(function()
-- Code here
end)
-- You can also enhance an action with post and post action which will run before of after an action
actions.goto_file_selection_split:enhance {
pre = function()
-- Will run before actions.goto_file_selection_split
end,
post = function()
-- Will run after actions.goto_file_selection_split
end,
}
-- Or replace for all commands: edit, new, vnew and tab
actions._goto_file_selection:replace(function(_, cmd)
print(cmd) -- Will print edit, new, vnew or tab depending on your keystroke
end)
return true
end,
}):find()
end
```
See `lua/telescope/builtin.lua` for examples on how to `attach_mappings` in the prefered way.
Additionally, the prompt's filetype will be `TelescopePrompt`. You can customize the filetype as you would normally. Additionally, the prompt's filetype will be `TelescopePrompt`. You can customize the filetype as you would normally.
## Status (Unstable API) ## Status (Unstable API)

View File

@@ -71,9 +71,9 @@ builtin.commands = function()
end end
}, },
sorter = conf.generic_sorter(), sorter = conf.generic_sorter(),
attach_mappings = function(prompt_bufnr, map) attach_mappings = function(prompt_bufnr)
local run_command = function() actions.goto_file_selection_edit:replace(function()
local selection = actions.get_selected_entry(prompt_bufnr) local selection = actions.get_selected_entry()
actions.close(prompt_bufnr) actions.close(prompt_bufnr)
local val = selection.value local val = selection.value
local cmd = string.format([[:%s ]], val.name) local cmd = string.format([[:%s ]], val.name)
@@ -84,11 +84,7 @@ builtin.commands = function()
vim.cmd [[stopinsert]] vim.cmd [[stopinsert]]
vim.fn.feedkeys(cmd) vim.fn.feedkeys(cmd)
end end
end)
end
map('i', '<CR>', run_command)
map('n', '<CR>', run_command)
return true return true
end end
@@ -225,9 +221,9 @@ builtin.lsp_code_actions = function(opts)
} }
end end
}, },
attach_mappings = function(prompt_bufnr, map) attach_mappings = function(prompt_bufnr)
local execute = function() actions.goto_file_selection_edit:replace(function()
local selection = actions.get_selected_entry(prompt_bufnr) local selection = actions.get_selected_entry()
actions.close(prompt_bufnr) actions.close(prompt_bufnr)
local val = selection.value local val = selection.value
@@ -241,10 +237,7 @@ builtin.lsp_code_actions = function(opts)
else else
vim.lsp.buf.execute_command(val) vim.lsp.buf.execute_command(val)
end end
end end)
map('i', '<CR>', execute)
map('n', '<CR>', execute)
return true return true
end, end,
@@ -406,12 +399,11 @@ builtin.vim_options = function(opts)
-- TODO: previewer for Vim options -- TODO: previewer for Vim options
-- previewer = previewers.help.new(opts), -- previewer = previewers.help.new(opts),
sorter = sorters.get_fzy_sorter(), sorter = sorters.get_fzy_sorter(),
attach_mappings = function(prompt_bufnr, map) attach_mappings = function(prompt_bufnr)
local edit_option = function() actions.goto_file_selection_edit:replace(function()
local selection = actions.get_selected_entry(prompt_bufnr) local selection = actions.get_selected_entry()
local esc = "" local esc = ""
if vim.fn.mode() == "i" then if vim.fn.mode() == "i" then
-- TODO: don't make this local -- TODO: don't make this local
esc = vim.api.nvim_replace_termcodes("<esc>", true, false, true) esc = vim.api.nvim_replace_termcodes("<esc>", true, false, true)
@@ -447,10 +439,7 @@ builtin.vim_options = function(opts)
-- vim.cmd[[redraw!]] -- vim.cmd[[redraw!]]
-- vim.cmd("autocmd CmdLineLeave : ++once echom 'beep'") -- vim.cmd("autocmd CmdLineLeave : ++once echom 'beep'")
vim.api.nvim_feedkeys(string.format("%s:set %s=%s", esc, selection.name, selection.current_value), "m", true) vim.api.nvim_feedkeys(string.format("%s:set %s=%s", esc, selection.name, selection.current_value), "m", true)
end end)
map('i', '<CR>', edit_option)
map('n', '<CR>', edit_option)
return true return true
end end
@@ -478,37 +467,18 @@ builtin.help_tags = function(opts)
-- TODO: previewer for Vim help -- TODO: previewer for Vim help
previewer = previewers.help.new(opts), previewer = previewers.help.new(opts),
sorter = conf.generic_sorter(opts), sorter = conf.generic_sorter(opts),
attach_mappings = function(prompt_bufnr, map) attach_mappings = function(prompt_bufnr)
local open = function(cmd) actions._goto_file_selection:replace(function(_, cmd)
local selection = actions.get_selected_entry(prompt_bufnr) local selection = actions.get_selected_entry()
actions.close(prompt_bufnr) actions.close(prompt_bufnr)
vim.cmd(cmd .. selection.value) if cmd == 'edit' or cmd == 'new' then
vim.cmd('help ' .. selection.value)
elseif cmd == 'vnew' then
vim.cmd('vert bo help ' .. selection.value)
elseif cmd == 'tabedit' then
vim.cmd('tab help ' .. selection.value)
end end
local nhelp = function() end)
return open("help ")
end
local vhelp = function()
return open("vert bo help ")
end
local hhelp = function()
return open("help ")
-- Not sure how explictly make horizontal
end
local thelp = function()
return open("tab help ")
end
-- Perhaps it would be a good idea to have vsplit,tab,hsplit open
-- a builtin action that accepts a command to be ran before creating
-- the split or tab
map('i', '<CR>', nhelp)
map('n', '<CR>', nhelp)
map('i', '<C-v>', vhelp)
map('n', '<C-v>', vhelp)
map('i', '<C-x>', hhelp)
map('n', '<C-x>', hhelp)
map('i', '<C-t>', thelp)
map('n', '<C-t>', thelp)
return true return true
end end
@@ -538,17 +508,14 @@ builtin.reloader = function(opts)
-- previewer = previewers.vim_buffer.new(opts), -- previewer = previewers.vim_buffer.new(opts),
sorter = conf.generic_sorter(opts), sorter = conf.generic_sorter(opts),
attach_mappings = function(prompt_bufnr, map) attach_mappings = function(prompt_bufnr)
local reload_package = function() actions.goto_file_selection_edit:replace(function()
local selection = actions.get_selected_entry(prompt_bufnr) local selection = actions.get_selected_entry()
actions.close(prompt_bufnr) actions.close(prompt_bufnr)
require('plenary.reload').reload_module(selection.value) require('plenary.reload').reload_module(selection.value)
print(string.format("[%s] - module reloaded", selection.value)) print(string.format("[%s] - module reloaded", selection.value))
end end)
map('i', '<CR>', reload_package)
map('n', '<CR>', reload_package)
return true return true
end end
@@ -587,8 +554,8 @@ builtin.builtin = function(opts)
}, },
previewer = previewers.qflist.new(opts), previewer = previewers.qflist.new(opts),
sorter = conf.generic_sorter(opts), sorter = conf.generic_sorter(opts),
attach_mappings = function(_, map) attach_mappings = function(_)
map('i', '<CR>', actions.run_builtin) actions.goto_file_selection_edit:replace(actions.run_builtin)
return true return true
end end
}):find() }):find()
@@ -758,9 +725,9 @@ builtin.planets = function(opts)
}, },
previewer = previewers.cat.new(opts), previewer = previewers.cat.new(opts),
sorter = conf.generic_sorter(opts), sorter = conf.generic_sorter(opts),
attach_mappings = function(prompt_bufnr, map) attach_mappings = function(prompt_bufnr)
map('i', '<CR>', function() actions.goto_file_selection_edit:replace(function()
local selection = actions.get_selected_entry(prompt_bufnr) local selection = actions.get_selected_entry()
actions.close(prompt_bufnr) actions.close(prompt_bufnr)
print("Enjoy astronomy! You viewed:", selection.display) print("Enjoy astronomy! You viewed:", selection.display)
@@ -795,12 +762,12 @@ builtin.current_buffer_fuzzy_find = function(opts)
end end
}, },
sorter = sorters.get_generic_fuzzy_sorter(), sorter = sorters.get_generic_fuzzy_sorter(),
attach_mappings = function(prompt_bufnr) attach_mappings = function()
actions._goto_file_selection:enhance { actions._goto_file_selection:enhance {
post = vim.schedule_wrap(function() post = function()
local selection = actions.get_selected_entry(prompt_bufnr) local selection = actions.get_selected_entry()
vim.api.nvim_win_set_cursor(0, {selection.lnum, 0}) vim.api.nvim_win_set_cursor(0, {selection.lnum, 0})
end), end,
} }
return true return true
@@ -828,17 +795,19 @@ builtin.man_pages = function(opts)
}, },
previewer = previewers.man.new(opts), previewer = previewers.man.new(opts),
sorter = sorters.get_generic_fuzzy_sorter(), sorter = sorters.get_generic_fuzzy_sorter(),
attach_mappings = function(prompt_bufnr, map) attach_mappings = function(prompt_bufnr)
local view_manpage = function() actions._goto_file_selection:replace(function(_, cmd)
local selection = actions.get_selected_entry(prompt_bufnr) local selection = actions.get_selected_entry()
actions.close(prompt_bufnr) actions.close(prompt_bufnr)
print(vim.inspect(selection.value)) if cmd == 'edit' or cmd == 'new' then
vim.cmd("Man " .. selection.value) vim.cmd('Man ' .. selection.value)
elseif cmd == 'vnew' then
vim.cmd('vert bo Man ' .. selection.value)
elseif cmd == 'tabedit' then
vim.cmd('tab Man ' .. selection.value)
end end
end)
map('i', '<CR>', view_manpage)
map('n', '<CR>', view_manpage)
return true return true
end end
@@ -857,17 +826,13 @@ builtin.colorscheme = function(opts)
}, },
-- TODO: better preview? -- TODO: better preview?
sorter = sorters.get_generic_fuzzy_sorter(), sorter = sorters.get_generic_fuzzy_sorter(),
attach_mappings = function(prompt_bufnr, map) attach_mappings = function(prompt_bufnr)
local change_colorscheme = function() actions.goto_file_selection_edit:replace(function()
local selection = actions.get_selected_entry(prompt_bufnr) local selection = actions.get_selected_entry()
actions.close(prompt_bufnr) actions.close(prompt_bufnr)
print(vim.inspect(selection.value))
vim.cmd("colorscheme " .. selection.value) vim.cmd("colorscheme " .. selection.value)
end end)
map('i', '<CR>', change_colorscheme)
map('n', '<CR>', change_colorscheme)
return true return true
end end