genautocomplete: add support for fish shell

This commit is contained in:
Matan Rosenberg 2020-04-28 19:53:20 +03:00 committed by Nick Craig-Wood
parent 3b4c24af4e
commit 22f06590f7
2 changed files with 57 additions and 0 deletions

View File

@ -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)
}
},
}

View File

@ -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))
}