From f9fd005fa5023093290cab6ebbd2b27a9cb2969d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20J=C3=B8rgen=20Br=C3=B8nner?= Date: Mon, 2 Jul 2018 01:27:52 +0200 Subject: [PATCH] Utility function for checking if a key-combo is bound --- examples/keybindings.js | 10 ++++++++++ keybindings.js | 9 +++++++++ 2 files changed, 19 insertions(+) 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];