@@ -7,13 +7,14 @@ local api = vim.api
77--- @class CodeCompanion.Diff.Inline
88--- @field bufnr number
99--- @field contents string[]
10- --- @field id number
11- --- @field ns_id number
1210--- @field extmark_ids number[]
1311--- @field has_changes boolean
14- --- @field winnr number | nil
12+ --- @field id number
1513--- @field is_floating boolean
14+ --- @field ns_id number
1615--- @field show_hints boolean
16+ --- @field winnr number | nil
17+ --- @field winbar { content : string , winhighlight : string }| nil Original winbar state
1718
1819--- @class CodeCompanion.Diff.Inline
1920local InlineDiff = {}
@@ -22,9 +23,9 @@ local InlineDiff = {}
2223--- @field bufnr number Buffer number to apply diff to
2324--- @field contents string[] Original content lines
2425--- @field id number | string Unique identifier for this diff
25- --- @field winnr ? number Window number (optional )
2626--- @field is_floating boolean | nil Whether this diff is in a floating window
2727--- @field show_hints ? boolean Whether to show keymap hints (default : true )
28+ --- @field winnr ? number Window number (optional )
2829
2930--- Creates a new InlineDiff instance and applies diff highlights
3031--- @param args CodeCompanion.Diff.InlineArgs
@@ -33,15 +34,19 @@ function InlineDiff.new(args)
3334 local self = setmetatable ({
3435 bufnr = args .bufnr ,
3536 contents = args .contents ,
37+ extmark_ids = {},
38+ has_changes = false ,
3639 id = args .id ,
37- winnr = args .winnr ,
3840 is_floating = args .is_floating or false ,
39- show_hints = args .show_hints == nil and true or args .show_hints ,
4041 ns_id = api .nvim_create_namespace (
4142 " codecompanion_inline_diff_" .. (args .id ~= nil and args .id or math.random (1 , 100000 ))
4243 ),
43- extmark_ids = {},
44- has_changes = false ,
44+ show_hints = args .show_hints == nil and true or args .show_hints ,
45+ winnr = args .winnr ,
46+ winbar = {
47+ content = vim .wo [args .winnr or 0 ].winbar or " " ,
48+ winhighlight = vim .wo [args .winnr or 0 ].winhighlight or " " ,
49+ },
4550 }, { __index = InlineDiff })
4651 --- @cast self CodeCompanion.Diff.Inline
4752
@@ -231,11 +236,11 @@ end
231236
232237--- Clear winbar and winhighlight from the diff window
233238--- @return nil
234- function InlineDiff :clear_winbar ()
239+ function InlineDiff :restore_winbar ()
235240 if self .winnr and api .nvim_win_is_valid (self .winnr ) then
236241 pcall (function ()
237- vim .wo [self .winnr ].winbar = " "
238- vim .wo [self .winnr ].winhighlight = " "
242+ vim .wo [self .winnr ].winbar = self . winbar . content
243+ vim .wo [self .winnr ].winhighlight = self . winbar . winhighlight
239244 end )
240245 end
241246end
@@ -261,7 +266,7 @@ function InlineDiff:teardown()
261266 end )
262267 end )
263268 self :clear_highlights ()
264- self :clear_winbar ()
269+ self :restore_winbar ()
265270 self :close_floating_window ()
266271 utils .fire (" DiffDetached" , { diff = " inline" , bufnr = self .bufnr , id = self .id })
267272end
0 commit comments