1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
---
tags:
- v3
search:
boost: 2
---
If default completion isnt sufficient additional customizations are available
- custom auto-completion
- customizing completion command
#### Custom auto-completion
<!-- {
"args": ["complete", "--generate-shell-completion"],
"output": "laundry"
} -->
```go
package main
import (
"fmt"
"log"
"os"
"context"
"github.com/urfave/cli/v3"
)
func main() {
tasks := []string{"cook", "clean", "laundry", "eat", "sleep", "code"}
cmd := &cli.Command{
EnableShellCompletion: true,
Commands: []*cli.Command{
{
Name: "complete",
Aliases: []string{"c"},
Usage: "complete a task on the list",
Action: func(ctx context.Context, cmd *cli.Command) error {
fmt.Println("completed task: ", cmd.Args().First())
return nil
},
ShellComplete: func(ctx context.Context, cmd *cli.Command) {
// This will complete if no args are passed
if cmd.NArg() > 0 {
return
}
for _, t := range tasks {
fmt.Println(t)
}
},
},
},
}
if err := cmd.Run(context.Background(), os.Args); err != nil {
log.Fatal(err)
}
}
```

#### Customize a completion command
By default, a completion command is hidden, meaning the command isn't included in the help message.
You can customize it by setting root Command's `ConfigureShellCompletionCommand`.
```go
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/urfave/cli/v3"
)
func main() {
cmd := &cli.Command{
Name: "greet",
// EnableShellCompletion is unnecessary
ConfigureShellCompletionCommand: func(cmd *cli.Command) { // cmd is a completion command
cmd.Hidden = false // Make a completion command public
cmd.Usage = "..." // Customize Usage
cmd.Description = "..." // Customize Description
},
Commands: []*cli.Command{
{
Name: "hello",
Usage: "Say hello",
Action: func(ctx context.Context, cmd *cli.Command) error {
fmt.Println("Hello")
return nil
},
},
},
}
if err := cmd.Run(context.Background(), os.Args); err != nil {
log.Fatal(err)
}
}
```
#### Customization
The default shell completion flag (`--generate-shell-completion`) is defined as
`cli.EnableShellCompletion`, and may be redefined if desired, e.g.:
<!-- {
"args": ["--generate-shell-completion"],
"output": "wat\nhelp\n"
} -->
```go
package main
import (
"log"
"os"
"context"
"github.com/urfave/cli/v3"
)
func main() {
cmd := &cli.Command{
EnableShellCompletion: true,
Commands: []*cli.Command{
{
Name: "wat",
},
},
}
if err := cmd.Run(context.Background(), os.Args); err != nil {
log.Fatal(err)
}
}
```
|