diff options
| author | Jeff Carr <[email protected]> | 2025-10-28 04:32:40 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-10-28 04:32:40 -0500 |
| commit | 83c516aefe9b2e50c6dd847c2991a0300e981f36 (patch) | |
| tree | 150a8bcb19817ebb7fb4345ad7dd2dd8030a6fd9 /complete.go | |
| parent | 6aa36f359a86632a269acaaf0effa6dabe67c3bf (diff) | |
trigger autocomplete Help()
Diffstat (limited to 'complete.go')
| -rw-r--r-- | complete.go | 57 |
1 files changed, 51 insertions, 6 deletions
diff --git a/complete.go b/complete.go index 31a5398..b1711b9 100644 --- a/complete.go +++ b/complete.go @@ -9,12 +9,57 @@ import ( "go.wit.com/lib/protobuf/argvpb" ) -// has the variables for autocomplete -type Complete struct { - Subcommand []string // this will be sent from the shell autocomplete scheme - Partial string // whatever the user has partially entered on the commandline - Stderr io.Writer // this is where Stderr - Stdout io.Writer // this is where Stdout +var useArgv bool +var overrideFlags []string + +// pass in a "pretend" os.Args. Used for bash autocomplete +// error is "good" in this case. The application exists +// and finishes the output for shell autocomplete +// returning "nil" means the application has to figure out what to do +func ParseFlagsArgv(dest ...interface{}) (*Parser, error) { + p, err := NewParser(Config{}, dest...) + if err != nil { + return p, err + } + if argvpb.PB == nil { + panic("argvpb.PB is nil") + } + useArgv = true + overrideFlags = append(overrideFlags, argvpb.Real()...) + err = p.Parse(argvpb.Real()) + if err != nil { + fmt.Fprintf(argvpb.Stddbg, "err(%v)\n", err) + fmt.Fprintln(argvpb.Stddbg, "arg.ParseFlagsArgv()", argvpb.Real()) + fmt.Printf("\n") + fmt.Printf("\n") + fmt.Printf("err(%v)\n", err) + fmt.Println("arg.ParseFlagsArgv()", argvpb.Real()) + s := fmt.Sprintf("p.Parse() problem in argv err(%v)\n", err) + panic(s) + } + if argvpb.PB.HelpCounter > 3 { + argvpb.SetDebug(true) + argvpb.PB.HelpCounter = 0 + if argvpb.Len() == 0 { + fmt.Fprintf(argvpb.Stddbg, "len(PB.Real)=(%d)\n", len(argvpb.PB.Real)) + p.WriteHelp(argvpb.Stderr) + fmt.Fprintf(argvpb.Stddbg, "WriteHelp() (%v)\n", "fricking got here") + fmt.Fprintf(argvpb.Stddbg, "WriteHelp() (%v)\n", "fricking got here") + fmt.Fprintf(argvpb.Stddbg, "WriteHelp() (%v)\n", "fricking got here") + return p, errors.New("WriteHelp() worked") + } else { + fmt.Fprintf(argvpb.Stddbg, "WriteHelp() damnit len(%v) (%v)\n", len(argvpb.PB.Real), argvpb.PB.Real) + fmt.Fprintf(argvpb.Stddbg, "WriteHelp() damnit len(%v) (%v)\n", len(argvpb.PB.Real), argvpb.PB.Real) + fmt.Fprintf(argvpb.Stddbg, "WriteHelp() damnit len(%v) (%v)\n", len(argvpb.PB.Real), argvpb.PB.Real) + } + err = p.WriteHelpForAutocomplete("", argvpb.PB.Real...) + if err != nil { + fmt.Fprintf(argvpb.Stddbg, "returned from WriteHelpForAutocomplete() pb.Real(%v)\n", argvpb.PB.Real) + fmt.Fprintf(argvpb.Stddbg, "returned from WriteHelpForAutocomplete(%v)\n", err) + } + return p, errors.New("WriteHelpForAutocomplete() worked") + } + return p, nil } func (p *Parser) WriteHelpForAutocompleteArgv() error { |
