diff options
| author | Adam <adamdharrison@gmail.com> | 2021-11-15 09:04:17 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-15 09:04:17 -0500 |
| commit | 0ab0abec4b2342bed6297ec8648fae3cae7baa66 (patch) | |
| tree | 64e216dbd6f9ce4362f5fd2c9a30d362b0eb5548 /data | |
| parent | ca448c5fdbb6cb2d5f87d5955eabb9a3dfdd0e0b (diff) | |
| parent | 285ea4f495d8992a73de75ff8497d8e3d48181c2 (diff) | |
| download | pragtical-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.lua | 2 | ||||
| -rw-r--r-- | data/core/keymap.lua | 32 |
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 |
