diff options
Diffstat (limited to 'lua')
-rw-r--r-- | lua/conf/binds.lua | 21 | ||||
-rw-r--r-- | lua/conf/plugins.lua | 1 | ||||
-rw-r--r-- | lua/core/harpoon.lua | 57 |
3 files changed, 70 insertions, 9 deletions
diff --git a/lua/conf/binds.lua b/lua/conf/binds.lua index b5242a7..0752a93 100644 --- a/lua/conf/binds.lua +++ b/lua/conf/binds.lua @@ -104,21 +104,24 @@ if pcall(require, "telescope") then end -- harpoon -if pcall(require, 'harpoon') then - local mark = require("harpoon.mark") - local ui = require("harpoon.ui") +if (pcall(require, 'harpoon')) then + local harpoon = require("harpoon") map("n", "<leader>a", function() - mark.add_file() + harpoon:list():append() vim.notify('added new file to quickmarks', vim.log.levels.INFO, { title = misc.appid, }) end) - map("n", "<C-e>", ui.toggle_quick_menu) - map('n', '<C-q>', function() ui.nav_file(1) end) - map('n', '<C-g>', function() ui.nav_file(2) end) - map('n', '<C-h>', function() ui.nav_file(3) end) - map('n', '<C-i>', function() ui.nav_file(4) end) + map('n', '<C-q>', function() harpoon:list():select(1) end) + map('n', '<C-g>', function() harpoon:list():select(2) end) + map('n', '<C-h>', function() harpoon:list():select(3) end) + map('n', '<C-i>', function() harpoon:list():select(4) end) + + map("n", "<C-S-P>", function() harpoon:list():prev() end) + map("n", "<C-S-N>", function() harpoon:list():next() end) + + map("n", "<C-e>", function() require("core.harpoon").switcher() end) end map('n', '<leader>u', '<cmd>UndotreeToggle<CR>', { desc = 'Open undo tree.' }) diff --git a/lua/conf/plugins.lua b/lua/conf/plugins.lua index 4b2bcf1..d70e0ac 100644 --- a/lua/conf/plugins.lua +++ b/lua/conf/plugins.lua @@ -43,6 +43,7 @@ require('dep') { { 'ahmedkhalf/project.nvim' }, -- cd into root of project { 'mrjones2014/smart-splits.nvim'}, -- buffer resizing { 'ThePrimeagen/harpoon', -- super duper fast navigation through files + branch = 'harpoon2', requires = 'nvim-lua/plenary.nvim' }, 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 |