From 0024beaedc8894c0c8b8f3b796c63d83f1f6c488 Mon Sep 17 00:00:00 2001 From: BayLee4 <63376748+BayLee4@users.noreply.github.com> Date: Thu, 12 Jan 2023 19:23:50 +0100 Subject: [PATCH] Implement tab completion for words --- go.mod | 3 ++- go.sum | 7 +++++++ src/cli/cli.go | 32 +++++++++++++++++++++++++++++++- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 5f88883..327ef6d 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/kalafut/imohash v1.0.2 github.com/schollz/cli/v2 v2.2.1 github.com/schollz/logger v1.2.0 - github.com/schollz/mnemonicode v1.0.1 + github.com/schollz/mnemonicode v1.0.2-0.20190421205639-63fa713ece0d github.com/schollz/pake/v3 v3.0.5 github.com/schollz/peerdiscovery v1.7.0 github.com/schollz/progressbar/v3 v3.12.2 @@ -20,6 +20,7 @@ require ( require ( github.com/OneOfOne/xxhash v1.2.5 // indirect + github.com/chzyer/readline v1.5.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/kr/pretty v0.1.0 // indirect diff --git a/go.sum b/go.sum index 690a796..f0b6822 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,10 @@ github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= +github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= +github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= +github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -39,6 +43,8 @@ github.com/schollz/logger v1.2.0 h1:5WXfINRs3lEUTCZ7YXhj0uN+qukjizvITLm3Ca2m0Ho= github.com/schollz/logger v1.2.0/go.mod h1:P6F4/dGMGcx8wh+kG1zrNEd4vnNpEBY/mwEMd/vn6AM= github.com/schollz/mnemonicode v1.0.1 h1:LiH5hwADZwjwnfXsaD4xgnMyTAtaKHN+e5AyjRU6WSU= github.com/schollz/mnemonicode v1.0.1/go.mod h1:cl4UAOhUV0mkdjMj/QYaUZbZZdF8BnOqoz8rHMzwboY= +github.com/schollz/mnemonicode v1.0.2-0.20190421205639-63fa713ece0d h1:3zCjdgCJbo9Fot3UoqZkpGiDgT6Nf+iUnOsDEJQay+c= +github.com/schollz/mnemonicode v1.0.2-0.20190421205639-63fa713ece0d/go.mod h1:cl4UAOhUV0mkdjMj/QYaUZbZZdF8BnOqoz8rHMzwboY= github.com/schollz/pake/v3 v3.0.5 h1:MnZVdI987lkjln9BSx/zUb724TZISa2jbO+dPj6BvgQ= github.com/schollz/pake/v3 v3.0.5/go.mod h1:OGbG6htRwSKo6V8R5tg61ufpFmZM1b/PrrSp6g2ZLLc= github.com/schollz/peerdiscovery v1.7.0 h1:JVOl8d39AsGFH5cN6Bs5uCy/puADoG/32wI3zjU/3EM= @@ -75,6 +81,7 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/src/cli/cli.go b/src/cli/cli.go index 21da4be..d01e32d 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -12,6 +12,7 @@ import ( "strings" "time" + "github.com/chzyer/readline" "github.com/schollz/cli/v2" "github.com/schollz/croc/v9/src/comm" "github.com/schollz/croc/v9/src/croc" @@ -19,6 +20,7 @@ import ( "github.com/schollz/croc/v9/src/tcp" "github.com/schollz/croc/v9/src/utils" log "github.com/schollz/logger" + "github.com/schollz/mnemonicode" "github.com/schollz/pake/v3" ) @@ -353,6 +355,24 @@ func saveConfig(c *cli.Context, crocOptions croc.Options) { } } +type TabComplete struct{} + +func (t TabComplete) Do(line []rune, pos int) ([][]rune, int) { + var words = strings.SplitAfter(string(line), "-") + var last_partial_word = words[len(words)-1] + if len(last_partial_word) == 0 { + // No completion + return [][]rune{[]rune("")}, 0 + } + var strArray [][]rune + for _, s := range mnemonicode.WordList { + if strings.HasPrefix(s, last_partial_word) { + strArray = append(strArray, []rune(s[len(last_partial_word):])) + } + } + return strArray, len(last_partial_word) +} + func receive(c *cli.Context) (err error) { comm.Socks5Proxy = c.String("socks5") crocOptions := croc.Options{ @@ -431,7 +451,17 @@ func receive(c *cli.Context) (err error) { } if crocOptions.SharedSecret == "" { - crocOptions.SharedSecret = utils.GetInput("Enter receive code: ") + l, err := readline.NewEx(&readline.Config{ + Prompt: "Enter receive code: ", + AutoComplete: TabComplete{}, + }) + if err != nil { + return err + } + crocOptions.SharedSecret, err = l.Readline() + if err != nil { + return err + } } if c.String("out") != "" { if err = os.Chdir(c.String("out")); err != nil {