diff --git a/cmd/genautocomplete/genautocomplete_fish.go b/cmd/genautocomplete/genautocomplete_fish.go new file mode 100644 index 000000000..edb327b8b --- /dev/null +++ b/cmd/genautocomplete/genautocomplete_fish.go @@ -0,0 +1,44 @@ +package genautocomplete + +import ( + "log" + + "github.com/rclone/rclone/cmd" + "github.com/spf13/cobra" +) + +func init() { + completionDefinition.AddCommand(fishCommandDefinition) +} + +var fishCommandDefinition = &cobra.Command{ + Use: "fish [output_file]", + Short: `Output fish completion script for rclone.`, + Long: ` +Generates a fish autocompletion script for rclone. + +This writes to /etc/fish/completions/rclone.fish by default so will +probably need to be run with sudo or as root, eg + + sudo rclone genautocomplete fish + +Logout and login again to use the autocompletion scripts, or source +them directly + + . /etc/fish/completions/rclone.fish + +If you supply a command line argument the script will be written +there. +`, + Run: func(command *cobra.Command, args []string) { + cmd.CheckArgs(0, 1, command, args) + out := "/etc/fish/completions/rclone.fish" + if len(args) > 0 { + out = args[0] + } + err := cmd.Root.GenFishCompletionFile(out, true) + if err != nil { + log.Fatal(err) + } + }, +} diff --git a/cmd/genautocomplete/genautocomplete_test.go b/cmd/genautocomplete/genautocomplete_test.go index 20c349afb..e97ad1169 100644 --- a/cmd/genautocomplete/genautocomplete_test.go +++ b/cmd/genautocomplete/genautocomplete_test.go @@ -33,3 +33,16 @@ func TestCompletionZsh(t *testing.T) { assert.NoError(t, err) assert.NotEmpty(t, string(bs)) } + +func TestCompletionFish(t *testing.T) { + tempFile, err := ioutil.TempFile("", "completion_fish") + assert.NoError(t, err) + defer func() { _ = tempFile.Close() }() + defer func() { _ = os.Remove(tempFile.Name()) }() + + fishCommandDefinition.Run(fishCommandDefinition, []string{tempFile.Name()}) + + bs, err := ioutil.ReadFile(tempFile.Name()) + assert.NoError(t, err) + assert.NotEmpty(t, string(bs)) +}