diff options
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 {  | 
