mirror of
https://github.com/Llewellynvdm/fzf.git
synced 2024-12-24 11:55:45 +00:00
.. | ||
curses | ||
fzf | ||
algo_test.go | ||
algo.go | ||
atomicbool_test.go | ||
atomicbool.go | ||
cache.go | ||
chunklist_test.go | ||
chunklist.go | ||
constants.go | ||
core.go | ||
Dockerfile | ||
eventbox.go | ||
item_test.go | ||
item.go | ||
LICENSE | ||
Makefile | ||
matcher.go | ||
options_test.go | ||
options.go | ||
pattern_test.go | ||
pattern.go | ||
reader_test.go | ||
reader.go | ||
README.md | ||
terminal.go | ||
tokenizer_test.go | ||
tokenizer.go | ||
util_test.go | ||
util.go |
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 executable for Linux x86_64 using Docker
make linux64
Prebuilt binaries
- Darwin x86_64
- Linux x86_64
Third-party libraries used
- ncurses
- mattn/go-runewidth
- Licensed under MIT
- mattn/go-shellwords
- Licensed under MIT
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.