From bbba5bfb481323572635171ad09f6227d8d13e95 Mon Sep 17 00:00:00 2001 From: Laith Taher Date: Mon, 18 May 2026 14:35:10 -0400 Subject: [PATCH 1/2] feat: PoC adding all hunks to quickfix list --- lua/jumpy/init.lua | 4 ++++ lua/jumpy/navigate.lua | 39 +++++++++++++++++++++++++++++++++++++++ lua/jumpy/render.lua | 14 ++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/lua/jumpy/init.lua b/lua/jumpy/init.lua index 2b9a5b3..f4cfeed 100644 --- a/lua/jumpy/init.lua +++ b/lua/jumpy/init.lua @@ -33,6 +33,7 @@ M.config = { accept_all = "A", reject_all = "X", reprompt = "r", + quickfix = "q" }, highlights = { added = "JumpyAdded", @@ -122,6 +123,9 @@ function M._setup_keymaps() map("n", c.reprompt, function() require("jumpy.prompt").reprompt() end, opts) + map("n", c.quickfix, function() + require("jumpy.navigate").add_hunks_to_quickfix() + end) end return M diff --git a/lua/jumpy/navigate.lua b/lua/jumpy/navigate.lua index 3099214..420e0ec 100644 --- a/lua/jumpy/navigate.lua +++ b/lua/jumpy/navigate.lua @@ -154,6 +154,45 @@ function M.replace_hunk(bufnr, hunk_idx, new_lines) render.update_hunk_lines(bufnr, hunk_idx, new_lines) end +function M.add_hunks_to_quickfix() + local states = render.get_all_states() + local items = M._transform_hunks_to_quickfix(states) + + if #items == 0 then + vim.notify("jumpy: no hunks", vim.log.levels.INFO) + return + end + + vim.fn.setqflist(items, "r") + vim.cmd("copen") +end + +function M._transform_hunks_to_quickfix(states) + local items = {} + for bufnr, state in ipairs(states) do + for _, hunk in pairs(state.hunk) do + local text + if hunk then + local text + if #hunk.added_lines > 0 then + text = "+ " .. hunk.added_lines[1] + else + text = "- " .. hunk.removed_lines[1] + end + + table.insert(items, { + bufnr = bufnr, + lnum = hunk.old_start, + col = 1, + text = text + }) + end + end + end + + return items +end + local offset_table = {} function M._get_offset(bufnr, hunk_idx) diff --git a/lua/jumpy/render.lua b/lua/jumpy/render.lua index 40ec1e6..c5227a2 100644 --- a/lua/jumpy/render.lua +++ b/lua/jumpy/render.lua @@ -8,6 +8,20 @@ function M.get_state(bufnr) return buf_states[bufnr] end +function M.get_all_states() + local states = {} + for _, buf in ipairs(vim.api.nvim_list_bufs()) do + if vim.api.nvim_buf_is_loaded(buf) then + local state = M.get_state(buf) + if state then + states[buf] = state + end + end + end + + return states +end + function M.show(bufnr, hunks, original_lines, proposed_lines) M.clear(bufnr) From d98d19c262c979aa0e6c0b3f75b76b77d814caee Mon Sep 17 00:00:00 2001 From: Laith Taher Date: Thu, 21 May 2026 13:32:40 -0400 Subject: [PATCH 2/2] lint, and fixed loop bug --- lua/jumpy/init.lua | 6 +++--- lua/jumpy/navigate.lua | 9 ++++----- lua/jumpy/render.lua | 8 ++++---- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/lua/jumpy/init.lua b/lua/jumpy/init.lua index f4cfeed..a24b9b5 100644 --- a/lua/jumpy/init.lua +++ b/lua/jumpy/init.lua @@ -33,7 +33,7 @@ M.config = { accept_all = "A", reject_all = "X", reprompt = "r", - quickfix = "q" + quickfix = "q", }, highlights = { added = "JumpyAdded", @@ -124,8 +124,8 @@ function M._setup_keymaps() require("jumpy.prompt").reprompt() end, opts) map("n", c.quickfix, function() - require("jumpy.navigate").add_hunks_to_quickfix() - end) + require("jumpy.navigate").add_hunks_to_quickfix() + end, opts) end return M diff --git a/lua/jumpy/navigate.lua b/lua/jumpy/navigate.lua index 420e0ec..65d90f4 100644 --- a/lua/jumpy/navigate.lua +++ b/lua/jumpy/navigate.lua @@ -156,7 +156,7 @@ end function M.add_hunks_to_quickfix() local states = render.get_all_states() - local items = M._transform_hunks_to_quickfix(states) + local items = M._transform_hunks_to_quickfix(states) if #items == 0 then vim.notify("jumpy: no hunks", vim.log.levels.INFO) @@ -169,9 +169,8 @@ end function M._transform_hunks_to_quickfix(states) local items = {} - for bufnr, state in ipairs(states) do - for _, hunk in pairs(state.hunk) do - local text + for bufnr, state in pairs(states) do + for _, hunk in pairs(state.hunks) do if hunk then local text if #hunk.added_lines > 0 then @@ -184,7 +183,7 @@ function M._transform_hunks_to_quickfix(states) bufnr = bufnr, lnum = hunk.old_start, col = 1, - text = text + text = text, }) end end diff --git a/lua/jumpy/render.lua b/lua/jumpy/render.lua index c5227a2..3962aa3 100644 --- a/lua/jumpy/render.lua +++ b/lua/jumpy/render.lua @@ -12,10 +12,10 @@ function M.get_all_states() local states = {} for _, buf in ipairs(vim.api.nvim_list_bufs()) do if vim.api.nvim_buf_is_loaded(buf) then - local state = M.get_state(buf) - if state then - states[buf] = state - end + local state = M.get_state(buf) + if state then + states[buf] = state + end end end