diff --git a/projects/nat-archive-tool/src/nat/ArchiveController.kiss b/projects/nat-archive-tool/src/nat/ArchiveController.kiss index 6aaf7a36..eeacbd7c 100644 --- a/projects/nat-archive-tool/src/nat/ArchiveController.kiss +++ b/projects/nat-archive-tool/src/nat/ArchiveController.kiss @@ -95,7 +95,13 @@ (lambda :Void [] (_collectAndValidateArg arg ->:Void [:Dynamic argValue] {(collectedArgs.push argValue) (lastCollector)}))) -(method :Void runCommand [:Command command] +(method :Void tryRunCommand [:String commandName] + (let [lowerCommandName (commandName.toLowerCase)] + (if (commands.exists lowerCommandName) + (_runCommand (dictGet commands lowerCommandName)) + (ui.displayMessage "$commandName is not a valid command")))) + +(method :Void _runCommand [:Command command] (let [collectedArgs [] &mut lastCollector @@ -126,7 +132,12 @@ `(object name ,(symbolName name) type ,type))] `{ (method ,name [,@methodArgs] ,@body) - (dictSet commands ,(symbolName name) (object args [,@commandArgs] handler (the Function ,name)))})) + // Preserve the capitalization of the command name for pretty help message + (commandNames.push ,(symbolName name)) + // Store the command name without capitalization for forgiving call conventions + (dictSet commands ,(ReaderExp.StrExp (.toLowerCase (symbolNameValue name))) (object args [,@commandArgs] handler (the Function ,name)))})) + +(var :Array commandNames []) (defNew [&prop :Archive archive &prop :ArchiveUI ui] diff --git a/projects/nat-archive-tool/src/nat/CLI.kiss b/projects/nat-archive-tool/src/nat/CLI.kiss index 1a96c653..51ceeb07 100644 --- a/projects/nat-archive-tool/src/nat/CLI.kiss +++ b/projects/nat-archive-tool/src/nat/CLI.kiss @@ -10,9 +10,7 @@ (Sys.print ">> ") (let [command (.trim (.toString (.readLine (Sys.stdin))))] - (if (controller.commands.exists command) - (controller.runCommand (dictGet controller.commands command)) - (Sys.println "$command is not a valid command"))))) + (controller.tryRunCommand command)))) (defNew [])