Skip to content

Commit ce45d47

Browse files
committed
Finally fix replace
1 parent 0542ac1 commit ce45d47

5 files changed

Lines changed: 278 additions & 685 deletions

File tree

lua/spectre/actions.lua

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -85,21 +85,18 @@ end
8585

8686
function M.get_all_entries()
8787
local entries = {}
88-
local bufnr = api.nvim_get_current_buf()
89-
local lines = api.nvim_buf_get_lines(bufnr, 0, -1, false)
90-
91-
for _, line in ipairs(lines) do
92-
local filename, lnum, col = line:match("([^:]+):(%d+):(%d+):")
93-
if filename and lnum and col then
88+
for display_lnum, item in ipairs(state.total_item) do
89+
if item and item.filename then
9490
table.insert(entries, {
95-
filename = filename,
96-
lnum = tonumber(lnum),
97-
col = tonumber(col),
98-
text = line:match(":[^:]+$"):sub(2),
91+
filename = item.filename,
92+
lnum = item.lnum,
93+
col = item.col,
94+
text = item.text,
95+
display_lnum = display_lnum - 1,
96+
is_replace_finish = item.is_replace_finish or false
9997
})
10098
end
10199
end
102-
103100
return entries
104101
end
105102

@@ -176,11 +173,41 @@ function M.run_replace(entries)
176173
on_done = function(result)
177174
if result.ref then
178175
M.set_entry_finish(result.ref.display_lnum)
176+
-- Update UI by adding a checkmark to the line
177+
local bufnr = api.nvim_get_current_buf()
178+
local line = result.ref.display_lnum
179+
api.nvim_buf_set_extmark(
180+
bufnr,
181+
config.namespace,
182+
line,
183+
0,
184+
{ virt_text = { { '', 'String' } }, virt_text_pos = 'eol' }
185+
)
186+
-- Trigger renderer redraw
187+
if state.renderer then
188+
print("redrawing")
189+
state.renderer:redraw()
190+
end
179191
end
180192
end,
181193
on_error = function(result)
182194
if result.ref then
183195
vim.notify("Error replacing: " .. result.value, vim.log.levels.ERROR)
196+
-- Add error mark to the line
197+
local bufnr = api.nvim_get_current_buf()
198+
local line = result.ref.display_lnum
199+
api.nvim_buf_set_extmark(
200+
bufnr,
201+
config.namespace,
202+
line,
203+
0,
204+
{ virt_text = { { '', 'Error' } }, virt_text_pos = 'eol' }
205+
)
206+
-- Trigger renderer redraw
207+
if state.renderer then
208+
print("redrawing")
209+
state.renderer:redraw()
210+
end
184211
end
185212
end,
186213
})
@@ -232,6 +259,10 @@ M.run_delete_line = function(entries)
232259
{ virt_text = { { '󰄲 DONE', 'String' } }, virt_text_pos = 'eol' }
233260
)
234261
end
262+
-- Trigger renderer redraw
263+
if state.renderer then
264+
state.renderer:redraw()
265+
end
235266
end
236267
end,
237268
on_error = function(result)
@@ -249,6 +280,10 @@ M.run_delete_line = function(entries)
249280
{ virt_text = { { '󰄱 ERROR', 'Error' } }, virt_text_pos = 'eol' }
250281
)
251282
end
283+
-- Trigger renderer redraw
284+
if state.renderer then
285+
state.renderer:redraw()
286+
end
252287
end
253288
end,
254289
})

lua/spectre/config.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@ local config = {
7373
['run_current_replace'] = {
7474
map = '<leader>rc',
7575
cmd = "<cmd>lua require('spectre.actions').run_current_replace()<CR>",
76-
desc = 'replace item',
76+
desc = 'replace current item',
7777
},
7878
['run_replace'] = {
7979
map = '<leader>R',
8080
cmd = "<cmd>lua require('spectre.actions').run_replace()<CR>",
81-
desc = 'replace all',
81+
desc = 'replace all items',
8282
},
8383
-- only show replace text in result UI
8484
['change_view_mode'] = {

0 commit comments

Comments
 (0)