Combining Short Options

Normally, short options (like -s, -o, -m) are specified individually:

$ cmd -s -o -m "Some message"

If you want to allow users to combine multiple short boolean options (and optionally one non-boolean short option at the end), you can enable this behavior by setting UseShortOptionHandling to true on your cli.App or a specific cli.Command.

Here's an example:

package main

import (
    "fmt"
    "log"
    "os"

    "github.com/aperturerobotics/cli"
)

func main() {
    app := &cli.App{
        UseShortOptionHandling: true,
        Commands: []*cli.Command{
            {
                Name:  "short",
                Usage: "complete a task on the list",
                Flags: []cli.Flag{
                    &cli.BoolFlag{Name: "serve", Aliases: []string{"s"}},
                    &cli.BoolFlag{Name: "option", Aliases: []string{"o"}},
                    &cli.StringFlag{Name: "message", Aliases: []string{"m"}},
                },
                Action: func(cCtx *cli.Context) error {
                    fmt.Println("serve:", cCtx.Bool("serve"))
                    fmt.Println("option:", cCtx.Bool("option"))
                    fmt.Println("message:", cCtx.String("message"))
                    return nil
                },
            },
        },
    }

    if err := app.Run(os.Args); err != nil {
        log.Fatal(err)
    }
}

If your program has any number of bool flags such as serve and option, and optionally one non-bool flag message, with the short options of -s, -o, and -m respectively, setting UseShortOptionHandling will also support the following syntax:

$ cmd -som "Some message"

Important: When UseShortOptionHandling is enabled, you cannot define flags that use a single dash followed by multiple characters (e.g., -option). This syntax becomes ambiguous with combined short options. Standard double-dash flags (e.g., --option) remain unaffected.