summaryrefslogtreecommitdiffstats
path: root/src
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 /src
parent6ccc12c332f97f6be9487d8289c46964e2d41bd3 (diff)
Drop ncurses dependency
Close #818
Diffstat (limited to 'src')
-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
7 files changed, 118 insertions, 15 deletions
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()))