@@ -43,9 +43,17 @@ function M.register_keymap_with_passthrough(mode, key, action, desc)
4343 local keymap_key = mode .. " :" .. key
4444 -- Save any existing mapping for this key
4545 local existing = vim .fn .maparg (key , mode , false , true )
46- if existing and existing .rhs and existing .rhs ~= " " then
47- previous_keymaps [keymap_key ] = existing .rhs
48- logger .trace (" Saved existing keymap for " .. keymap_key .. " : " .. existing .rhs )
46+ if existing then
47+ if existing .rhs and existing .rhs ~= " " then
48+ previous_keymaps [keymap_key ] = { type = " rhs" , value = existing .rhs }
49+ logger .trace (" Saved existing keymap for " .. keymap_key .. " : " .. existing .rhs )
50+ elseif existing .callback then
51+ previous_keymaps [keymap_key ] = { type = " callback" , value = existing .callback }
52+ logger .trace (" Saved existing keymap callback for " .. keymap_key )
53+ else
54+ previous_keymaps [keymap_key ] = nil
55+ logger .trace (" No existing keymap for " .. keymap_key )
56+ end
4957 else
5058 previous_keymaps [keymap_key ] = nil
5159 logger .trace (" No existing keymap for " .. keymap_key )
@@ -61,8 +69,13 @@ function M.register_keymap_with_passthrough(mode, key, action, desc)
6169 local prev = previous_keymaps [keymap_key ]
6270
6371 if prev then
64- logger .trace (" Passing through to previous keymap for " .. keymap_key .. " : " .. prev )
65- vim .api .nvim_feedkeys (vim .api .nvim_replace_termcodes (prev , true , false , true ), mode , true )
72+ if prev .type == " rhs" then
73+ logger .trace (" Passing through to previous keymap for " .. keymap_key .. " : " .. prev .value )
74+ vim .api .nvim_feedkeys (vim .api .nvim_replace_termcodes (prev .value , true , false , true ), mode , true )
75+ elseif prev .type == " callback" then
76+ logger .trace (" Passing through to previous keymap callback for " .. keymap_key )
77+ prev .value ()
78+ end
6679 return " <Ignore>"
6780 end
6881 logger .trace (" No previous keymap to pass through for " .. keymap_key )
0 commit comments