aboutsummaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorAdam <adamdharrison@gmail.com>2021-11-15 09:04:17 -0500
committerGitHub <noreply@github.com>2021-11-15 09:04:17 -0500
commit0ab0abec4b2342bed6297ec8648fae3cae7baa66 (patch)
tree64e216dbd6f9ce4362f5fd2c9a30d362b0eb5548 /data
parentca448c5fdbb6cb2d5f87d5955eabb9a3dfdd0e0b (diff)
parent285ea4f495d8992a73de75ff8497d8e3d48181c2 (diff)
downloadpragtical-0ab0abec4b2342bed6297ec8648fae3cae7baa66.tar.gz
pragtical-0ab0abec4b2342bed6297ec8648fae3cae7baa66.zip
Merge pull request #516 from takase1121/keymap-improvements
add keymap.unbind(), update contextmenu to use keymap.get_binding()
Diffstat (limited to 'data')
-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