diff options
Diffstat (limited to 'lua/core')
-rw-r--r-- | lua/core/harpoon.lua | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/lua/core/harpoon.lua b/lua/core/harpoon.lua new file mode 100644 index 0000000..4d20828 --- /dev/null +++ b/lua/core/harpoon.lua @@ -0,0 +1,57 @@ +local pickers = require("telescope.pickers") +local finders = require("telescope.finders") +local conf = require("telescope.config").values +local actions = require("telescope.actions") +local action_set = require("telescope.actions.set") +local action_state = require("telescope.actions.state") +local harpoon = require('harpoon') + +local M = {} + +function M.switcher() + local filepaths = {} + for _, item in ipairs(harpoon:list().items) do + table.insert(filepaths, item.value) + end + + pickers.new({ + prompt_title = "Harpoon", + finder = finders.new_table { results = filepaths }, + sorter = conf.generic_sorter(), + previewer = conf.file_previewer {}, + attach_mappings = function(prompt_bufnr, map) + actions.move_selection_previous:replace(function() + action_set.shift_selection(prompt_bufnr, -1) + end) + actions.move_selection_next:replace(function() + action_set.shift_selection(prompt_bufnr, 1) + end) + + -- remove harpoon item + -- TODO: + + -- select items, and open buffer + vim.keymap.set("n", "<C-v>", function() + if action_state.get_selected_entry() then + actions.close(prompt_bufnr) + vim.cmd("vsplit "..action_state.get_selected_entry()[1]) + end + end) + vim.keymap.set({ "n", "i" }, "<C-s>", function() + if action_state.get_selected_entry() then + actions.close(prompt_bufnr) + vim.cmd("split "..action_state.get_selected_entry()[1]) + end + end) + actions.select_default:replace(function() + if action_state.get_selected_entry() then + actions.close(prompt_bufnr) + vim.cmd("e "..action_state.get_selected_entry()[1]) + end + end) + return true + end + }):find() +end + +return M |