rclone/cmd/genautocomplete/genautocomplete_zsh.go

60 lines
1.4 KiB
Go
Raw Normal View History

2017-08-31 22:52:51 +08:00
package genautocomplete
import (
"fmt"
2017-08-31 22:52:51 +08:00
"os"
"github.com/rclone/rclone/cmd"
"github.com/rclone/rclone/fs"
2017-08-31 22:52:51 +08:00
"github.com/spf13/cobra"
)
func init() {
completionDefinition.AddCommand(zshCommandDefinition)
}
var zshCommandDefinition = &cobra.Command{
Use: "zsh [output_file]",
Short: `Output zsh completion script for rclone.`,
Long: `Generates a zsh autocompletion script for rclone.
2017-08-31 22:52:51 +08:00
This writes to /usr/share/zsh/vendor-completions/_rclone by default so will
probably need to be run with sudo or as root, e.g.
2017-08-31 22:52:51 +08:00
sudo rclone completion zsh
2017-08-31 22:52:51 +08:00
Logout and login again to use the autocompletion scripts, or source
them directly
autoload -U compinit && compinit
If you supply a command line argument the script will be written
there.
If output_file is "-", then the output will be written to stdout.
2017-08-31 22:52:51 +08:00
`,
Run: func(command *cobra.Command, args []string) {
cmd.CheckArgs(0, 1, command, args)
out := "/usr/share/zsh/vendor-completions/_rclone"
if len(args) > 0 {
if args[0] == "-" {
err := cmd.Root.GenZshCompletion(os.Stdout)
if err != nil {
fs.Fatal(nil, fmt.Sprint(err))
}
return
}
2017-08-31 22:52:51 +08:00
out = args[0]
}
outFile, err := os.Create(out)
if err != nil {
fs.Fatal(nil, fmt.Sprint(err))
2017-08-31 22:52:51 +08:00
}
defer func() { _ = outFile.Close() }()
err = cmd.Root.GenZshCompletion(outFile)
if err != nil {
fs.Fatal(nil, fmt.Sprint(err))
2017-08-31 22:52:51 +08:00
}
},
}