From a956bf4081567cdd384ddfbbb58f4a15d2bdc3cc Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sun, 26 Dec 2021 23:16:18 -0700 Subject: [PATCH] autoSuggestPick --- projects/kiss-vscode/src/Util.kiss | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/projects/kiss-vscode/src/Util.kiss b/projects/kiss-vscode/src/Util.kiss index b7928536..24fd2d07 100644 --- a/projects/kiss-vscode/src/Util.kiss +++ b/projects/kiss-vscode/src/Util.kiss @@ -23,6 +23,22 @@ (awaitLet [chosenItem (_quickPick (for string strings (quickPickItem string)))] (when chosenItem chosenItem.label))) +// thanks https://stackoverflow.com/a/69842249 +(function autoSuggestPick [:Array strings] + (new js.lib.Promise + ->[resolve reject] (let [qp (Vscode.window.createQuickPick) + :Array items (for string strings (quickPickItem string))] + (set qp.items items) + (qp.onDidChangeValue + ->v (unlessLet [(Some _) (indexOf strings v)] + (set qp.items (concat [(quickPickItem v)] items)))) + (qp.onDidAccept + ->_ { + (resolve .label (first qp.activeItems)) + (qp.hide) + }) + (qp.show)))) + (function :js.lib.Promise.Thenable quickPickMap [:Map stringMap] (awaitLet [chosenItem (_quickPick (for =>key value stringMap (quickPickItem key (Std.string value))))] (when chosenItem (dictGet stringMap chosenItem.label)))) @@ -81,9 +97,10 @@ (awaitLet [,v (quickPickMap ,options)] ,@body))) +// TODO allow navigating back up to a parent directory (function :Void chooseFileInDir [:String->Void openFile :Bool allowNew &opt :String dir] (withValueOrInputBox dir - (awaitLet [dirOrFile (quickPick (sys.FileSystem.readDirectory dir))] + (awaitLet [dirOrFile ((if allowNew autoSuggestPick quickPick) (sys.FileSystem.readDirectory dir))] (let [dirOrFile (joinPath dir dirOrFile)] (cond ((sys.FileSystem.isDirectory dirOrFile)