summaryrefslogtreecommitdiff
path: root/complete.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-10-28 04:32:40 -0500
committerJeff Carr <[email protected]>2025-10-28 04:32:40 -0500
commit83c516aefe9b2e50c6dd847c2991a0300e981f36 (patch)
tree150a8bcb19817ebb7fb4345ad7dd2dd8030a6fd9 /complete.go
parent6aa36f359a86632a269acaaf0effa6dabe67c3bf (diff)
trigger autocomplete Help()
Diffstat (limited to 'complete.go')
-rw-r--r--complete.go57
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 {