diff options
Diffstat (limited to 'lua/telescope/mappings.lua')
| -rw-r--r-- | lua/telescope/mappings.lua | 104 |
1 files changed, 69 insertions, 35 deletions
diff --git a/lua/telescope/mappings.lua b/lua/telescope/mappings.lua index ba618d4..6c8641c 100644 --- a/lua/telescope/mappings.lua +++ b/lua/telescope/mappings.lua @@ -29,14 +29,14 @@ end --[[ Usage: -mappings.apply_keymap(42, { +mappings.apply_keymap(42, <function>, { n = { ["<leader>x"] = "just do this string", ["<CR>"] = function(picker, prompt_bufnr) actions.close_prompt() - local filename = ... +> local filename = ... vim.cmd(string.format(":e %s", filename)) end, }, @@ -45,41 +45,75 @@ mappings.apply_keymap(42, { } }) --]] -mappings.apply_keymap = function(prompt_bufnr, buffer_keymap) +local telescope_map = function(prompt_bufnr, mode, key_bind, key_func, opts) + opts = opts or { + silent = true + } + + if type(key_func) == "string" then + a.nvim_buf_set_keymap( + prompt_bufnr, + mode, + key_bind, + key_func, + opts or { + silent = true + } + ) + else + local key_id = assign_function(prompt_bufnr, key_func) + local prefix = "" + + local map_string + if opts.expr then + map_string = string.format( + [[luaeval("require('telescope.mappings').execute_keymap(%s, %s)")]], + prompt_bufnr, + key_id + ) + else + if mode == "i" and not opts.expr then + prefix = "<C-O>" + end + + map_string = string.format( + "%s:lua require('telescope.mappings').execute_keymap(%s, %s)<CR>", + prefix, + prompt_bufnr, + key_id + ) + end + + a.nvim_buf_set_keymap( + prompt_bufnr, + mode, + key_bind, + map_string, + opts + ) + end +end + +mappings.apply_keymap = function(prompt_bufnr, attach_mappings, buffer_keymap) + local applied_mappings = { n = {}, i = {} } + + local map = function(mode, key_bind, key_func, opts) + applied_mappings[mode][key_bind] = true + + telescope_map(prompt_bufnr, mode, key_bind, key_func, opts) + end + + if attach_mappings and not attach_mappings(map) then + return + end + for mode, mode_map in pairs(buffer_keymap) do - for key_bind, key_func in pairs(mode_map) do - if type(key_func) == "string" then - a.nvim_buf_set_keymap( - prompt_bufnr, - mode, - key_bind, - key_func, - { - silent = true - } - ) - else - local key_id = assign_function(prompt_bufnr, key_func) - local prefix = "" - if mode == "i" then - prefix = "<C-O>" - end - - a.nvim_buf_set_keymap( - prompt_bufnr, - mode, - key_bind, - string.format( - "%s:lua require('telescope.mappings').execute_keymap(%s, %s)<CR>", - prefix, - prompt_bufnr, - key_id - ), - { - silent = true - } - ) + -- TODO: Probalby should not overwrite any keymaps + -- local buffer_keymaps + for key_bind, key_func in pairs(mode_map) do + if not applied_mappings[mode][key_bind] then + telescope_map(prompt_bufnr, mode, key_bind, key_func) end end end |
