@@ -15,6 +15,9 @@ local pl = lazy.access(utils, "path") ---@type PathLib
15
15
local api = vim .api
16
16
local M = {}
17
17
18
+ -- keymaps to restore
19
+ local R = {}
20
+
18
21
local HAS_NVIM_0_10 = vim .fn .has (" nvim-0.10" ) == 1
19
22
20
23
--- @alias git.FileDataProducer fun ( kind : vcs.FileKind , path : string , pos : " left" | " right" ): string[]
@@ -350,8 +353,56 @@ function File:attach_buffer(force, opt)
350
353
state .keymaps = config .extend_keymaps (conf .keymaps .view , state .keymaps )
351
354
local default_map_opt = { silent = true , nowait = true , buffer = self .bufnr }
352
355
356
+ R = {}
357
+
353
358
for _ , mapping in ipairs (state .keymaps ) do
354
359
local map_opt = vim .tbl_extend (" force" , default_map_opt , mapping [4 ] or {}, { buffer = self .bufnr })
360
+
361
+ local mode = mapping [1 ] -- string
362
+ local name_lhs = mapping [2 ] -- string
363
+
364
+ local lhs_pat = string.format (" %s" , name_lhs )
365
+ -- escape special characters for search pattern
366
+ lhs_pat = string.gsub (lhs_pat , " %[" , " %%%[" )
367
+ lhs_pat = string.gsub (lhs_pat , " %]" , " %%%]" )
368
+
369
+ local buf_mappings = api .nvim_buf_get_keymap (self .bufnr , mode )
370
+
371
+ for _ , buf_km_dict in pairs (buf_mappings ) do
372
+ if buf_km_dict [" lhs" ] ~= nil then
373
+ local result = string.find (buf_km_dict [" lhs" ], lhs_pat )
374
+
375
+ if result ~= nil and result ~= " " then
376
+ local rhs = " "
377
+ if buf_km_dict .rhs ~= nil then
378
+ rhs = buf_km_dict .rhs
379
+ else
380
+ rhs = buf_km_dict .callback
381
+ end
382
+ -- save buffer keymap
383
+ if buf_km_dict .buffer == self .bufnr then
384
+ local obj = {
385
+ bufnr = self .bufnr ,
386
+ mode = mode ,
387
+ lhs = name_lhs ,
388
+ rhs = rhs ,
389
+ opts = {
390
+ buffer = self .bufnr ,
391
+ desc = buf_km_dict [" desc" ],
392
+ silent = buf_km_dict [" silent" ],
393
+ noremap = buf_km_dict [" noremap" ],
394
+ },
395
+ }
396
+ table.insert (R , obj )
397
+ end
398
+ -- found buffer keymap, so stop searching
399
+ do
400
+ break
401
+ end
402
+ end
403
+ end
404
+ end
405
+
355
406
vim .keymap .set (mapping [1 ], mapping [2 ], mapping [3 ], map_opt )
356
407
end
357
408
@@ -387,6 +438,13 @@ function File:detach_buffer()
387
438
end
388
439
end
389
440
441
+ -- restore buffer keymaps
442
+ for _ , dict in pairs (R ) do
443
+ if dict .bufnr == self .bufnr then
444
+ vim .keymap .set (dict .mode , dict .lhs , dict .rhs , dict .opts )
445
+ end
446
+ end
447
+
390
448
-- Diagnostics
391
449
if state .disable_diagnostics then
392
450
if HAS_NVIM_0_10 then
0 commit comments