Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
F
fzf
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to JiHu GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
KMSCAKKSCFKA AKFACAMADCAS
fzf
Commits
8bbf9335
Unverified
Commit
8bbf9335
authored
7 years ago
by
Junegunn Choi
Browse files
Options
Downloads
Patches
Plain Diff
Restructuring: main package in project root
parent
159f30b3
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
.gitignore
+2
-2
2 additions, 2 deletions
.gitignore
.travis.yml
+2
-9
2 additions, 9 deletions
.travis.yml
BUILD.md
+6
-7
6 additions, 7 deletions
BUILD.md
Makefile
+134
-0
134 additions, 0 deletions
Makefile
main.go
+0
-0
0 additions, 0 deletions
main.go
src/README.md
+0
-106
0 additions, 106 deletions
src/README.md
with
144 additions
and
124 deletions
.gitignore
+
2
−
2
View file @
8bbf9335
bin
src/fzf/fzf-*
bin
/fzf
target
pkg
Gemfile.lock
.DS_Store
...
...
This diff is collapsed.
Click to expand it.
.travis.yml
+
2
−
9
View file @
8bbf9335
...
...
@@ -16,13 +16,6 @@ install:
-
sudo apt-get install -y zsh fish
script
:
|
export GOPATH=~/go
export FZF_BASE=$GOPATH/src/github.com/junegunn/fzf
mkdir -p $GOPATH/src/github.com/junegunn
ln -s $(pwd) $FZF_BASE
cd $FZF_BASE/src && make test fzf/fzf-linux_amd64 install &&
cd $FZF_BASE/bin && ln -sf fzf-linux_amd64 fzf-$(./fzf --version)-linux_amd64 &&
cd $FZF_BASE && yes | ./install && rm -f fzf &&
make test install &&
./install --all &&
tmux new "ruby test/test_go.rb > out && touch ok" && cat out && [ -e ok ]
This diff is collapsed.
Click to expand it.
BUILD.md
+
6
−
7
View file @
8bbf9335
...
...
@@ -10,20 +10,19 @@ Build instructions
### Using Makefile
```
sh
# Source files are located in src directory
cd
src
Makefile will set up and use its own
`$GOPATH`
under the project root.
# Build fzf binary for your platform in src/fzf
```
sh
# Build fzf binary for your platform in target
make
# Build fzf binary and copy it to bin directory
make
install
# Build 32-bit and 64-bit executables and tarballs
# Build 32-bit and 64-bit executables and tarballs
in target
make release
# Make release archives for all supported platforms
# Make release archives for all supported platforms
in target
make release-all
```
...
...
@@ -33,7 +32,7 @@ Alternatively, you can build fzf directly with `go get` command without
manually cloning the repository.
```
sh
go get
-u
github.com/junegunn/fzf
/src/fzf
go get
-u
github.com/junegunn/fzf
```
Third-party libraries used
...
...
This diff is collapsed.
Click to expand it.
src/
Makefile
→
Makefile
+
134
−
0
View file @
8bbf9335
...
...
@@ -9,22 +9,29 @@ $(error "$$GOOS is not defined.")
endif
endif
SOURCES
:=
$(
wildcard
*
.go
*
/
*
.go
)
ROOTDIR
:=
$(
shell
dirname
$(
realpath
$(
lastword
$(
MAKEFILE_LIST
))))
BINDIR
:=
$(
shell
dirname
$(
ROOTDIR
))
/bin
ROOT_DIR
:=
$(
shell
dirname
$(
realpath
$(
lastword
$(
MAKEFILE_LIST
))))
GOPATH
:=
$(
ROOT_DIR
)
/gopath
SRC_LINK
:=
$(
GOPATH
)
/src/github.com/junegunn/fzf/src
VENDOR_LINK
:=
$(
GOPATH
)
/src/github.com/junegunn/fzf/vendor
GLIDE_YAML
:=
glide.yaml
GLIDE_LOCK
:=
glide.lock
SOURCES
:=
$(
wildcard
*
.go src/
*
.go src/
*
/
*
.go
)
$(
SRC_LINK
)
$(
VENDOR_LINK
)
$(
GLIDE_LOCK
)
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
"
\"
"
)
VERSION
:=
$(
shell
awk
-F
=
'/version =/ {print $$2
}
'
src/
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
# https://en.wikipedia.org/wiki/Uname
UNAME_M
:=
$(
shell
uname
-m
)
...
...
@@ -46,27 +53,30 @@ else
$(
error
"Build on
$(
UNAME_M
)
is not supported, yet."
)
endif
all
:
fzf/$(BINARY)
all
:
target/$(BINARY)
target
:
mkdir
-p
$@
ifeq
($(GOOS),windows)
release
:
fzf
/$(BINARY32)
fzf
/$(BINARY64)
cd
fzf
&&
cp
-f
$(
BINARY32
)
fzf.exe
&&
zip
$(
RELEASE32
)
.zip fzf.exe
cd
fzf
&&
cp
-f
$(
BINARY64
)
fzf.exe
&&
zip
$(
RELEASE64
)
.zip fzf.exe
cd
fzf
&&
rm
-f
fzf.exe
release
:
target
/$(BINARY32)
target
/$(BINARY64)
cd
target
&&
cp
-f
$(
BINARY32
)
fzf.exe
&&
zip
$(
RELEASE32
)
.zip
bin/
fzf.exe
cd
target
&&
cp
-f
$(
BINARY64
)
fzf.exe
&&
zip
$(
RELEASE64
)
.zip
bin/
fzf.exe
cd
target
&&
rm
-f
fzf.exe
else
ifeq
($(GOOS),linux)
release
:
fzf
/$(BINARY32)
fzf
/$(BINARY64)
fzf
/$(BINARYARM5)
fzf
/$(BINARYARM6)
fzf
/$(BINARYARM7)
fzf
/$(BINARYARM8)
cd
fzf
&&
cp
-f
$(
BINARY32
)
fzf
&&
tar
-czf
$(
RELEASE32
)
.tgz fzf
cd
fzf
&&
cp
-f
$(
BINARY64
)
fzf
&&
tar
-czf
$(
RELEASE64
)
.tgz fzf
cd
fzf
&&
cp
-f
$(
BINARYARM5
)
fzf
&&
tar
-czf
$(
RELEASEARM5
)
.tgz fzf
cd
fzf
&&
cp
-f
$(
BINARYARM6
)
fzf
&&
tar
-czf
$(
RELEASEARM6
)
.tgz fzf
cd
fzf
&&
cp
-f
$(
BINARYARM7
)
fzf
&&
tar
-czf
$(
RELEASEARM7
)
.tgz fzf
cd
fzf
&&
cp
-f
$(
BINARYARM8
)
fzf
&&
tar
-czf
$(
RELEASEARM8
)
.tgz fzf
cd
fzf
&&
rm
-f
fzf
release
:
target
/$(BINARY32)
target
/$(BINARY64)
target
/$(BINARYARM5)
target
/$(BINARYARM6)
target
/$(BINARYARM7)
target
/$(BINARYARM8)
cd
target
&&
cp
-f
$(
BINARY32
)
fzf
&&
tar
-czf
$(
RELEASE32
)
.tgz fzf
cd
target
&&
cp
-f
$(
BINARY64
)
fzf
&&
tar
-czf
$(
RELEASE64
)
.tgz fzf
cd
target
&&
cp
-f
$(
BINARYARM5
)
fzf
&&
tar
-czf
$(
RELEASEARM5
)
.tgz fzf
cd
target
&&
cp
-f
$(
BINARYARM6
)
fzf
&&
tar
-czf
$(
RELEASEARM6
)
.tgz fzf
cd
target
&&
cp
-f
$(
BINARYARM7
)
fzf
&&
tar
-czf
$(
RELEASEARM7
)
.tgz fzf
cd
target
&&
cp
-f
$(
BINARYARM8
)
fzf
&&
tar
-czf
$(
RELEASEARM8
)
.tgz fzf
cd
target
&&
rm
-f
fzf
else
release
:
fzf
/$(BINARY32)
fzf
/$(BINARY64)
cd
fzf
&&
cp
-f
$(
BINARY32
)
fzf
&&
tar
-czf
$(
RELEASE32
)
.tgz fzf
cd
fzf
&&
cp
-f
$(
BINARY64
)
fzf
&&
tar
-czf
$(
RELEASE64
)
.tgz fzf
cd
fzf
&&
rm
-f
fzf
release
:
target
/$(BINARY32)
target
/$(BINARY64)
cd
target
&&
cp
-f
$(
BINARY32
)
fzf
&&
tar
-czf
$(
RELEASE32
)
.tgz fzf
cd
target
&&
cp
-f
$(
BINARY64
)
fzf
&&
tar
-czf
$(
RELEASE64
)
.tgz fzf
cd
target
&&
rm
-f
fzf
endif
release-all
:
clean test
...
...
@@ -76,44 +86,49 @@ release-all: clean test
GOOS
=
openbsd make release
GOOS
=
windows make release
deps
:
$(SOURCES)
cd
..
&&
go get
-u
github.com/Masterminds/glide
&&
$(
GOPATH
)
/bin/glide
install
$(SRC_LINK)
:
mkdir
-p
$(
shell
dirname
$(
SRC_LINK
))
ln
-s
$(
ROOT_DIR
)
/src
$(
SRC_LINK
)
test
:
deps
SHELL
=
/bin/sh
GOOS
=
go
test
-v
-tags
"
$(
TAGS
)
"
./...
$(VENDOR_LINK)
:
mkdir
-p
$(
shell
dirname
$(
VENDOR_LINK
))
ln
-s
$(
ROOT_DIR
)
/vendor
$(
VENDOR_LINK
)
install
:
$(BINDIR)/fzf
$(GLIDE_LOCK)
:
$(GLIDE_YAML)
go get
-u
github.com/Masterminds/glide
&&
$(
GOPATH
)
/bin/glide
install
&&
touch
$@
uninstall
:
rm
-f
$(
BINDIR
)
/fzf
$(
BINDIR
)
/
$(
BINARY
)
test
:
$(SOURCES)
SHELL
=
/bin/sh
GOOS
=
go
test
-v
-tags
"
$(
TAGS
)
"
\
github.com/junegunn/fzf/src
\
github.com/junegunn/fzf/src/algo
\
github.com/junegunn/fzf/src/tui
\
github.com/junegunn/fzf/src/util
install
:
bin/fzf
clean
:
cd
fzf
&&
rm
-f
fzf-
*
rm
-
r
f
target
fzf
/$(BINARY32)
:
deps
cd
fzf
&&
GOARCH
=
386 go build
-a
-ldflags
"-w -extldflags=
$(
LDFLAGS
)
"
-tags
"
$(
TAGS
)
"
-o
$
(
BINARY32
)
target
/$(BINARY32)
:
$(SOURCES)
GOARCH
=
386 go build
-a
-ldflags
"-w -extldflags=
$(
LDFLAGS
)
"
-tags
"
$(
TAGS
)
"
-o
$
@
fzf
/$(BINARY64)
:
deps
cd
fzf
&&
GOARCH
=
amd64 go build
-a
-ldflags
"-w -extldflags=
$(
LDFLAGS
)
"
-tags
"
$(
TAGS
)
"
-o
$
(
BINARY64
)
target
/$(BINARY64)
:
$(SOURCES)
GOARCH
=
amd64 go build
-a
-ldflags
"-w -extldflags=
$(
LDFLAGS
)
"
-tags
"
$(
TAGS
)
"
-o
$
@
# 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
)
target/$(BINARYARM5)
:
$(SOURCES)
GOARCH
=
arm
GOARM
=
5 go build
-a
-ldflags
"-w -extldflags=
$(
LDFLAGS
)
"
-tags
"
$(
TAGS
)
"
-o
$@
fzf
/$(BINARYARM
7
)
:
deps
cd
fzf
&&
GOARCH
=
arm
GOARM
=
7
go build
-a
-ldflags
"-w -extldflags=
$(
LDFLAGS
)
"
-tags
"
$(
TAGS
)
"
-o
$
(
BINARYARM7
)
target
/$(BINARYARM
6
)
:
$(SOURCES)
GOARCH
=
arm
GOARM
=
6
go build
-a
-ldflags
"-w -extldflags=
$(
LDFLAGS
)
"
-tags
"
$(
TAGS
)
"
-o
$
@
fzf
/$(BINARYARM
8
)
:
deps
cd
fzf
&&
GOARCH
=
arm
64
go build
-a
-ldflags
"-w -extldflags=
$(
LDFLAGS
)
"
-tags
"
$(
TAGS
)
"
-o
$
(
BINARYARM8
)
target
/$(BINARYARM
7
)
:
$(SOURCES)
GOARCH
=
arm
GOARM
=
7
go build
-a
-ldflags
"-w -extldflags=
$(
LDFLAGS
)
"
-tags
"
$(
TAGS
)
"
-o
$
@
$(BINDIR)/fzf
:
fzf/$(BINARY) | $(BINDIR)
cp
-f
fzf/
$(
BINARY
)
$(
BINDIR
)
cd
$(
BINDIR
)
&&
ln
-sf
$(
BINARY
)
fzf
target/$(BINARYARM8)
:
$(SOURCES)
GOARCH
=
arm64 go build
-a
-ldflags
"-w -extldflags=
$(
LDFLAGS
)
"
-tags
"
$(
TAGS
)
"
-o
$@
$(BINDIR)
:
mkdir
-p
$@
bin/fzf
:
target/$(BINARY) | bin
cp
-f
target/
$(
BINARY
)
bin/fzf
.PHONY
:
all
deps
release release-all test install
uninstall
clean
.PHONY
:
all release release-all test install clean
This diff is collapsed.
Click to expand it.
src/fzf/
main.go
→
main.go
+
0
−
0
View file @
8bbf9335
File moved
This diff is collapsed.
Click to expand it.
src/README.md
deleted
100644 → 0
+
0
−
106
View file @
159f30b3
fzf in Go
=========
<img
src=
"https://cloud.githubusercontent.com/assets/700826/5725028/028ea834-9b93-11e4-9198-43088c3f295d.gif"
height=
"463"
alt=
"fzf in go"
>
This directory contains the source code for the new fzf implementation in
[
Go
][
go
]
.
Upgrade from Ruby version
-------------------------
The install script has been updated to download the right binary for your
system. If you already have installed fzf, simply git-pull the repository and
rerun the install script.
```
sh
cd
~/.fzf
git pull
./install
```
Otherwise, follow
[
the instruction
][
install
]
as before. You can also install
fzf using Homebrew if you prefer that way.
Motivations
-----------
### No Ruby dependency
There have always been complaints about fzf being a Ruby script. To make
matters worse, Ruby 2.1 removed ncurses binding from its standard libary.
Because of the change, users running Ruby 2.1 or above are forced to build C
extensions of curses gem to meet the requirement of fzf. The new Go version
will be distributed as an executable binary so it will be much more accessible
and should be easier to setup.
### Performance
Many people have been surprised to see how fast fzf is even when it was
written in Ruby. It stays quite responsive even for 100k+ lines, which is
well above the size of the usual input.
The new Go version, of course, is significantly faster than that. It has all
the performance optimization techniques used in Ruby implementation and more.
It also doesn't suffer from
[
GIL
][
gil
]
, so the search performance scales
proportional to the number of CPU cores. On my MacBook Pro (Mid 2012), the new
version was shown to be an order of magnitude faster on certain cases. It also
starts much faster though the difference may not be noticeable.
Build
-----
See
[
BUILD.md
](
../BUILD.md
)
Test
----
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
# Make release archives
make release
# Make release archives for all supported platforms
make release-all
```
Third-party libraries used
--------------------------
-
~
[
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
)
-
Licensed under
[
MIT
](
http://mattn.mit-license.org
)
-
[
mattn/go-isatty
](
https://github.com/mattn/go-isatty
)
-
Licensed under
[
MIT
](
http://mattn.mit-license.org
)
-
[
tcell
](
https://github.com/gdamore/tcell
)
-
Licensed under
[
Apache License 2.0
](
https://github.com/gdamore/tcell/blob/master/LICENSE
)
License
-------
[
MIT
](
LICENSE
)
[
install
]:
https://github.com/junegunn/fzf#installation
[
go
]:
https://golang.org/
[
gil
]:
http://en.wikipedia.org/wiki/Global_Interpreter_Lock
[
ncurses
]:
https://www.gnu.org/software/ncurses/
[
req
]:
http://golang.org/doc/install
[
tcell
]:
https://github.com/gdamore/tcell
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment