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 +```lua +-- To disable a keymap, put [map] = false +-- So, to not map "", just put +[""] = false, +-- Into your config. - So, to not map "", just put +-- Otherwise, just set the mapping to the function that you want it to be. +[""] = actions.goto_file_selection_split, - ..., - [""] = false, - ..., - - Into your config. - - Otherwise, just set the mapping to the function that you want it to be. - - ..., - [""] = 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 +[""] = 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) +[""] = 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 mapping [""] = actions.goto_file_selection_split, + + -- Add up multiple actions + [""] = actions.goto_file_selection_edit + actions.center, + + -- You can perform as many actions in a row as you like + [""] = 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 f :lua require'telescope.builtin'.find_files(require('telescope.themes').get_dropdown({ winblend = 10 })) ``` -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 { [""] = actions.move_selection_next, [""] = actions.move_selection_previous, - [""] = actions.goto_file_selection_edit, + [""] = actions.goto_file_selection_edit + actions.center, [""] = actions.goto_file_selection_split, [""] = actions.goto_file_selection_vsplit, [""] = actions.goto_file_selection_tabedit, @@ -30,7 +30,7 @@ mappings.default_mappings = config.values.default_mappings or { n = { [""] = actions.close, - [""] = actions.goto_file_selection_edit, + [""] = actions.goto_file_selection_edit + actions.center, [""] = actions.goto_file_selection_split, [""] = actions.goto_file_selection_vsplit, [""] = actions.goto_file_selection_tabedit,