From d5069b63f882d12a3179332f1281bcd1ede44462 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Mon, 8 Sep 2025 16:27:02 -0500 Subject: [PATCH] use new bash code --- argv.go | 47 ++++++++++++++++++++ argvAutoshell.go | 109 ----------------------------------------------- main.go | 3 +- 3 files changed, 49 insertions(+), 110 deletions(-) delete mode 100644 argvAutoshell.go diff --git a/argv.go b/argv.go index 7b5f0ad..a8082e3 100644 --- a/argv.go +++ b/argv.go @@ -3,6 +3,11 @@ package main +import ( + "fmt" + "os" +) + /* this parses the command line arguements using alex flint's go-arg */ @@ -35,3 +40,45 @@ will attempt to launch your terminal windows on the right Workspaces and with the right geometries. TODO: restore the bash working paths ` } + +func deleteMatch() { + // f := forgedb.InitSimple() + fmt.Println("go.wit.com/lib/gui/repostatus todo: need to do this") +} + +// prints help to STDERR // TODO: move everything below this to go-args +func (args) doBashHelp() { + if len(argv.BashAuto) < 2 { + fmt.Fprintf(os.Stderr, "something went wrong with the GO args autocomplete in %s\n", ARGNAME) + return + } + if argv.BashAuto[1] != "''" { + // if this is not blank, then the user has typed something + return + } + if argv.BashAuto[0] != ARGNAME { + // if this is not the name of the command, the user already started doing something + return + } + if argv.BashAuto[0] == ARGNAME { + me.pp.WriteHelp(os.Stderr) + return + } + fmt.Fprintln(os.Stderr, "") + fmt.Fprintln(os.Stderr, "something went wrong with the GO args package") + fmt.Fprintln(os.Stderr, "") +} + +func (args) doBashAuto() { + argv.doBashHelp() + switch argv.BashAuto[0] { + case "dump": + fmt.Println("--terminals") + default: + if argv.BashAuto[0] == ARGNAME { + // list the subcommands here + fmt.Println("--restore save dump dumpx") + } + } + os.Exit(0) +} diff --git a/argvAutoshell.go b/argvAutoshell.go deleted file mode 100644 index 37937ec..0000000 --- a/argvAutoshell.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2017-2025 WIT.COM Inc. All rights reserved. -// Use of this source code is governed by the GPL 3.0 - -package main - -import ( - "fmt" - "os" - "path/filepath" - - "go.wit.com/lib/gui/shell" -) - -/* - handles shell autocomplete -*/ - -// used for shell auto completion -// var ARGNAME string = "forge" // todo: get this from $0 ? - -func deleteMatch() { - // f := forgedb.InitSimple() - fmt.Println("go.wit.com/lib/gui/repostatus todo: need to do this") -} - -func (args) doBashAuto() { - argv.doBashHelp() - switch argv.BashAuto[0] { - case "dump": - fmt.Println("--terminals") - default: - if argv.BashAuto[0] == ARGNAME { - // list the subcommands here - fmt.Println("--restore save dump dumpx") - } - } - os.Exit(0) -} - -// prints help to STDERR // TODO: move everything below this to go-args -func (args) doBashHelp() { - if len(argv.BashAuto) < 2 { - fmt.Fprintf(os.Stderr, "something went wrong with the GO args autocomplete in %s\n", ARGNAME) - return - } - if argv.BashAuto[1] != "''" { - // if this is not blank, then the user has typed something - return - } - if argv.BashAuto[0] != ARGNAME { - // if this is not the name of the command, the user already started doing something - return - } - if argv.BashAuto[0] == ARGNAME { - me.pp.WriteHelp(os.Stderr) - return - } - fmt.Fprintln(os.Stderr, "") - fmt.Fprintln(os.Stderr, "something went wrong with the GO args package") - fmt.Fprintln(os.Stderr, "") -} - -// complete -F forge --bash forge -func (args) doBash() { - if homeDir, err := os.UserHomeDir(); err == nil { - filename := filepath.Join(homeDir, ".local/share/bash-completion/completions", ARGNAME) - if !shell.Exists(filename) { - 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() - } - } - } - fmt.Println(makeBashCompletionText(ARGNAME)) -} - -func makeBashCompletionText(argname string) string { - var out string - - out += fmt.Sprintf("# add this in your bashrc:\n") - out += fmt.Sprintf("\n") - out += fmt.Sprintf("# todo: add this to go-arg as a 'hidden' go-arg option --bash\n") - out += fmt.Sprintf("#\n") - out += fmt.Sprintf("# Put the below in the file: ~/.local/share/bash-completion/completions/%s\n", argname) - out += fmt.Sprintf("#\n") - out += fmt.Sprintf("# todo: make this output work/parse with:\n") - out += fmt.Sprintf("# complete -C " + argname + " --bash go\n") - out += fmt.Sprintf("\n") - out += fmt.Sprintf("_" + argname + "_complete()\n") - out += fmt.Sprintf("{\n") - out += fmt.Sprintf(" # sets local to this func vars\n") - out += fmt.Sprintf(" local cur prev all\n") - out += fmt.Sprintf(" cur=${COMP_WORDS[COMP_CWORD]}\n") - out += fmt.Sprintf(" prev=${COMP_WORDS[COMP_CWORD-1]}\n") - out += fmt.Sprintf(" all=${COMP_WORDS[@]}\n") - out += fmt.Sprintf("\n") - out += fmt.Sprintf(" # this is where we generate the go-arg output\n") - out += fmt.Sprintf(" GOARGS=$(" + argname + " --auto-complete $prev \\'$cur\\' $all)\n") - out += fmt.Sprintf("\n") - out += fmt.Sprintf(" # this compares the command line input from the user\n") - out += fmt.Sprintf(" # to whatever strings we output\n") - out += fmt.Sprintf(" COMPREPLY=( $(compgen -W \"$GOARGS\" -- $cur) ) # THIS WORKS\n") - out += fmt.Sprintf(" return 0\n") - out += fmt.Sprintf("}\n") - out += fmt.Sprintf("complete -F _%s_complete %s\n", argname, argname) - out += fmt.Sprintf("\n") - out += fmt.Sprintf("# copy and paste the above into your bash shell should work\n") - return out -} diff --git a/main.go b/main.go index b295ba0..1dca01f 100644 --- a/main.go +++ b/main.go @@ -11,6 +11,7 @@ import ( "go.wit.com/dev/alexflint/arg" "go.wit.com/gui" + "go.wit.com/lib/fhelp" "go.wit.com/log" ) @@ -32,7 +33,7 @@ func main() { me.pp = arg.MustParse(&argv) if argv.Bash { - argv.doBash() + fhelp.DoBash(ARGNAME) os.Exit(0) } if len(argv.BashAuto) != 0 {