fzf/src
Junegunn Choi f99f66570b Add small initial delay to screen update
To avoid flickering when the input is small
2015-01-07 12:46:45 +09:00
..
curses Fix i386 build 2015-01-07 00:24:05 +09:00
fzf Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
algo_test.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
algo.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
atomicbool_test.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
atomicbool.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
cache.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
chunklist_test.go Remove race conditions when accessing the last chunk 2015-01-04 05:01:13 +09:00
chunklist.go Remove race conditions when accessing the last chunk 2015-01-04 05:01:13 +09:00
constants.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
core.go Remove race conditions when accessing the last chunk 2015-01-04 05:01:13 +09:00
Dockerfile.arch Fix i386 build 2015-01-07 00:24:05 +09:00
Dockerfile.centos Build i386 binary as well 2015-01-06 02:04:06 +09:00
Dockerfile.ubuntu Build i386 binary as well 2015-01-06 02:04:06 +09:00
eventbox_test.go Remove unnecessary delay on non/defered interactive mode 2015-01-04 05:00:28 +09:00
eventbox.go Remove unnecessary delay on non/defered interactive mode 2015-01-04 05:00:28 +09:00
item_test.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
item.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
LICENSE Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
Makefile Fix i386 build 2015-01-07 00:24:05 +09:00
matcher.go Fix scan limit for --select-1 and --exit-0 options 2015-01-04 01:47:59 +09:00
options_test.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
options.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
pattern_test.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
pattern.go Do not sort terms when building cache key 2015-01-05 02:32:18 +09:00
reader_test.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
reader.go Remove extraneous quote-escape 2015-01-07 09:59:24 +09:00
README.md Fix i386 build 2015-01-07 00:24:05 +09:00
terminal.go Add small initial delay to screen update 2015-01-07 12:46:45 +09:00
tokenizer_test.go Fix index out of bounds error during Transform 2015-01-05 19:32:44 +09:00
tokenizer.go Fix index out of bounds error during Transform 2015-01-05 19:32:44 +09:00
util_test.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00
util.go Rewrite fzf in Go 2015-01-04 00:37:29 +09:00

fzf in Go

This directory contains the source code for the new fzf implementation in Go. This new version has the following benefits over the previous Ruby version.

  • Immensely faster
    • No GIL. Performance is linearly proportional to the number of cores.
    • It's so fast that I even decided to remove the sort limit (--sort=N)
  • Does not require Ruby and distributed as an executable binary
    • Ruby dependency is especially painful on Ruby 2.1 or above which ships without curses gem

Build

# Build fzf executable
make

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

# Build executables for Linux using Docker
make linux

System requirements

Currently prebuilt binaries are provided only for OS X and Linux. The install script will fall back to the legacy Ruby version on the other systems, but if you have Go installed, you can try building it yourself. (make install)

However, as pointed out in golang.org/doc/install, the Go version will not run on CentOS/RHEL 5.x and thus the install script will choose the Ruby version instead.

The Go version depends on ncurses and some Unix system calls, so it shouldn't run natively on Windows at the moment. But it should be not impossible to support Windows by falling back to a cross-platform alternative such as termbox only on Windows. If you're interested in making fzf work on Windows, please let me know.

Third-party libraries used

Contribution

For the moment, I will not add or accept any new features until we can be sure that the implementation is stable and we have a sufficient number of test cases. However, fixes for obvious bugs and new test cases are welcome.

I also care much about the performance of the implementation (that's the reason I rewrote the whole thing in Go, right?), so please make sure that your change does not result in performance regression. Please be minded that we still don't have a quantitative measure of the performance.

License

MIT