diff options
| author | Jeff Carr <[email protected]> | 2025-09-08 15:36:32 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-09-08 15:36:32 -0500 |
| commit | 4c5ded025f33fd19ae14362e9203e130cd0a0ee3 (patch) | |
| tree | b2676800ed895bb91b2ff66a568e8482292803e5 | |
| parent | 192fd065ddf9cf4fffc04ca834b230280b2f5468 (diff) | |
use standard bash stuff
| -rw-r--r-- | argv.go | 41 | ||||
| -rw-r--r-- | argvAutoshell.go | 103 | ||||
| -rw-r--r-- | main.go | 3 |
3 files changed, 43 insertions, 104 deletions
@@ -6,6 +6,9 @@ package main */ import ( + "fmt" + "os" + "go.wit.com/dev/alexflint/arg" ) @@ -35,3 +38,41 @@ func (args) Version() string { func init() { arg.MustParse(&argv) } + +// 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 { + fmt.Fprintln(os.Stderr, argv.BashAuto[0]) + // 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 "merge": + fmt.Println("--force") + default: + if argv.BashAuto[0] == ARGNAME { + // list the subcommands here + fmt.Println("list merge") + } + } + os.Exit(0) +} diff --git a/argvAutoshell.go b/argvAutoshell.go deleted file mode 100644 index 082dbec..0000000 --- a/argvAutoshell.go +++ /dev/null @@ -1,103 +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 - -func (args) doBashAuto() { - // argv.doBashHelp() - switch argv.BashAuto[0] { - case "merge": - fmt.Println("--force") - default: - if argv.BashAuto[0] == ARGNAME { - // list the subcommands here - fmt.Println("list merge") - } - } - 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 { - fmt.Fprintln(os.Stderr, argv.BashAuto[0]) - // 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) 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 -} @@ -9,6 +9,7 @@ import ( "go.wit.com/dev/alexflint/arg" "go.wit.com/gui" + "go.wit.com/lib/fhelp" "go.wit.com/lib/protobuf/forgepb" "go.wit.com/log" ) @@ -31,7 +32,7 @@ func main() { me.pp = arg.MustParse(&argv) if argv.Bash { - argv.doBash() + fhelp.DoBash(ARGNAME) os.Exit(0) } if len(argv.BashAuto) != 0 { |
