From 268269114a2549e0f557396ab8f7e6b96685ae37 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sat, 8 Oct 2022 21:20:08 +0000 Subject: [PATCH] Pass KeyShortcutHandler consumers a printable prefixmap represention. Close #154. --- .../src/kiss_tools/KeyShortcutHandler.hx | 2 +- .../src/kiss_tools/KeyShortcutHandler.kiss | 12 ++++++++++-- projects/kiss-vscode/config/KissConfig.kiss | 15 +++++---------- projects/nat-archive-tool/src/nat/ArchiveUI.hx | 2 +- .../src/nat/systems/KeyShortcutSystem.kiss | 2 +- .../source/PlayState.kiss | 2 +- 6 files changed, 19 insertions(+), 16 deletions(-) diff --git a/projects/kiss-tools/src/kiss_tools/KeyShortcutHandler.hx b/projects/kiss-tools/src/kiss_tools/KeyShortcutHandler.hx index 5c3803d7..3dfb4d52 100644 --- a/projects/kiss-tools/src/kiss_tools/KeyShortcutHandler.hx +++ b/projects/kiss-tools/src/kiss_tools/KeyShortcutHandler.hx @@ -5,7 +5,7 @@ import kiss.Stream; import kiss.List; typedef PrefixMap = Map>; -typedef PrefixMapHandler = (Map>) -> Void; +typedef PrefixMapHandler = (Map>, Map) -> Void; typedef ItemHandler = (T) -> Void; typedef FinishHandler = () -> Void; typedef BadKeyHandler = (String, PrefixMap) -> Void; diff --git a/projects/kiss-tools/src/kiss_tools/KeyShortcutHandler.kiss b/projects/kiss-tools/src/kiss_tools/KeyShortcutHandler.kiss index eafa2e04..45f9e07e 100644 --- a/projects/kiss-tools/src/kiss_tools/KeyShortcutHandler.kiss +++ b/projects/kiss-tools/src/kiss_tools/KeyShortcutHandler.kiss @@ -21,7 +21,7 @@ (method _selectMap [m] (set currentMap m) - (tryCall onSelectPrefixMap m)) + (tryCall onSelectPrefixMap m (prefixMapToStrings m))) (method start [] (_selectMap rootMap)) @@ -99,4 +99,12 @@ (method :Void registerItem [description :T item] (whenLet [keyboardShortcut (extractKeyboardShortcuts description)] - (registerShortcut keyboardShortcut description item))) \ No newline at end of file + (registerShortcut keyboardShortcut description item))) + +(method :Map prefixMapToStrings [:PrefixMap map] + (for =>key mapping map + =>key (case mapping + ((Cancel _) "cancel") + ((Final thing) (Std.string thing)) + ((Prefix map) (.join (collect (map.keys)) ", ")) + (never null)))) \ No newline at end of file diff --git a/projects/kiss-vscode/config/KissConfig.kiss b/projects/kiss-vscode/config/KissConfig.kiss index 419b9c07..9f7ac189 100644 --- a/projects/kiss-vscode/config/KissConfig.kiss +++ b/projects/kiss-vscode/config/KissConfig.kiss @@ -93,7 +93,7 @@ (_runCommand command selectedTextBeforeShortcut)) (_runCommand command selectedTextBeforeShortcut))) -(function :Void showShortcutPanel [:PrefixMap prefixMap] +(function :Void showShortcutPanel [:PrefixMap prefixMap :Map strings] // Preserve the selected text and focused document before opening the webview: (whenLet [text (selectedText)] (set selectedTextBeforeShortcut text)) (when activeTextEditor @@ -109,20 +109,15 @@ (set keyListener (shortcutPanel.webview.onDidReceiveMessage ->:Void key (shortcutHandler.handleKey (the String key)))) - (set shortcutPanel.webview.html (shortcutPanelHtml prefixMap)) + (set shortcutPanel.webview.html (shortcutPanelHtml strings)) (shortcutPanel.webview.postMessage (object command "focus"))) -(function shortcutPanelHtml [:PrefixMap prefixMap] +(function shortcutPanelHtml [:Map keys] (let [&mut unusedKeys "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-/" shortcutParagraphs - (for =>key shortcutKey prefixMap + (for =>key rep keys (set unusedKeys (unusedKeys.replace key "")) - "

${key} - $(case shortcutKey - ((Prefix innerMap) - "$(Lambda.count innerMap) shortcuts") - ((Final command) - command) - (otherwise))

")] + "

${key} - ${rep}

")] " diff --git a/projects/nat-archive-tool/src/nat/ArchiveUI.hx b/projects/nat-archive-tool/src/nat/ArchiveUI.hx index 58559cf7..5ff2e5d7 100644 --- a/projects/nat-archive-tool/src/nat/ArchiveUI.hx +++ b/projects/nat-archive-tool/src/nat/ArchiveUI.hx @@ -18,7 +18,7 @@ interface ArchiveUI { */ var shortcutHandler(default, null):Null>; - function showPrefixMap(map:Map>):Void; + function showPrefixMap(map:Map):Void; function hidePrefixMap():Void; /** diff --git a/projects/nat-archive-tool/src/nat/systems/KeyShortcutSystem.kiss b/projects/nat-archive-tool/src/nat/systems/KeyShortcutSystem.kiss index 97b16dff..4ddc7daa 100644 --- a/projects/nat-archive-tool/src/nat/systems/KeyShortcutSystem.kiss +++ b/projects/nat-archive-tool/src/nat/systems/KeyShortcutSystem.kiss @@ -11,7 +11,7 @@ { (when (and ui ui.shortcutHandler) (unless setup - (set ui.shortcutHandler.onSelectPrefixMap ui.showPrefixMap) + (set ui.shortcutHandler.onSelectPrefixMap ->:Void [_ map] (ui.showPrefixMap map)) (set ui.shortcutHandler.onSelectItem ->e { (ui.hidePrefixMap) diff --git a/projects/nat-flixel-desktop-playground/source/PlayState.kiss b/projects/nat-flixel-desktop-playground/source/PlayState.kiss index ae0b53a7..e783518e 100644 --- a/projects/nat-flixel-desktop-playground/source/PlayState.kiss +++ b/projects/nat-flixel-desktop-playground/source/PlayState.kiss @@ -46,7 +46,7 @@ (FlxG.camera.calculateScrollBounds entryGroup SCROLL_BOUND_MARGIN)) -(method :Void showPrefixMap [:Map> map] +(method :Void showPrefixMap [:Map map] (clearUI) (doFor =>key thing map (displayMessage "$key - $thing")))