summaryrefslogtreecommitdiff
path: root/bash.orig.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-09-18 07:30:04 -0500
committerJeff Carr <[email protected]>2025-09-18 07:30:04 -0500
commitfec80aca170e85e9bb8c122ae2c6c2283930f252 (patch)
tree39591ce1b2b561544a31a31ba9688a386ada69cd /bash.orig.go
parent1522a2fef0ed356f12a5c9cc011cdad6b4cd4a05 (diff)
rename files
Diffstat (limited to 'bash.orig.go')
-rw-r--r--bash.orig.go118
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)
+}