summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2017-01-22 14:13:37 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2017-01-22 14:13:37 +0900
commitff248d566d424beb1eda8f7984f385658353b244 (patch)
treeb716bb62907ee70b143f315833f4ef78434d1d9f
parent6ccc12c332f97f6be9487d8289c46964e2d41bd3 (diff)
Drop ncurses dependency
Close #818
-rw-r--r--CHANGELOG.md2
-rwxr-xr-xinstall18
-rw-r--r--man/man1/fzf-tmux.12
-rw-r--r--man/man1/fzf.12
-rw-r--r--src/Makefile55
-rw-r--r--src/README.md17
-rw-r--r--src/constants.go2
-rw-r--r--src/terminal.go5
-rw-r--r--src/tui/dummy.go45
-rw-r--r--src/tui/ncurses.go5
-rw-r--r--src/tui/tcell.go4
11 files changed, 135 insertions, 22 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fac6f347..e6df93e3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,8 @@ CHANGELOG
0.16.2
------
+- Dropped ncurses dependency
+- Binaries for freebsd, openbsd, arm5, arm6, arm7, and arm8
- Added support for composite actions in `--bind`. Multiple actions can be
chained using `+` separator.
- e.g. `fzf --bind 'ctrl-y:execute(echo -n {} | pbcopy)+abort'`
diff --git a/install b/install
index baa7870f..0ff03103 100755
--- a/install
+++ b/install
@@ -2,7 +2,7 @@
set -u
-version=0.16.1
+version=0.16.2-alpha
auto_completion=
key_bindings=
update_config=2
@@ -160,10 +160,18 @@ archi=$(uname -sm)
binary_available=1
binary_error=""
case "$archi" in
- Darwin\ x86_64) download fzf-$version-darwin_${binary_arch:-amd64} ;;
- Darwin\ i*86) download fzf-$version-darwin_${binary_arch:-386} ;;
- Linux\ x86_64) download fzf-$version-linux_${binary_arch:-amd64} ;;
- Linux\ i*86) download fzf-$version-linux_${binary_arch:-386} ;;
+ Darwin\ *64) download fzf-$version-darwin_${binary_arch:-amd64} ;;
+ Darwin\ *86) download fzf-$version-darwin_${binary_arch:-386} ;;
+ Linux\ *64) download fzf-$version-linux_${binary_arch:-amd64} ;;
+ Linux\ *86) download fzf-$version-linux_${binary_arch:-386} ;;
+ Linux\ armv5*) download fzf-$version-linux_${binary_arch:-arm5} ;;
+ Linux\ armv6*) download fzf-$version-linux_${binary_arch:-arm6} ;;
+ Linux\ armv7*) download fzf-$version-linux_${binary_arch:-arm7} ;;
+ Linux\ armv8*) download fzf-$version-linux_${binary_arch:-arm8} ;;
+ FreeBSD\ *64) download fzf-$version-freebsd_${binary_arch:-amd64} ;;
+ FreeBSD\ *86) download fzf-$version-freebsd_${binary_arch:-386} ;;
+ OpenBSD\ *64) download fzf-$version-openbsd_${binary_arch:-amd64} ;;
+ OpenBSD\ *86) download fzf-$version-openbsd_${binary_arch:-386} ;;
*) binary_available=0 binary_error=1 ;;
esac
diff --git a/man/man1/fzf-tmux.1 b/man/man1/fzf-tmux.1
index dd5c0967..bd7c756d 100644
--- a/man/man1/fzf-tmux.1
+++ b/man/man1/fzf-tmux.1
@@ -21,7 +21,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
..
-.TH fzf-tmux 1 "Jan 2017" "fzf 0.16.1" "fzf-tmux - open fzf in tmux split pane"
+.TH fzf-tmux 1 "Jan 2017" "fzf 0.16.2" "fzf-tmux - open fzf in tmux split pane"
.SH NAME
fzf-tmux - open fzf in tmux split pane
diff --git a/man/man1/fzf.1 b/man/man1/fzf.1
index b139dcc0..098ae6a4 100644
--- a/man/man1/fzf.1
+++ b/man/man1/fzf.1
@@ -21,7 +21,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
..
-.TH fzf 1 "Jan 2017" "fzf 0.16.1" "fzf - a command-line fuzzy finder"
+.TH fzf 1 "Jan 2017" "fzf 0.16.2" "fzf - a command-line fuzzy finder"
.SH NAME
fzf - a command-line fuzzy finder
diff --git a/src/Makefile b/src/Makefile
index 77a40944..e702548f 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -15,11 +15,17 @@ SRCDIR := $(GOPATH)/src/github.com/junegunn/fzf/src
DOCKEROPTS := -i -t -v $(ROOTDIR):/fzf/src
BINARY32 := fzf-$(GOOS)_386
BINARY64 := fzf-$(GOOS)_amd64
+BINARYARM5 := fzf-$(GOOS)_arm5
+BINARYARM6 := fzf-$(GOOS)_arm6
BINARYARM7 := fzf-$(GOOS)_arm7
+BINARYARM8 := fzf-$(GOOS)_arm8
VERSION := $(shell awk -F= '/version =/ {print $$2}' constants.go | tr -d "\" ")
RELEASE32 := fzf-$(VERSION)-$(GOOS)_386
RELEASE64 := fzf-$(VERSION)-$(GOOS)_amd64
+RELEASEARM5 := fzf-$(VERSION)-$(GOOS)_arm5
+RELEASEARM6 := fzf-$(VERSION)-$(GOOS)_arm6
RELEASEARM7 := fzf-$(VERSION)-$(GOOS)_arm7
+RELEASEARM8 := fzf-$(VERSION)-$(GOOS)_arm8
export GOPATH
UNAME_M := $(shell uname -m)
@@ -35,16 +41,32 @@ all: fzf/$(BINARY)
ifeq ($(GOOS),windows)
release: fzf/$(BINARY32) fzf/$(BINARY64)
- -cd fzf && cp $(BINARY32) $(RELEASE32).exe && zip $(RELEASE32).zip $(RELEASE32).exe
- cd fzf && cp $(BINARY64) $(RELEASE64).exe && zip $(RELEASE64).zip $(RELEASE64).exe && \
- rm -f $(RELEASE32).exe $(RELEASE64).exe
+ cd fzf && cp $(BINARY32) $(RELEASE32).exe && zip $(RELEASE32).zip $(RELEASE32).exe
+ cd fzf && cp $(BINARY64) $(RELEASE64).exe && zip $(RELEASE64).zip $(RELEASE64).exe
+ cd fzf && rm -f $(RELEASE32).exe $(RELEASE64).exe
+else ifeq ($(GOOS),linux)
+release: fzf/$(BINARY32) fzf/$(BINARY64) fzf/$(BINARYARM5) fzf/$(BINARYARM6) fzf/$(BINARYARM7) fzf/$(BINARYARM8)
+ cd fzf && cp $(BINARY32) $(RELEASE32) && tar -czf $(RELEASE32).tgz $(RELEASE32)
+ cd fzf && cp $(BINARY64) $(RELEASE64) && tar -czf $(RELEASE64).tgz $(RELEASE64)
+ cd fzf && cp $(BINARYARM5) $(RELEASEARM5) && tar -czf $(RELEASEARM5).tgz $(RELEASEARM5)
+ cd fzf && cp $(BINARYARM6) $(RELEASEARM6) && tar -czf $(RELEASEARM6).tgz $(RELEASEARM6)
+ cd fzf && cp $(BINARYARM7) $(RELEASEARM7) && tar -czf $(RELEASEARM7).tgz $(RELEASEARM7)
+ cd fzf && cp $(BINARYARM8) $(RELEASEARM8) && tar -czf $(RELEASEARM8).tgz $(RELEASEARM8)
+ cd fzf && rm -f $(RELEASE32) $(RELEASE64) $(RELEASEARM5) $(RELEASEARM6) $(RELEASEARM7) $(RELEASEARM8)
else
-release: test fzf/$(BINARY32) fzf/$(BINARY64)
- -cd fzf && cp $(BINARY32) $(RELEASE32) && tar -czf $(RELEASE32).tgz $(RELEASE32)
- cd fzf && cp $(BINARY64) $(RELEASE64) && tar -czf $(RELEASE64).tgz $(RELEASE64) && \
- rm -f $(RELEASE32) $(RELEASE64)
+release: fzf/$(BINARY32) fzf/$(BINARY64)
+ cd fzf && cp $(BINARY32) $(RELEASE32) && tar -czf $(RELEASE32).tgz $(RELEASE32)
+ cd fzf && cp $(BINARY64) $(RELEASE64) && tar -czf $(RELEASE64).tgz $(RELEASE64)
+ cd fzf && rm -f $(RELEASE32) $(RELEASE64)
endif
+release-all: clean test
+ GOOS=darwin make release
+ GOOS=linux make release
+ GOOS=freebsd make release
+ GOOS=openbsd make release
+ GOOS=windows make release
+
$(SRCDIR):
mkdir -p $(shell dirname $(SRCDIR))
ln -s $(ROOTDIR) $(SRCDIR)
@@ -60,7 +82,7 @@ android-build: $(SRCDIR)
rm -f $(RELEASEARM7)
test: deps
- SHELL=/bin/sh GOOS=$(GOOS) go test -v -tags "$(TAGS)" ./...
+ SHELL=/bin/sh GOOS= go test -v -tags "$(TAGS)" ./...
install: $(BINDIR)/fzf
@@ -71,10 +93,23 @@ clean:
cd fzf && rm -f fzf-*
fzf/$(BINARY32): deps
- cd fzf && GOARCH=386 CGO_ENABLED=1 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARY32)
+ cd fzf && GOARCH=386 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARY32)
fzf/$(BINARY64): deps
- cd fzf && go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARY64)
+ cd fzf && GOARCH=amd64 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARY64)
+
+# https://github.com/golang/go/wiki/GoArm
+fzf/$(BINARYARM5): deps
+ cd fzf && GOARCH=arm GOARM=5 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARYARM5)
+
+fzf/$(BINARYARM6): deps
+ cd fzf && GOARCH=arm GOARM=6 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARYARM6)
+
+fzf/$(BINARYARM7): deps
+ cd fzf && GOARCH=arm GOARM=7 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARYARM7)
+
+fzf/$(BINARYARM8): deps
+ cd fzf && GOARCH=arm64 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARYARM8)
$(BINDIR)/fzf: fzf/$(BINARY) | $(BINDIR)
cp -f fzf/$(BINARY) $(BINDIR)
diff --git a/src/README.md b/src/README.md
index 2d065a92..ec88ca23 100644
--- a/src/README.md
+++ b/src/README.md
@@ -59,20 +59,31 @@ Unit tests can be run with `make test`. Integration tests are written in Ruby
script that should be run on tmux.
```sh
+cd src
+
# Unit tests
make test
+# Integration tests
+ruby ../test/test_go.rb
+
+# Build binary for the platform
+make
+
# Install the executable to ../bin directory
make install
-# Integration tests
-ruby ../test/test_go.rb
+# Make release archives
+make release
+
+# Make release archives for all supported platforms
+make release-all
```
Third-party libraries used
--------------------------
-- [ncurses][ncurses]
+- ~[ncurses][ncurses]~
- [mattn/go-runewidth](https://github.com/mattn/go-runewidth)
- Licensed under [MIT](http://mattn.mit-license.org)
- [mattn/go-shellwords](https://github.com/mattn/go-shellwords)
diff --git a/src/constants.go b/src/constants.go
index 0faa7da1..082909b8 100644
--- a/src/constants.go
+++ b/src/constants.go
@@ -8,7 +8,7 @@ import (
const (
// Current version
- version = "0.16.1"
+ version = "0.16.2-alpha"
// Core
coordinatorDelayMax time.Duration = 100 * time.Millisecond
diff --git a/src/terminal.go b/src/terminal.go
index 9e30f302..7fcef605 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -305,8 +305,11 @@ func NewTerminal(opts *Options, eventBox *util.EventBox) *Terminal {
return util.Max(maxHeight, minHeight)
}
renderer = tui.NewLightRenderer(opts.Theme, opts.Black, opts.Mouse, opts.Tabstop, maxHeightFunc)
- } else {
+ } else if tui.HasFullscreenRenderer() {
renderer = tui.NewFullscreenRenderer(opts.Theme, opts.Black, opts.Mouse)
+ } else {
+ renderer = tui.NewLightRenderer(opts.Theme, opts.Black, opts.Mouse, opts.Tabstop,
+ func(h int) int { return h })
}
wordRubout := "[^[:alnum:]][[:alnum:]]"
wordNext := "[[:alnum:]][^[:alnum:]]|(.$)"
diff --git a/src/tui/dummy.go b/src/tui/dummy.go
new file mode 100644
index 00000000..01179c89
--- /dev/null
+++ b/src/tui/dummy.go
@@ -0,0 +1,45 @@
+// +build !ncurses
+// +build !tcell
+// +build !windows
+
+package tui
+
+type Attr int
+
+func HasFullscreenRenderer() bool {
+ return false
+}
+
+func (a Attr) Merge(b Attr) Attr {
+ return a | b
+}
+
+const (
+ AttrRegular Attr = Attr(0)
+ Bold = Attr(1)
+ Dim = Attr(1 << 1)
+ Italic = Attr(1 << 2)
+ Underline = Attr(1 << 3)
+ Blink = Attr(1 << 4)
+ Blink2 = Attr(1 << 5)
+ Reverse = Attr(1 << 6)
+)
+
+func (r *FullscreenRenderer) Init() {}
+func (r *FullscreenRenderer) Pause() {}
+func (r *FullscreenRenderer) Clear() {}
+func (r *FullscreenRenderer) Refresh() {}
+func (r *FullscreenRenderer) Close() {}
+
+func (r *FullscreenRenderer) Resume() bool { return false }
+func (r *FullscreenRenderer) DoesAutoWrap() bool { return false }
+func (r *FullscreenRenderer) IsOptimized() bool { return false }
+func (r *FullscreenRenderer) GetChar() Event { return Event{} }
+func (r *FullscreenRenderer) MaxX() int { return 0 }
+func (r *FullscreenRenderer) MaxY() int { return 0 }
+
+func (r *FullscreenRenderer) RefreshWindows(windows []Window) {}
+
+func (r *FullscreenRenderer) NewWindow(top int, left int, width int, height int, border bool) Window {
+ return nil
+}
diff --git a/src/tui/ncurses.go b/src/tui/ncurses.go
index 0978ea8a..2706c91d 100644
--- a/src/tui/ncurses.go
+++ b/src/tui/ncurses.go
@@ -1,3 +1,4 @@
+// +build ncurses
// +build !windows
// +build !tcell
@@ -32,6 +33,10 @@ import (
"unicode/utf8"
)
+func HasFullscreenRenderer() bool {
+ return true
+}
+
type Attr C.uint
type CursesWindow struct {
diff --git a/src/tui/tcell.go b/src/tui/tcell.go
index c898a383..4836bf3c 100644
--- a/src/tui/tcell.go
+++ b/src/tui/tcell.go
@@ -15,6 +15,10 @@ import (
"github.com/junegunn/go-runewidth"
)
+func HasFullscreenRenderer() bool {
+ return true
+}
+
func (p ColorPair) style() tcell.Style {
style := tcell.StyleDefault
return style.Foreground(tcell.Color(p.Fg())).Background(tcell.Color(p.Bg()))