summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-09-18 16:48:16 -0500
committerJeff Carr <[email protected]>2025-09-18 16:48:16 -0500
commit56297940f4c51f5ed48caefa06240baab2d51a60 (patch)
tree2a18775781b7d20c7cdff23ef5bc9e1547065c79
parent87751f7c720b9af79bc5c5679b1f003ba5fae4ed (diff)
this is how things are actually supposed to work
-rw-r--r--bash.new.go61
-rw-r--r--debugger.go17
2 files changed, 48 insertions, 30 deletions
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()
}
- if pb.IsAuto {
- pb.doHandlePB() // read in the history protobuf file
+ 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
- }
+ // 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)
+ 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 myAuto.pp == nil {
+ pb.Debugf("DEBUG: myAuto.pp == nil after ParseFlags()")
+ } else {
+ pb.Debugf("DEBUG: myAuto.pp is ok after ParseFlags()")
+ }
+ if pb.IsAuto {
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()")
+ }
+}