diff --git a/src/kiss_tools/KeyShortcutHandler.kiss b/src/kiss_tools/KeyShortcutHandler.kiss index 45f9e07..1a2712e 100644 --- a/src/kiss_tools/KeyShortcutHandler.kiss +++ b/src/kiss_tools/KeyShortcutHandler.kiss @@ -71,11 +71,11 @@ (otherwise shortcuts))) -(method :Void registerShortcut [keys description item &opt :PrefixMap prefixMap] +(method :Void registerShortcut [keys description item &opt :Bool force :PrefixMap prefixMap] (unless prefixMap (set prefixMap rootMap)) (let [firstKey (keys.shift)] (cond - ((or (prefixMap.exists firstKey) (= firstKey cancelKey)) + ((and !force (or (prefixMap.exists firstKey) (= firstKey cancelKey))) (let [existingKey (if (= firstKey cancelKey) (Cancel cancelKey) (dictGet prefixMap firstKey)) conflictMessage "Keyboard shortcut for $description conflicts with $existingKey"] (if keys @@ -94,12 +94,12 @@ (if keys (let [innerPrefixMap (new Map)] (dictSet prefixMap firstKey (Prefix innerPrefixMap)) - (registerShortcut keys description item innerPrefixMap)) + (registerShortcut keys description item force innerPrefixMap)) (dictSet prefixMap firstKey (Final item))))))) -(method :Void registerItem [description :T item] +(method :Void registerItem [description :T item &opt :Bool force] (whenLet [keyboardShortcut (extractKeyboardShortcuts description)] - (registerShortcut keyboardShortcut description item))) + (registerShortcut keyboardShortcut description item force))) (method :Map prefixMapToStrings [:PrefixMap map] (for =>key mapping map