Files
keycodex/lua/plugins/tools/telescope-multiopen.lua
T
2024-08-13 02:48:13 +05:45

68 lines
2.2 KiB
Lua

local actions = require('telescope.actions')
local action_state = require('telescope.actions.state')
local transform_mod = require('telescope.actions.mt').transform_mod
local function multiopen(prompt_bufnr, method)
local cmd_map = {
vertical = 'vsplit',
horizontal = 'split',
tab = 'tabe',
default = 'edit',
}
local picker = action_state.get_current_picker(prompt_bufnr)
local multi_selection = picker:get_multi_selection()
if #multi_selection > 0 then
require('telescope.pickers').on_close_prompt(prompt_bufnr)
pcall(vim.api.nvim_set_current_win, picker.original_win_id)
for i, entry in ipairs(multi_selection) do
local cmd = i == 1 and 'edit' or cmd_map[method]
vim.cmd(string.format('%s %s', cmd, entry.value))
end
else
actions['select_' .. method](prompt_bufnr)
end
end
local custom_actions = transform_mod({
multi_selection_open_vertical = function(prompt_bufnr)
multiopen(prompt_bufnr, 'vertical')
end,
multi_selection_open_horizontal = function(prompt_bufnr)
multiopen(prompt_bufnr, 'horizontal')
end,
multi_selection_open_tab = function(prompt_bufnr)
multiopen(prompt_bufnr, 'tab')
end,
multi_selection_open = function(prompt_bufnr)
multiopen(prompt_bufnr, 'default')
end,
})
local function stopinsert(callback)
return function(prompt_bufnr)
vim.cmd.stopinsert()
vim.schedule(function()
callback(prompt_bufnr)
end)
end
end
local multi_open_mappings = {
i = {
['<C-v>'] = stopinsert(custom_actions.multi_selection_open_vertical),
['<C-x>'] = stopinsert(custom_actions.multi_selection_open_horizontal),
['<C-t>'] = stopinsert(custom_actions.multi_selection_open_tab),
['<CR>'] = stopinsert(custom_actions.multi_selection_open),
},
n = {
['<C-v>'] = custom_actions.multi_selection_open_vertical,
['<C-x>'] = custom_actions.multi_selection_open_horizontal,
['<C-t>'] = custom_actions.multi_selection_open_tab,
['<CR>'] = custom_actions.multi_selection_open,
},
}
return multi_open_mappings