2929
3030--- Show instructions for diff interaction
3131--- @param bufnr number
32- --- @param namespace number
32+ --- @param opts { namespace : number , line ?: number , clear ?: boolean }
3333--- @return nil
34- local function show_keymaps (bufnr , namespace )
34+ local function show_keymaps (bufnr , opts )
35+ local namespace = " codecompanion_diff_ui_" .. tostring (opts .namespace )
36+
3537 local always_accept = config .interactions .inline .keymaps .always_accept .modes .n
3638 local accept = config .interactions .inline .keymaps .accept_change .modes .n
3739 local reject = config .interactions .inline .keymaps .reject_change .modes .n
3840 local next_hunk = config .interactions .inline .keymaps .next_hunk .modes .n
3941 local previous_hunk = config .interactions .inline .keymaps .previous_hunk .modes .n
4042
43+ if opts .clear then
44+ ui_utils .clear_notification (bufnr , { namespace = namespace })
45+ end
46+
4147 ui_utils .show_buffer_notification (bufnr , {
4248 text = string.format (
4349 " [%s] Always Accept | [%s] Accept | [%s] Reject | [%s]/[%s] Next/Prev hunks | [q] Close" ,
@@ -48,8 +54,8 @@ local function show_keymaps(bufnr, namespace)
4854 previous_hunk
4955 ),
5056 main_hl = " CodeCompanionChatSubtext" ,
51- line = 0 ,
52- namespace = " codecompanion_diff_ui_ " .. namespace ,
57+ line = opts . line or 0 ,
58+ namespace = namespace ,
5359 })
5460end
5561
@@ -59,29 +65,35 @@ function DiffUI:next_hunk(line)
5965 for _ , hunk in ipairs (self .diff .hunks ) do
6066 local hunk_line = hunk .pos [1 ] + 1
6167 if hunk_line > line then
68+ show_keymaps (self .bufnr , { clear = true , namespace = self .diff .namespace , line = hunk_line - 2 })
6269 return ui_utils .scroll_to_line (self .bufnr , hunk_line )
6370 end
6471 end
6572
6673 if # self .diff .hunks > 0 then
67- ui_utils .scroll_to_line (self .bufnr , self .diff .hunks [1 ].pos [1 ] + 1 )
74+ line = self .diff .hunks [1 ].pos [1 ] + 1
75+ show_keymaps (self .bufnr , { clear = true , namespace = self .diff .namespace , line = line - 2 })
76+ ui_utils .scroll_to_line (self .bufnr , line )
6877 end
6978end
7079
7180--- Navigate to previous hunk
7281--- @param line number
7382--- @return nil
74- function DiffUI :prev_hunk (line )
83+ function DiffUI :previous_hunk (line )
7584 for i = # self .diff .hunks , 1 , - 1 do
7685 local hunk = self .diff .hunks [i ]
7786 local hunk_line = hunk .pos [1 ] + 1
7887 if hunk_line < line then
88+ show_keymaps (self .bufnr , { clear = true , namespace = self .diff .namespace , line = hunk_line - 2 })
7989 return ui_utils .scroll_to_line (self .bufnr , hunk_line )
8090 end
8191 end
8292
8393 if # self .diff .hunks > 0 then
84- ui_utils .scroll_to_line (self .bufnr , self .diff .hunks [# self .diff .hunks ].pos [1 ] + 1 )
94+ line = self .diff .hunks [# self .diff .hunks ].pos [1 ] + 1
95+ show_keymaps (self .bufnr , { clear = true , namespace = self .diff .namespace , line = line - 2 })
96+ ui_utils .scroll_to_line (self .bufnr , line )
8597 end
8698end
8799
@@ -149,7 +161,7 @@ function M.show(diff, opts)
149161 -- Apply diff extmarks
150162 local Diff = require (" codecompanion.diff" )
151163 Diff .apply (diff , bufnr )
152- show_keymaps (bufnr , diff .namespace )
164+ show_keymaps (bufnr , { namespace = diff .namespace } )
153165
154166 -- Lock the buffer so the user can't make any changes
155167 vim .bo [bufnr ].modified = false
0 commit comments