diff options
| author | Jeff Carr <[email protected]> | 2025-10-12 00:11:00 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-10-12 00:11:00 -0500 |
| commit | 2d5370c9a6dd8ab566ec2943e20738b31a7a6606 (patch) | |
| tree | c714dafa13c6763ded14638cee98cf33b79786c7 /structs.go | |
| parent | 7144347aa7dc1e53bb5df051a2c5c3eaacbb34c6 (diff) | |
restructure code
Diffstat (limited to 'structs.go')
| -rw-r--r-- | structs.go | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/structs.go b/structs.go new file mode 100644 index 0000000..1f274f1 --- /dev/null +++ b/structs.go @@ -0,0 +1,83 @@ +package prep + +// initializes logging and command line options + +import ( + "fmt" + "os" + "strings" + + "go.wit.com/dev/alexflint/arg" + "go.wit.com/lib/config" +) + +/* +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 + 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 + match map[string]string // maps for strings +} + +// 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, config.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 +} |
