aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/core/contextmenu.lua2
-rw-r--r--data/core/keymap.lua32
2 files changed, 30 insertions, 4 deletions
diff --git a/data/core/contextmenu.lua b/data/core/contextmenu.lua
index 36247597..d6131cdf 100644
--- a/data/core/contextmenu.lua
+++ b/data/core/contextmenu.lua
@@ -49,7 +49,7 @@ function ContextMenu:register(predicate, items)
local width, height = 0, 0 --precalculate the size of context menu
for i, item in ipairs(items) do
if item ~= DIVIDER then
- item.info = keymap.reverse_map[item.command]
+ item.info = keymap.get_binding(item.command)
end
local lw, lh = get_item_size(item)
width = math.max(width, lw)
diff --git a/data/core/keymap.lua b/data/core/keymap.lua
index 7f7c0fe2..308499c7 100644
--- a/data/core/keymap.lua
+++ b/data/core/keymap.lua
@@ -30,7 +30,8 @@ function keymap.add_direct(map)
end
keymap.map[stroke] = commands
for _, cmd in ipairs(commands) do
- keymap.reverse_map[cmd] = stroke
+ keymap.reverse_map[cmd] = keymap.reverse_map[cmd] or {}
+ table.insert(keymap.reverse_map[cmd], stroke)
end
end
end
@@ -52,14 +53,39 @@ function keymap.add(map, overwrite)
end
end
for _, cmd in ipairs(commands) do
- keymap.reverse_map[cmd] = stroke
+ keymap.reverse_map[cmd] = keymap.reverse_map[cmd] or {}
+ table.insert(keymap.reverse_map[cmd], stroke)
end
end
end
+local function remove_only(tbl, k, v)
+ for key, values in pairs(tbl) do
+ if key == k then
+ if v then
+ for i, value in ipairs(values) do
+ if value == v then
+ table.remove(values, i)
+ end
+ end
+ else
+ tbl[key] = nil
+ end
+ break
+ end
+ end
+end
+
+
+function keymap.unbind(key, cmd)
+ remove_only(keymap.map, key, cmd)
+ remove_only(keymap.reverse_map, cmd, key)
+end
+
+
function keymap.get_binding(cmd)
- return keymap.reverse_map[cmd]
+ return table.unpack(keymap.reverse_map[cmd] or {})
end