diff options
| author | Alex Dadgar <[email protected]> | 2017-08-23 13:16:52 -0700 |
|---|---|---|
| committer | Alex Dadgar <[email protected]> | 2017-08-24 17:35:36 -0700 |
| commit | 59e6151c5bb3277462aa4c484af0e6f853df662d (patch) | |
| tree | b5a39d189057c9c10df23391ee64ede439fbebc2 /command.go | |
| parent | 5075f6d6e69fb7b5a20a79ca0b87b16a484e2d2a (diff) | |
Allow restricting completion of flags
This PR allows a command to specify that flags should only be completed
when a prefix is present. The motivation behind this is to have the
initial complation to prefer displaying argument completions and only
display flag completions when the user enters "hyphen <tab>".
Diffstat (limited to 'command.go')
| -rw-r--r-- | command.go | 19 |
1 files changed, 16 insertions, 3 deletions
@@ -1,6 +1,10 @@ package complete -import "github.com/posener/complete/match" +import ( + "strings" + + "github.com/posener/complete/match" +) // Command represents a command line // It holds the data that enables auto completion of command line @@ -19,6 +23,11 @@ type Command struct { // Global flags that can appear also after a sub command. GlobalFlags Flags + // FlagsRequirePrefix requires that the prefix is provided before flags are + // autocompleted. This allows completion to only display completions for + // arguments if for example no hypen is provided. + FlagsRequirePrefix string + // Args are extra arguments that the command accepts, those who are // given without any flag before. Args Predictor @@ -86,7 +95,9 @@ func (c *Command) predict(a Args) (options []string, only bool) { return predictor.Predict(a), true } - options = append(options, c.GlobalFlags.Predict(a)...) + if c.FlagsRequirePrefix == "" || strings.HasPrefix(a.Last, c.FlagsRequirePrefix) { + options = append(options, c.GlobalFlags.Predict(a)...) + } // if a sub command was entered, we won't add the parent command // completions and we return here. @@ -101,7 +112,9 @@ func (c *Command) predict(a Args) (options []string, only bool) { } options = append(options, c.Sub.Predict(a)...) - options = append(options, c.Flags.Predict(a)...) + if c.FlagsRequirePrefix == "" || strings.HasPrefix(a.Last, c.FlagsRequirePrefix) { + options = append(options, c.Flags.Predict(a)...) + } if c.Args != nil { options = append(options, c.Args.Predict(a)...) } |
