fzf/src
Junegunn Choi e03e91477b
0.16.6
2017-03-05 03:05:06 +09:00
..
algo Normalize pattern string before passing it to Algo function 2017-01-09 09:52:17 +09:00
fzf Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
tui Use alternate screen only when the value of height is 100% 2017-03-04 14:09:36 +09:00
util Make util.RuneWidth return 1 for non-displayable characters 2017-01-09 10:49:05 +09:00
ansi_test.go Update ANSI processor to handle more VT-100 escape sequences 2016-11-14 02:15:23 +09:00
ansi.go Update ANSI processor to strip ^H along with its preceding character 2017-02-02 13:00:41 +09:00
cache_test.go Micro-optimizations 2016-08-19 02:39:32 +09:00
cache.go Micro-optimizations 2016-08-19 02:39:32 +09:00
chunklist_test.go Revise ranking algorithm 2016-09-18 14:34:46 +09:00
chunklist.go Performance fix - unnecessary rune convertion on --ansi 2015-08-02 14:25:57 +09:00
constants_unix.go Exclude sysfs in find commands 2017-02-19 01:33:13 +09:00
constants_windows.go Prepare for termbox/windows build 2016-11-07 02:32:14 +09:00
constants.go 0.16.6 2017-03-05 03:05:06 +09:00
core.go 0.16.3 2017-01-30 01:53:17 +09:00
deps Update go-runewidth 2017-02-02 10:08:56 +09:00
history_test.go Implement tcell-based renderer 2016-11-07 02:32:14 +09:00
history.go Lint 2015-08-02 13:11:59 +09:00
item_test.go Micro-optimizations 2016-08-19 02:39:32 +09:00
item.go Micro-optimizations 2016-08-19 02:39:32 +09:00
LICENSE 0.16.3 2017-01-30 01:53:17 +09:00
Makefile Remove Dockerfiles and clean up Makefile 2017-02-06 21:15:29 +09:00
matcher.go Revise ranking algorithm 2016-09-18 14:34:46 +09:00
merger_test.go Remove Offset slice from Result struct 2016-08-20 01:53:32 +09:00
merger.go Remove Offset slice from Result struct 2016-08-20 01:53:32 +09:00
options_test.go Composable actions in --bind 2017-01-22 02:32:49 +09:00
options.go Add --no-clear option 2017-03-04 11:29:31 +09:00
pattern_test.go Fix caching scheme when --exact is set and '-prefix is used 2017-02-01 02:06:56 +09:00
pattern.go Fix caching scheme when --exact is set and '-prefix is used 2017-02-01 02:06:56 +09:00
reader_test.go Performance fix - unnecessary rune convertion on --ansi 2015-08-02 14:25:57 +09:00
reader.go Fix issues in tcell renderer and Windows build 2016-11-08 02:06:34 +09:00
README.md Drop ncurses dependency 2017-01-22 14:13:37 +09:00
result_test.go Add --height option 2017-01-08 02:09:56 +09:00
result.go Fix --tiebreak=begin with algo v2 2017-02-02 13:46:46 +09:00
terminal_test.go Add execute-silent action 2017-01-27 18:56:41 +09:00
terminal_unix.go Prepare for termbox/windows build 2016-11-07 02:32:14 +09:00
terminal_windows.go Prepare for termbox/windows build 2016-11-07 02:32:14 +09:00
terminal.go Use alternate screen only when the value of height is 100% 2017-03-04 14:09:36 +09:00
tokenizer_test.go [perf] Avoid allocating rune array for ascii string 2016-08-14 00:41:30 +09:00
tokenizer.go Micro-optimizations 2016-08-19 02:39:32 +09:00
update_assets.rb Update release script to upload assets in parallel 2017-01-22 18:33:30 +09:00

fzf in Go

fzf in go

This directory contains the source code for the new fzf implementation in 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.

cd ~/.fzf
git pull
./install

Otherwise, follow the instruction 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, 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

Test

Unit tests can be run with make test. Integration tests are written in Ruby script that should be run on tmux.

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

License

MIT