gencompletion.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package cmd
  2. import (
  3. "os"
  4. "github.com/rs/zerolog"
  5. "github.com/spf13/cobra"
  6. "github.com/drakkan/sftpgo/v2/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. Powershell:
  30. PS> sftpgo gen completion powershell | Out-String | Invoke-Expression
  31. To load completions for every new session, run:
  32. PS> sftpgo gen completion powershell > sftpgo.ps1
  33. and source this file from your powershell profile.
  34. `,
  35. DisableFlagsInUseLine: true,
  36. ValidArgs: []string{"bash", "zsh", "fish", "powershell"},
  37. Args: cobra.ExactValidArgs(1),
  38. Run: func(cmd *cobra.Command, args []string) {
  39. var err error
  40. logger.DisableLogger()
  41. logger.EnableConsoleLogger(zerolog.DebugLevel)
  42. switch args[0] {
  43. case "bash":
  44. err = cmd.Root().GenBashCompletion(os.Stdout)
  45. case "zsh":
  46. err = cmd.Root().GenZshCompletion(os.Stdout)
  47. case "fish":
  48. err = cmd.Root().GenFishCompletion(os.Stdout, true)
  49. case "powershell":
  50. err = cmd.Root().GenPowerShellCompletionWithDesc(os.Stdout)
  51. }
  52. if err != nil {
  53. logger.WarnToConsole("Unable to generate shell completion script: %v", err)
  54. os.Exit(1)
  55. }
  56. },
  57. }
  58. func init() {
  59. genCmd.AddCommand(genCompletionCmd)
  60. }