|
From: Zoltán K. <zo...@pr...> - 2025-07-06 15:13:41
|
I made a mistake in the previous code, it does not print the unknown command. Both
> [ swap drop "Unknown command: " swap append print nl flush help flush 1 exit ]
and
> [ "Unknown command: " prepend print nl flush help flush 1 exit ]
prints it[1], although I am pretty sure there is a better way to achieve this. In fact, you could use "unclip" in other parts of the code, but this was just supposed to be a simple demonstration.
Additionally, you could create a helper word for "unknown command" if it looks not-so-desirable.
[1] Example output:
zolk3ri@void foo $ ./foo.out
Usage: foo [command]
Available commands:
greet - Print a greeting
help - Show this message
zolk3ri@void foo $ ./foo.out greet
Hello from Factor!
zolk3ri@void foo $ ./foo.out foo
Unknown command: foo
Usage: foo [command]
Available commands:
greet - Print a greeting
help - Show this message
Is this close to what you are trying to achieve?
On Sunday, July 6th, 2025 at 4:08 PM, Zoltán Kéri <zo...@pr...> wrote:
> I believe you are looking for something like this unless I am mistaken:
>
> USING: combinators command-line io kernel namespaces sequences ;
> IN: foo
>
> ! Help text
> : help ( -- )
> "Usage: foo [command]" print
> "Available commands:" print
> " greet - Print a greeting" print
> " help - Show this message" print ;
>
> ! Command: greet
> : greet ( -- )
> "Hello from Factor!" print ;
>
> ! Dispatch function: handles command and its arguments
> : dispatch ( cmd rest -- )
> {
> { "greet" [ drop greet ] }
> { "help" [ drop help ] }
> [ drop "Unknown command: " swap append print help ]
> } case ;
>
> ! Entry point
> : run ( -- )
> command-line get dup empty? [
> drop help
> ] [
> dup rest swap first dispatch
> ] if ;
>
> MAIN: run
>
> You can extend it to your liking.
>
> On Saturday, July 5th, 2025 at 9:34 PM, toastal to...@po... wrote:
>
> > > Are you trying to use something like a “sub command” feature?
> >
> > Yep. Like Cmdliner.
> >
> > https://ocaml.github.io/odoc/cmdliner/cmdliner/Cmdliner/Cmd/index.html
> >
> > The ability to call ./my-factor-script cmd sub-cmd --help.
> >
> > _______________________________________________
> > Factor-talk mailing list
> > Fac...@li...
> > https://lists.sourceforge.net/lists/listinfo/factor-talk
|