diff --git a/examples/keybindings.js b/examples/keybindings.js index 2a5bfae..9d6d6bc 100644 --- a/examples/keybindings.js +++ b/examples/keybindings.js @@ -39,3 +39,13 @@ function swapNeighbours() { function showNavigator() { Keybindings.bindkey("j", () => null, { opensNavigator: true }) } + +// listFreeBindings("").join("\n") +function listFreeBindings(modifierString) { + let free = []; + const chars = "abcdefghijklmnopqrstuvxyz1234567890".split("") + const symbols = ["minus", "comma", "period", "plus"] + return [].concat(chars, symbols).filter( + key => Keybindings.getBoundActionId(modifierString+key) === 0 + ).map(key => modifierString+key) +} diff --git a/keybindings.js b/keybindings.js index eb19a65..478e6e9 100644 --- a/keybindings.js +++ b/keybindings.js @@ -120,6 +120,15 @@ function openNavigatorHandler(actionName, keystr) { } } +function getBoundActionId(keystr) { + let [dontcare, keycodes, mask] = + Gtk.accelerator_parse_with_keycode(keystr); + if(keycodes.length > 1) { + throw new Error("Multiple keycodes " + keycodes + " " + keystr); + } + const rawMask = devirtualizeMask(mask); + return global.display.get_keybinding_action(keycodes[0], rawMask); +} function handleAccelerator(display, actionId, deviceId, timestamp) { const action = actionIdMap[actionId];