diff --git a/bash.new.go b/bash.new.go index 708f02b..dddd16d 100644 --- a/bash.new.go +++ b/bash.new.go @@ -298,15 +298,16 @@ func Bash2(argname string, appAutoFunc func(*Auto)) *Auto { } // also try to parse/send cur (?) -func Bash3(argname string, appAutoFunc func(*Auto), dest any) *Auto { +func Bash3(appAutoFunc func(*Auto), dest any) *Auto { myAuto = new(AutoArgs) - myAuto.appName = argname + // myAuto.appName = argname myAuto.autoFunc = appAutoFunc + newTest(dest) - pb := parseArgv(argname) + pb := parseArgv(myAuto.appName) if pb.SetupAuto { // --bash was passed. try to configure bash-completion - doBash2(argname) + doBash2(myAuto.appName) os.Exit(0) } @@ -315,37 +316,37 @@ func Bash3(argname string, appAutoFunc func(*Auto), dest any) *Auto { pb.PrintDebug() } + pb.doHandlePB() // read in the history protobuf file + + // turn on debugging if duration < 200 milliseconds + dur := pb.Duration.AsDuration() + if dur < time.Millisecond*200 { + pb.Debug = true + } + + arg.Register(&argBash) + flags := []string{} + for _, s := range pb.Argv { + if s == "--autodebug" { + continue + } + flags = append(flags, s) + } + // pb.Debug = true + pb.Debugf("DEBUG: MustParse(%v)", flags) + var err error + myAuto.pp, err = arg.ParseFlags(flags, dest) + if err != nil { + pb.Debugf("DEBUG: Parse error: %v", err) + } + + if myAuto.pp == nil { + pb.Debugf("DEBUG: myAuto.pp == nil after ParseFlags()") + } else { + pb.Debugf("DEBUG: myAuto.pp is ok after ParseFlags()") + } + if pb.IsAuto { - pb.doHandlePB() // read in the history protobuf file - - // turn on debugging if duration < 200 milliseconds - dur := pb.Duration.AsDuration() - if dur < time.Millisecond*200 { - pb.Debug = true - } - - arg.Register(&argBash) - flags := []string{} - for _, s := range pb.Argv { - if s == "--autodebug" { - continue - } - flags = append(flags, s) - } - // pb.Debug = true - pb.Debugf("DEBUG: MustParse(%v)", flags) - var err error - myAuto.pp, err = arg.ParseFlags(flags, dest) - if err != nil { - pb.Debugf("DEBUG: Parse error: %v", err) - } - - if myAuto.pp == nil { - pb.Debugf("DEBUG: myAuto.pp == nil after ParseFlags()") - } else { - pb.Debugf("DEBUG: myAuto.pp is ok after ParseFlags()") - } - appAutoFunc(pb) // run the autocomplete function the user made for their application if pb.Debug { // TODO: diff --git a/debugger.go b/debugger.go index 5d1298a..6176ae4 100644 --- a/debugger.go +++ b/debugger.go @@ -40,3 +40,20 @@ func Debugger() { CHAN = log.NewFlag("CHAN", true, full, short, "chan() test code output") WARN = log.NewFlag("WARN", true, full, short, "should warn the user") } + +// Versioned is the interface that the destination struct should implement to +// make a version string appear at the top of the help message. +type Appnamed interface { + // Version returns the version string that will be printed on a line by itself + // at the top of the help message. + Appname() string +} + +// Described is the interface that the destination struct should implement to +func newTest(tmp interface{}) { + if tmp, ok := tmp.(Appnamed); ok { + myAuto.appName = tmp.Appname() + } else { + panic("you need to make the function argv.Appname()") + } +}