diff --git a/Makefile b/Makefile
index bb3b6605..ddfdbb1a 100644
--- a/Makefile
+++ b/Makefile
@@ -77,7 +77,6 @@ cpuprof: prof
go tool pprof -http :5555 fq.prof fq.cpu.prof
update-gomod: always
- GOPROXY=direct go get -d github.com/wader/readline@fq
GOPROXY=direct go get -d github.com/wader/gojq@fq
go mod tidy
@@ -98,7 +97,6 @@ fuzz: always
# tag forked dependeces for history and to make then stay around
release: always
release: WADER_GOJQ_COMMIT=$(shell go list -m -f '{{.Version}}' github.com/wader/gojq | sed 's/.*-\(.*\)/\1/')
-release: WADER_READLINE_COMMIT=$(shell go list -m -f '{{.Version}}' github.com/wader/readline | sed 's/.*-\(.*\)/\1/')
release:
@echo "# wader/fq":
@echo "# make sure head is at wader/master"
@@ -121,10 +119,6 @@ release:
@echo git tag fq-v${VERSION} ${WADER_GOJQ_COMMIT}
@echo git push wader fq-v${VERSION}:fq-v${VERSION}
@echo
- @echo "# wader/readline:"
- @echo git tag fq-v${VERSION} ${WADER_READLINE_COMMIT}
- @echo git push wader fq-v${VERSION}:fq-v${VERSION}
- @echo
@echo "# wader/fq":
@echo git push wader v${VERSION}:v${VERSION}
@echo "# edit draft release notes and publish"
diff --git a/README.md b/README.md
index 01c57bce..35b52ab5 100644
--- a/README.md
+++ b/README.md
@@ -311,7 +311,7 @@ See the [LICENSE](LICENSE) file for license details.
Licenses of direct dependencies:
- Forked version of gojq - https://github.com/itchyny/gojq/blob/main/LICENSE (MIT)
-- Forked version of readline - https://github.com/chzyer/readline/blob/master/LICENSE (MIT)
+- github.com/ergochat/readline - https://github.com/ergochat/readline/blob/master/LICENSE (MIT)
- github.com/BurntSushi/toml - https://github.com/BurntSushi/toml/blob/master/COPYING (MIT)
- github.com/creasty/defaults - https://github.com/creasty/defaults/blob/master/LICENSE (MIT)
- github.com/gomarkdown/markdown - https://github.com/gomarkdown/markdown/blob/master/LICENSE.txt (BSD)
diff --git a/doc/TODO.md b/doc/TODO.md
index 6c055fbc..5a3e9048 100644
--- a/doc/TODO.md
+++ b/doc/TODO.md
@@ -119,12 +119,6 @@
- Do something similar to `builtin.go` in gojq to speedup a bit
- remove `scopedump`?
-#### Readline
-
-- Use something else than `github.com/chzyer/readline`?
-- Fixes for readline
- - Undo (ctrl+-) normal readline bahave differently for backspace (history for each character)
-
#### Big things
- fq play website?
diff --git a/doc/dev.md b/doc/dev.md
index 8284c65e..67295baf 100644
--- a/doc/dev.md
+++ b/doc/dev.md
@@ -341,7 +341,6 @@ docker --context 2016-box run --rm -ti -v "C:${PWD//\//\\}:C:${PWD//\//\\}" -w "
## Implementation details
- fq uses a gojq fork that can be found at https://github.com/wader/gojq/tree/fq (the "fq" branch)
-- fq uses a readline fork that can be found at https://github.com/wader/readline/tree/fq (the "fq" branch)
- cli readline uses raw mode to blocks ctrl-c to become a SIGINT
## Dependencies and source origins
@@ -363,7 +362,6 @@ Issues and PR:s related to fq:
[#125](https://github.com/itchyny/gojq/pull/125) improve performance of join by make it internal
[#141](https://github.com/itchyny/gojq/issues/141) Empty array flatten regression since "improve flatten performance by reducing copy"
-- [readline](https://github.com/chzyer/readline) fork that can be found at https://github.com/wader/readline/tree/fq
- [gopacket](https://github.com/gopacket/gopacket) for TCP and IPv4 reassembly
- [mapstructure](https://github.com/mitchellh/mapstructure) for convenient JSON/map conversion
- [go-difflib](https://github.com/pmezard/go-difflib) for diff tests
diff --git a/go.mod b/go.mod
index 3da7469e..0b1bc62d 100644
--- a/go.mod
+++ b/go.mod
@@ -2,12 +2,8 @@ module github.com/wader/fq
go 1.18
-require (
- // fork of github.com/itchyny/gojq, see github.com/wader/gojq fq branch
- github.com/wader/gojq v0.12.1-0.20231105164134-2b6d9e2f4985
- // fork of github.com/chzyer/readline, see github.com/wader/readline fq branch
- github.com/wader/readline v0.0.0-20230307172220-bcb7158e7448
-)
+// fork of github.com/itchyny/gojq, see github.com/wader/gojq fq branch
+require github.com/wader/gojq v0.12.1-0.20231105164134-2b6d9e2f4985
require (
// bump: gomod-BurntSushi/toml /github\.com\/BurntSushi\/toml v(.*)/ https://github.com/BurntSushi/toml.git|^1
@@ -20,6 +16,9 @@ require (
// bump: gomod-creasty-defaults link "Source diff $CURRENT..$LATEST" https://github.com/creasty/defaults/compare/v$CURRENT..v$LATEST
github.com/creasty/defaults v1.7.0
+ // go get -d github.com/ergochat/readline@master && go mod tidy
+ github.com/ergochat/readline v0.0.7-0.20231224190314-495868e9b5e6
+
// bump: gomod-golang-snappy /github\.com\/golang\/snappy v(.*)/ https://github.com/golang/snappy.git|^0
// bump: gomod-golang-snappy command go get -d github.com/golang/snappy@v$LATEST && go mod tidy
// bump: gomod-golang-snappy link "Source diff $CURRENT..$LATEST" https://github.com/golang/snappy/compare/v$CURRENT..v$LATEST
@@ -63,6 +62,11 @@ require (
// bump: gomod-golang-x-net link "Tags" https://github.com/golang/net/tags
golang.org/x/net v0.19.0
+ // bump: gomod-golang-x-term /golang\.org\/x\/term v(.*)/ https://github.com/golang/term.git|^0
+ // bump: gomod-golang-x-term command go get -d golang.org/x/term@v$LATEST && go mod tidy
+ // bump: gomod-golang-x-term link "Tags" https://github.com/golang/term/tags
+ golang.org/x/term v0.15.0
+
// bump: gomod-golang/text /golang\.org\/x\/text v(.*)/ https://github.com/golang/text.git|^0
// bump: gomod-golang/text command go get -d golang.org/x/text@v$LATEST && go mod tidy
// bump: gomod-golang/text link "Source diff $CURRENT..$LATEST" https://github.com/golang/text/compare/v$CURRENT..v$LATEST
diff --git a/go.sum b/go.sum
index 6f02c96a..b10dfe0c 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/creasty/defaults v1.7.0 h1:eNdqZvc5B509z18lD8yc212CAqJNvfT1Jq6L8WowdBA=
github.com/creasty/defaults v1.7.0/go.mod h1:iGzKe6pbEHnpMPtfDXZEr0NVxWnPTjb1bbDy08fPzYM=
+github.com/ergochat/readline v0.0.7-0.20231224190314-495868e9b5e6 h1:uCzaIvpSl/5f6U/vBdAy72gQVqTxtwpFsWsKM6ehjyE=
+github.com/ergochat/readline v0.0.7-0.20231224190314-495868e9b5e6/go.mod h1:8RNv74chpO0eTm6rdD1H6WZGihL5rJ+RfSlhv4fIfjg=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/gomarkdown/markdown v0.0.0-20231115200524-a660076da3fd h1:PppHBegd3uPZ3Y/Iax/2mlCFJm1w4Qf/zP1MdW4ju2o=
@@ -25,21 +27,18 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/wader/gojq v0.12.1-0.20231105164134-2b6d9e2f4985 h1:Zot2YzBLbILdZN2priMf/GS+Hwtyc2HBGRv85Zc3HlA=
github.com/wader/gojq v0.12.1-0.20231105164134-2b6d9e2f4985/go.mod h1:cenZ41I34RfINFzOtmUa1MIFu0k+n6bLkaQcsZY/nnw=
-github.com/wader/readline v0.0.0-20230307172220-bcb7158e7448 h1:AzpBtmgdXa3uznrb3esNeEoaLqtNEwckRmaUH0qWD6w=
-github.com/wader/readline v0.0.0-20230307172220-bcb7158e7448/go.mod h1:Zgz8IJWvJoe7NK23CCPpC109XMCqJCpUhpHcnnA4XaM=
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
-golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
+golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/pkg/cli/cli.go b/pkg/cli/cli.go
index bf54371f..6665bcf8 100644
--- a/pkg/cli/cli.go
+++ b/pkg/cli/cli.go
@@ -13,9 +13,11 @@ import (
"path/filepath"
"runtime"
+ "github.com/wader/fq/internal/mathex"
"github.com/wader/fq/pkg/interp"
+ "golang.org/x/term"
- "github.com/wader/readline"
+ "github.com/ergochat/readline"
)
func maybeLogFile() {
@@ -88,11 +90,13 @@ func (stdOS) Platform() interp.Platform {
type fdTerminal uintptr
func (fd fdTerminal) Size() (int, int) {
- w, h, _ := readline.GetSize(int(fd))
+ w, h, _ := term.GetSize(int(fd))
+ // TODO: old version return 0 on no terminal
+ w, h = mathex.Max(0, w), mathex.Max(0, h)
return w, h
}
func (fd fdTerminal) IsTerminal() bool {
- return readline.IsTerminal(int(fd))
+ return term.IsTerminal(int(fd))
}
type stdinInput struct {
@@ -175,6 +179,7 @@ func (o *stdOS) Readline(opts interp.ReadlineOpts) (string, error) {
cfg := &readline.Config{
HistoryFile: historyFile,
HistorySearchFold: true,
+ Undo: true,
}
cfg.AutoComplete = autoCompleterFn(func(line []rune, pos int) (newLine [][]rune, length int) {
if o.completerFn == nil {