package prep // initializes logging and command line options import ( "fmt" "os" "strings" "go.wit.com/dev/alexflint/arg" "go.wit.com/lib/cobol" ) /* This struct can be used with the go-arg package. These are the generic default command line arguments for the 'GUI' package */ var argBash ArgsBash type ArgsBash struct { Bash bool `arg:"--bash" help:"generate bash completion"` } // try this struct out (?) var myAuto *AutoArgs // this is a work in progress type AutoArgs struct { id int // should be unique hidden bool // don't update the toolkits when it's hidden Auto func([]string) // the function for shell autocomplete appName string // a good way to track the name of the binary ? examples func() string // some examples appExit func() // app Exit() buildtime func() (string, string) // some examples pp *arg.Parser // for parsing the command line args. Yay to alexf lint! autoFunc func(*Auto) // also a function for autocomplete } // print out auto complete debugging info func (pb *Auto) PrintDebug() { dur := pb.Duration.AsDuration() pb.Debugf("AUTOCOMPLETE: arg0='%s' arg1='%s' partial='%s' cmd='%s' age=%s argv=%v\n", pb.Arg0, pb.Arg1, pb.Partial, pb.Cmd, cobol.FormatDuration(dur), pb.Argv) } func (pb *Auto) WriteHelp() { myAuto.pp.WriteHelp(os.Stdout) } func (pb *Auto) Debugf(fmts string, parts ...any) { fmts = strings.TrimSpace(fmts) fmts += "\n" // NOTE: env doesn't work probably most (all?) the time because bash // doesn't send all the ENV to autocomplete. so, trap on a "--autodebug" command line arg if os.Getenv("AUTOCOMPLETE_VERBOSE") == "true" || pb.Debug { if !pb.Newline { fmt.Fprintf(os.Stderr, "\n") pb.Newline = true } fmt.Fprintf(os.Stderr, fmts, parts...) } else { // fmt.Fprintf(os.Stderr, "NOT DOING ANYTHING\n") } } // returns the last command (is blank if the current arg is not blank) func GetLast(cur string, argv []string) string { if cur != "''" { return "" } for _, s := range argv { if strings.HasPrefix(s, "-") { continue } return s } return "" } // returns the name of the executable registered for shell autocomplete func AppName() string { return myAuto.appName }