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 vim.keymap.set("i", "", function() if action_state.get_selected_entry() then for i, v in ipairs(filepaths) do if v == action_state.get_selected_entry()[1] then harpoon:list():removeAt(i) actions.close(prompt_bufnr) M.switcher() end end end end) -- select items, and open buffer vim.keymap.set("i", "", function() if action_state.get_selected_entry() then actions.close(prompt_bufnr) vim.cmd("split "..action_state.get_selected_entry()[1]) end end, { buffer = true, remap = true }) 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