gencompletion.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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",
  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. $ sudo sftpgo gen completion bash > /usr/share/bash-completion/completions/sftpgo
  17. MacOS:
  18. $ sudo sftpgo gen completion bash > /usr/local/etc/bash_completion.d/sftpgo
  19. Zsh:
  20. If shell completion is not already enabled in your environment you will need
  21. to enable it. You can execute the following once:
  22. $ echo "autoload -U compinit; compinit" >> ~/.zshrc
  23. To load completions for each session, execute once:
  24. $ sftpgo gen completion zsh > "${fpath[1]}/_sftpgo"
  25. Fish:
  26. $ sftpgo gen completion fish | source
  27. To load completions for each session, execute once:
  28. $ sftpgo gen completion fish > ~/.config/fish/completions/sftpgo.fish
  29. `,
  30. DisableFlagsInUseLine: true,
  31. ValidArgs: []string{"bash", "zsh", "fish", "powershell"},
  32. Args: cobra.ExactValidArgs(1),
  33. Run: func(cmd *cobra.Command, args []string) {
  34. var err error
  35. logger.DisableLogger()
  36. logger.EnableConsoleLogger(zerolog.DebugLevel)
  37. switch args[0] {
  38. case "bash":
  39. err = cmd.Root().GenBashCompletion(os.Stdout)
  40. case "zsh":
  41. err = cmd.Root().GenZshCompletion(os.Stdout)
  42. case "fish":
  43. err = cmd.Root().GenFishCompletion(os.Stdout, true)
  44. case "powershell":
  45. err = cmd.Root().GenPowerShellCompletion(os.Stdout)
  46. }
  47. if err != nil {
  48. logger.WarnToConsole("Unable to generate shell completion script: %v", err)
  49. os.Exit(1)
  50. }
  51. },
  52. }
  53. func init() {
  54. genCmd.AddCommand(genCompletionCmd)
  55. }