1+ local M = {}
2+
3+ function M .setup ()
4+ local harpoon = require ' harpoon'
5+ harpoon :setup {
6+ settings = {
7+ save_on_toggle = false ,
8+ sync_on_ui_close = false ,
9+ key = function ()
10+ return vim .loop .cwd ()
11+ end ,
12+ },
13+ }
14+
15+ -- Add current file to list
16+ vim .keymap .set (' n' , ' <leader>ma' , function ()
17+ harpoon :list ():add ()
18+ vim .notify (' Added to Harpoon' , vim .log .levels .INFO )
19+ end , { desc = ' [M]ark [A]dd file (Harpoon)' })
20+
21+ -- Toggle quick menu
22+ vim .keymap .set (' n' , ' <C-e>' , function ()
23+ harpoon .ui :toggle_quick_menu (harpoon :list ())
24+ end , { desc = ' Toggle Harpoon menu' })
25+
26+ -- Quick navigation to files 1-4 using leader+m prefix
27+ vim .keymap .set (' n' , ' <leader>m1' , function ()
28+ harpoon :list ():select (1 )
29+ end , { desc = ' Jump to mark 1' })
30+
31+ vim .keymap .set (' n' , ' <leader>m2' , function ()
32+ harpoon :list ():select (2 )
33+ end , { desc = ' Jump to mark 2' })
34+
35+ vim .keymap .set (' n' , ' <leader>m3' , function ()
36+ harpoon :list ():select (3 )
37+ end , { desc = ' Jump to mark 3' })
38+
39+ vim .keymap .set (' n' , ' <leader>m4' , function ()
40+ harpoon :list ():select (4 )
41+ end , { desc = ' Jump to mark 4' })
42+
43+ -- Alternative quick access with Alt/Option key (doesn't conflict)
44+ vim .keymap .set (' n' , ' <M-1>' , function ()
45+ harpoon :list ():select (1 )
46+ end , { desc = ' Harpoon file 1' })
47+
48+ vim .keymap .set (' n' , ' <M-2>' , function ()
49+ harpoon :list ():select (2 )
50+ end , { desc = ' Harpoon file 2' })
51+
52+ vim .keymap .set (' n' , ' <M-3>' , function ()
53+ harpoon :list ():select (3 )
54+ end , { desc = ' Harpoon file 3' })
55+
56+ vim .keymap .set (' n' , ' <M-4>' , function ()
57+ harpoon :list ():select (4 )
58+ end , { desc = ' Harpoon file 4' })
59+
60+ -- Navigate between harpoon files
61+ vim .keymap .set (' n' , ' [m' , function ()
62+ harpoon :list ():prev ()
63+ end , { desc = ' Previous marked file' })
64+
65+ vim .keymap .set (' n' , ' ]m' , function ()
66+ harpoon :list ():next ()
67+ end , { desc = ' Next marked file' })
68+
69+ -- Show harpoon files in Telescope
70+ local conf = require (' telescope.config' ).values
71+ local function toggle_telescope (harpoon_files )
72+ local file_paths = {}
73+ for _ , item in ipairs (harpoon_files .items ) do
74+ table.insert (file_paths , item .value )
75+ end
76+
77+ require (' telescope.pickers' )
78+ .new ({}, {
79+ prompt_title = ' Harpoon' ,
80+ finder = require (' telescope.finders' ).new_table {
81+ results = file_paths ,
82+ },
83+ previewer = conf .file_previewer {},
84+ sorter = conf .generic_sorter {},
85+ })
86+ :find ()
87+ end
88+
89+ vim .keymap .set (' n' , ' <leader>mm' , function ()
90+ toggle_telescope (harpoon :list ())
91+ end , { desc = ' [M]arked files in Telescope' })
92+
93+ -- Clear all marks
94+ vim .keymap .set (' n' , ' <leader>mc' , function ()
95+ harpoon :list ():clear ()
96+ vim .notify (' Cleared all Harpoon marks' , vim .log .levels .INFO )
97+ end , { desc = ' [M]arks [C]lear all' })
98+
99+ -- Remove current file from harpoon
100+ vim .keymap .set (' n' , ' <leader>mr' , function ()
101+ harpoon :list ():remove ()
102+ vim .notify (' Removed from Harpoon' , vim .log .levels .INFO )
103+ end , { desc = ' [M]ark [R]emove current file' })
104+ end
105+
106+ return M
0 commit comments