local utils = require("neo-tree.utils") local M = {} M.normalize_map_key = function(key) if key == nil then return nil end if key:match("^<[^>]+>$") then local parts = utils.split(key, "-") if #parts == 2 then local mod = parts[1]:lower() if mod == "<a" then mod = "<m" end local alpha = parts[2] if #alpha > 2 then alpha = alpha:lower() end key = string.format("%s-%s", mod, alpha) return key else key = key:lower() if key == "<backspace>" then return "<bs>" elseif key == "<enter>" then return "<cr>" elseif key == "<return>" then return "<cr>" end end end return key end M.normalize_map = function(map) local new_map = {} for key, value in pairs(map) do local normalized_key = M.normalize_map_key(key) if normalized_key ~= nil then new_map[normalized_key] = value end end return new_map end local tests = { { "<BS>", "<bs>" }, { "<Backspace>", "<bs>" }, { "<Enter>", "<cr>" }, { "<C-W>", "<c-W>" }, { "<A-q>", "<m-q>" }, { "<C-Left>", "<c-left>" }, { "<C-Right>", "<c-right>" }, { "<C-Up>", "<c-up>" }, } for _, test in ipairs(tests) do local key = M.normalize_map_key(test[1]) assert(key == test[2], string.format("%s != %s", key, test[2])) end return M