diff --git a/cmd/completion.go b/cmd/completion.go new file mode 100644 index 0000000..f96c68d --- /dev/null +++ b/cmd/completion.go @@ -0,0 +1,59 @@ +/* + * SPDX-License-Identifier: AGPL-3.0-only + * Copyright (c) 2022-2024, daeuniverse Organization + */ + +package cmd + +import ( + "bytes" + "errors" + "fmt" + + "github.com/spf13/cobra" +) + +var ( + completionCmd = &cobra.Command{ + Use: "completion [bash|zsh|fish]", + Short: "Output shell completion code for the specified shell (bash, zsh or fish)", + Long: "Output shell completion code for the specified shell (bash, zsh or fish).", + Args: cobra.ExactArgs(1), + ValidArgs: []string{"bash", "zsh", "fish"}, + Hidden: true, + RunE: func(cmd *cobra.Command, args []string) error { + out, err := getCompletion(args[0], cmd.Parent()) + if err != nil { + return err + } + + fmt.Print(out) + return nil + }, + } +) + +// return the auto completion shell script, if supported +func getCompletion(sh string, parent *cobra.Command) (string, error) { + var err error + var buf bytes.Buffer + + switch sh { + case "bash": + err = parent.GenBashCompletion(&buf) + case "zsh": + err = parent.GenZshCompletion(&buf) + case "fish": + err = parent.GenFishCompletion(&buf, true) + default: + err = errors.New("unsupported shell type (must be bash, zsh or fish): " + sh) + } + + if err != nil { + return "", err + } + return buf.String(), nil +} +func init() { + rootCmd.AddCommand(completionCmd) +} diff --git a/cmd/run.go b/cmd/run.go index c3be0d6..a642079 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -55,7 +55,7 @@ var ( ) func init() { - runCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "Config file of dae.") + runCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "Config file of dae.(required)") runCmd.PersistentFlags().StringVar(&logFile, "logfile", "", "Log file to write. Empty means writing to stdout and stderr.") runCmd.PersistentFlags().IntVar(&logFileMaxSize, "logfile-maxsize", 30, "Unit: MB. The maximum size in megabytes of the log file before it gets rotated.") runCmd.PersistentFlags().IntVar(&logFileMaxBackups, "logfile-maxbackups", 3, "The maximum number of old log files to retain.")