You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fzf/src
Junegunn Choi 62ab8ece5e
0.16.1
8 years ago
..
algo Normalize pattern string before passing it to Algo function 8 years ago
fzf Rewrite fzf in Go 10 years ago
tui Propertly fill window with background color 8 years ago
util Make util.RuneWidth return 1 for non-displayable characters 8 years ago
Dockerfile.android Update build script 8 years ago
Dockerfile.arch Update build script 8 years ago
Dockerfile.centos Update Centos Dockerfile to use Go 1.7 8 years ago
Dockerfile.ubuntu Update build script 8 years ago
LICENSE Update license: 2016 9 years ago
Makefile [ncurses6] Use wcolor_set to support more than 256 color pairs 8 years ago
README.md Add BUILD.md 8 years ago
ansi.go [tcell] 24-bit color support 8 years ago
ansi_test.go Update ANSI processor to handle more VT-100 escape sequences 8 years ago
cache.go Micro-optimizations 8 years ago
cache_test.go Micro-optimizations 8 years ago
chunklist.go Performance fix - unnecessary rune convertion on --ansi 9 years ago
chunklist_test.go Revise ranking algorithm 8 years ago
constants.go 0.16.1 8 years ago
constants_unix.go Add -L flag to the default find command 8 years ago
constants_windows.go Prepare for termbox/windows build 8 years ago
core.go Add --normalize option to normalize latin script characters 8 years ago
history.go Lint 9 years ago
history_test.go Implement tcell-based renderer 8 years ago
item.go Micro-optimizations 8 years ago
item_test.go Micro-optimizations 8 years ago
matcher.go Revise ranking algorithm 8 years ago
merger.go Remove Offset slice from Result struct 8 years ago
merger_test.go Remove Offset slice from Result struct 8 years ago
options.go Add half-page-{up,down} actions (#784) 8 years ago
options_test.go Truncate long lines in preview window 8 years ago
pattern.go Normalize pattern string before passing it to Algo function 8 years ago
pattern_test.go Normalize pattern string before passing it to Algo function 8 years ago
reader.go Fix issues in tcell renderer and Windows build 8 years ago
reader_test.go Performance fix - unnecessary rune convertion on --ansi 9 years ago
result.go Add --height option 8 years ago
result_test.go Add --height option 8 years ago
terminal.go Propertly fill window with background color 8 years ago
terminal_test.go Support field index expressions in preview and execute action 8 years ago
terminal_unix.go Prepare for termbox/windows build 8 years ago
terminal_windows.go Prepare for termbox/windows build 8 years ago
tokenizer.go Micro-optimizations 8 years ago
tokenizer_test.go [perf] Avoid allocating rune array for ascii string 8 years ago
update_assets.rb 0.13.5 8 years ago

README.md

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.

# Unit tests
make test

# Install the executable to ../bin directory
make install

# Integration tests
ruby ../test/test_go.rb

Third-party libraries used

License

MIT