gencompletion.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package cmd
  2. import (
  3. "os"
  4. "github.com/rs/zerolog"
  5. "github.com/spf13/cobra"
  6. "github.com/drakkan/sftpgo/logger"
  7. )
  8. var genCompletionCmd = &cobra.Command{
  9. Use: "completion [bash|zsh|fish|powershell]",
  10. Short: "Generate shell completion script to the stdout",
  11. Long: `To load completions:
  12. Bash:
  13. $ source <(sftpgo gen completion bash)
  14. # To load completions for each session, execute once:
  15. Linux:
  16. $ sftpgo gen completion bash > /etc/bash_completion.d/sftpgo-completion.bash
  17. MacOS:
  18. $ sftpgo gen completion bash > /usr/local/etc/bash_completion.d/sftpgo-completion.bash
  19. Zsh:
  20. $ source <(sftpgo gen completion zsh)
  21. # To load completions for each session, execute once:
  22. $ sftpgo completion zsh > "${fpath[1]}/_sftpgo"
  23. Fish:
  24. $ sftpgo gen completion fish | source
  25. # To load completions for each session, execute once:
  26. $ sftpgo completion fish > ~/.config/fish/completions/sftpgo.fish
  27. `,
  28. DisableFlagsInUseLine: true,
  29. ValidArgs: []string{"bash", "zsh", "fish", "powershell"},
  30. Args: cobra.ExactValidArgs(1),
  31. Run: func(cmd *cobra.Command, args []string) {
  32. var err error
  33. logger.DisableLogger()
  34. logger.EnableConsoleLogger(zerolog.DebugLevel)
  35. switch args[0] {
  36. case "bash":
  37. err = cmd.Root().GenBashCompletion(os.Stdout)
  38. case "zsh":
  39. err = cmd.Root().GenZshCompletion(os.Stdout)
  40. case "fish":
  41. err = cmd.Root().GenFishCompletion(os.Stdout, true)
  42. case "powershell":
  43. err = cmd.Root().GenPowerShellCompletion(os.Stdout)
  44. }
  45. if err != nil {
  46. logger.WarnToConsole("Unable to generate shell completion script: %v", err)
  47. os.Exit(1)
  48. }
  49. },
  50. }
  51. func init() {
  52. genCmd.AddCommand(genCompletionCmd)
  53. }