@@ -6,6 +6,8 @@ local log = require 'nvimgdb.log'
66--- @class ParserActions @parser callbacks handler
77--- @field private cursor Cursor @current line sign handler
88--- @field private win Win @jump window manager
9+ --- @field private last_fname string ? last jumped file name to debounce unwanted jumps
10+ --- @field private last_line integer ? last jumped line
911local ParserActions = {}
1012ParserActions .__index = ParserActions
1113
@@ -18,6 +20,8 @@ function ParserActions.new(cursor, win)
1820 local self = setmetatable ({}, ParserActions )
1921 self .cursor = cursor
2022 self .win = win
23+ self .last_fname = nil
24+ self .last_line = nil
2125 return self
2226end
2327
@@ -26,15 +30,23 @@ function ParserActions:continue_program()
2630 log .debug ({" ParserActions:continue_program" })
2731 self .cursor :hide ()
2832 vim .api .nvim_command (" doautocmd User NvimGdbContinue" )
33+ self .last_fname = nil
34+ self .last_line = nil
2935end
3036
3137--- Handle the program breaked. Show the source code.
3238--- @param fname string full path to the source file
3339--- @param line number line number
3440function ParserActions :jump_to_source (fname , line )
3541 log .debug ({" ParserActions:jump_to_source" , fname = fname , line = line })
36- self .win :jump (fname , line )
37- vim .api .nvim_command (" doautocmd User NvimGdbBreak" )
42+ if fname ~= self .last_fname or line ~= self .last_line then
43+ self .last_fname = fname
44+ self .last_line = line
45+ self .win :jump (fname , line )
46+ vim .api .nvim_command (" doautocmd User NvimGdbBreak" )
47+ else
48+ log .debug ({" ignore repeated jump" })
49+ end
3850end
3951
4052--- It's high time to query actual breakpoints.
0 commit comments