diff options
| author | Jeff Carr <[email protected]> | 2025-09-18 07:30:04 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-09-18 07:30:04 -0500 |
| commit | fec80aca170e85e9bb8c122ae2c6c2283930f252 (patch) | |
| tree | 39591ce1b2b561544a31a31ba9688a386ada69cd /bash.orig.go | |
| parent | 1522a2fef0ed356f12a5c9cc011cdad6b4cd4a05 (diff) | |
rename files
Diffstat (limited to 'bash.orig.go')
| -rw-r--r-- | bash.orig.go | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/bash.orig.go b/bash.orig.go new file mode 100644 index 0000000..e0d23bd --- /dev/null +++ b/bash.orig.go @@ -0,0 +1,118 @@ +package prep + +// initializes logging and command line options + +import ( + "fmt" + "os" + "path/filepath" + "strings" + + "go.wit.com/dev/alexflint/arg" + "go.wit.com/lib/gui/shell" + "go.wit.com/log" +) + +var argBash ArgsBash + +/* +This struct can be used with the go-arg package. These +are the generic default command line arguments for the 'GUI' package +*/ +type ArgsBash struct { + Bash bool `arg:"--bash" help:"generate bash completion"` +} + +var myBash *BashAuto + +type BashAuto struct { + id int // should be unique + hidden bool // don't update the toolkits when it's hidden + Auto func([]string) + appName string // a good way to track the name of the binary ? +} + +/* +func dumpjunk() { + fmt.Fprintln(os.Stderr, "") + fmt.Fprintln(os.Stderr, os.Args) + os.Exit(0) +} +*/ + +// argname is the name of the executable +func Bash(argname string, autocomplete func([]string)) *BashAuto { + if len(os.Args) > 1 && os.Args[1] == "--bash" { + doBash(argname) + os.Exit(0) + } + + if len(os.Args) > 1 && os.Args[1] == "--auto-complete" { + autocomplete(os.Args[2:]) + os.Exit(0) + } + + arg.Register(&argBash) + + myBash = new(BashAuto) + myBash.appName = argname + + // parse go.Arg here? + return myBash +} + +// print out auto complete debugging info +func (pb *Auto) AutoDebug() { + 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, shell.FormatDuration(dur), pb.Argv) + // fmt.Println("--all --gui --verbose --force") +} + +// 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 myBash.appName +} + +// makes a bash autocomplete file for your command +func doBash(argname string) { + fmt.Println(makeBashCompletionText(argname)) + + homeDir, err := os.UserHomeDir() + if err != nil { + log.Printf("%v\n", err) + os.Exit(0) + } + filename := filepath.Join(homeDir, ".local/share/bash-completion/completions", argname) + if shell.Exists(filename) { + log.Println(filename, "file already exists") + os.Exit(0) + } + basedir, _ := filepath.Split(filename) + if !shell.IsDir(basedir) { + os.MkdirAll(basedir, os.ModePerm) + } + + if f, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644); err == nil { + f.Write([]byte(makeBashCompletionText(argname))) + f.Close() + log.Println("bash file created:", filename) + log.Println("restart bash") + } else { + log.Info(filename, err) + } + os.Exit(0) +} |
