@@ -952,18 +952,28 @@ end
952
952
953
953
-- TODO: make filtering include the mapping and the action
954
954
internal .keymaps = function (opts )
955
- local modes = { " n" , " i" , " c" }
956
- local keymaps_table = {}
955
+ opts . modes = vim . F . if_nil ( opts . modes , { " n" , " i" , " c" , " x " })
956
+ opts . show_plug = vim . F . if_nil ( opts . show_plug , true )
957
957
958
+ local keymap_encountered = {} -- used to make sure no duplicates are inserted into keymaps_table
959
+ local keymaps_table = {}
958
960
local max_len_lhs = 0
959
- for _ , mode in pairs (modes ) do
960
- local function extract_keymaps (keymaps )
961
- for _ , keymap in pairs (keymaps ) do
962
- table.insert (keymaps_table , keymap )
963
- max_len_lhs = math.max (max_len_lhs , string.len (keymap .lhs or " " ))
961
+
962
+ -- helper function to populate keymaps_table and determine max_len_lhs
963
+ local function extract_keymaps (keymaps )
964
+ for _ , keymap in pairs (keymaps ) do
965
+ local keymap_key = keymap .buffer .. keymap .mode .. keymap .lhs -- should be distinct for every keymap
966
+ if not keymap_encountered [keymap_key ] then
967
+ keymap_encountered [keymap_key ] = true
968
+ if opts .show_plug or not string.find (keymap .lhs , " <Plug>" ) then
969
+ table.insert (keymaps_table , keymap )
970
+ max_len_lhs = math.max (max_len_lhs , # utils .display_termcodes (keymap .lhs ))
971
+ end
964
972
end
965
973
end
974
+ end
966
975
976
+ for _ , mode in pairs (opts .modes ) do
967
977
local global = vim .api .nvim_get_keymap (mode )
968
978
local buf_local = vim .api .nvim_buf_get_keymap (0 , mode )
969
979
extract_keymaps (global )
0 commit comments