fzf is a general-purpose command-line fuzzy finder. It's an
2024-04-21 10:54:36 by Iku Iwasa | Files touched by this commit (3) | |
Log message:
fzf: update to 0.50.0
0.50.0
* Search performance optimization. You can observe 50%+ improvement in some
scenarios.
$ rg --line-number --no-heading --smart-case . > $DATA
$ wc < $DATA
5520118 26862362 897487793
$ hyperfine -w 1 -L bin fzf-0.49.0,fzf-7ce6452,fzf-a5447b8,fzf '{bin} \
--filter "///" < $DATA | head -30'
Summary
fzf --filter "///" < $DATA | head -30 ran
1.16 ± 0.03 times faster than fzf-a5447b8 --filter "///" < \
$DATA | head -30
1.23 ± 0.03 times faster than fzf-7ce6452 --filter "///" < \
$DATA | head -30
1.52 ± 0.03 times faster than fzf-0.49.0 --filter "///" < \
$DATA | head -30
* Added: jump and jump-cancel events that are triggered when leaving jump
mode
# Default behavior
fzf --bind space:jump
# Same as jump-accept action
fzf --bind space:jump,jump:accept
# Accept on jump, abort on cancel
fzf --bind space:jump,jump:accept,jump-cancel:abort
# Change header on jump-cancel
fzf --bind 'space:change-header(Type jump \
label)+jump,jump-cancel:change-header:Jump cancelled'
* Added: a new environment variable $FZF_KEY exported to the child
processes. It's the name of the last key pressed.
fzf: --bind 'space:jump,jump:accept,jump-cancel:transform:[[ $FZF_KEY =~ \
ctrl-c ]] && echo abort'
* fzf can be built with profiling options. See BUILD.md for more information.
* Bug fixes
0.49.0
* Ingestion: performance improved by around 40% (more or less depending on
options)
$ time wc data
5513620 37997130 547840920 data
real 0m0.822s
user 0m0.764s
sys 0m0.052s
$ hyperfine -L bin fzf-0.48.1,fzf '{bin} --sync --bind load:accept < data'
Benchmark 1: fzf-0.48.1 --sync --bind load:accept < data
Time (mean ± σ): 440.3 ms ± 4.9 ms [User: 501.8 ms, System: \
117.0 ms]
Range (min … max): 432.8 ms … 446.1 ms 10 runs
Benchmark 2: fzf --sync --bind load:accept < data
Time (mean ± σ): 303.3 ms ± 4.5 ms [User: 320.1 ms, System: \
108.6 ms]
Range (min … max): 296.6 ms … 311.4 ms 10 runs
Summary
fzf --sync --bind load:accept < data ran
1.45 ± 0.03 times faster than fzf-0.48.1 --sync --bind load:accept < data
* --info=hidden: and --info=inline-right will no longer hide the horizontal
separator by default. This gives you more flexibility in customizing the
layout.
fzf --border --info=inline-right
fzf --border --info=inline-right --separator ═
fzf --border --info=inline-right --no-separator
fzf --border --info=hidden
fzf --border --info=hidden --separator ━
fzf --border --info=hidden --no-separator
* Added two environment variables exported to the child processes
* FZF_PREVIEW_LABEL
* FZF_BORDER_LABEL
# Use the current value of $FZF_PREVIEW_LABEL to determine which actions to \
perform
git ls-files |
fzf --header 'Press CTRL-P to change preview mode' \
--bind='ctrl-p:transform:[[ $FZF_PREVIEW_LABEL =~ cat ]] \
&& echo "change-preview(git log --color=always \
\{})+change-preview-label([[ log ]])" \
|| echo "change-preview(bat --color=always \
\{})+change-preview-label([[ cat ]])"'
* Renamed: track action to track-current to highlight the difference
between the global tracking state set by --track and a one-off tracking
action
* track is still available as an alias
* Added untrack-current and toggle-track-current actions
* *-current actions are no-op when the global tracking state is set
* Bug fixes and minor improvements
|
2024-04-05 21:14:14 by Benny Siegert | Files touched by this commit (161) | |
Log message:
Revbump all Go packages after go121 update
|
2024-03-23 07:34:00 by Iku Iwasa | Files touched by this commit (3) | |
Log message:
fzf: update to 0.48.1
0.48.1
* CTRL-T and ALT-C bindings can be disabled by setting FZF_CTRL_T_COMMAND
and FZF_ALT_C_COMMAND to empty strings respectively when sourcing the
script
# bash
FZF_CTRL_T_COMMAND= FZF_ALT_C_COMMAND= eval "$(fzf --bash)"
# zsh
FZF_CTRL_T_COMMAND= FZF_ALT_C_COMMAND= eval "$(fzf --zsh)"
# fish
fzf --fish | FZF_CTRL_T_COMMAND= FZF_ALT_C_COMMAND= source
* Setting the variables after sourcing the script will have no effect
* Bug fixes
0.48.0
* Shell: integration scripts are now embedded in the fzf binary. This
simplifies the distribution, and the users are less likely to have problems
caused by using incompatible scripts and binaries.
* bash
# Set up fzf key bindings and fuzzy completion
eval "$(fzf --bash)"
* zsh
# Set up fzf key bindings and fuzzy completion
eval "$(fzf --zsh)"
* fish
# Set up fzf key bindings
fzf --fish | source
* Added options for customizing the behavior of the built-in walker
Option Description Default
--walker=OPTS Walker options ([file][,dir][,follow][,hidden]) file,follow,hidden
--walker-root=DIR Root directory from which to start walker .
--walker-skip=DIRS Comma-separated list of directory names to skip \
.git,node_modules
* Examples
# Built-in walker is only used by standalone fzf when $FZF_DEFAULT_COMMAND \
is not set
unset FZF_DEFAULT_COMMAND
fzf # default: --walker=file,follow,hidden --walker-root=. \
--walker-skip=.git,node_modules
fzf --walker=file,dir,hidden,follow --walker-skip=.git,node_modules,target
# Walker options in $FZF_DEFAULT_OPTS
export FZF_DEFAULT_OPTS="--walker=file,dir,hidden,follow \
--walker-skip=.git,node_modules,target"
fzf
# Reading from STDIN; --walker is ignored
seq 100 | fzf --walker=dir
# Reading from $FZF_DEFAULT_COMMAND; --walker is ignored
export FZF_DEFAULT_COMMAND='seq 100'
fzf --walker=dir
* Shell: integration scripts have been updated to use the built-in walker
with these new options and they are now much faster out of the box.
0.47.0
* Replaced "the default find command" with a built-in directory walker to
simplify the code and to achieve better performance and consistent behavior
across platforms. This doesn't affect you if you have $FZF_DEFAULT_COMMAND
set.
* Breaking changes:
* Unlike the previous "find" command, the new traversal code will list
hidden files, but hidden directories will still be ignored
* No filtering of devtmpfs or proc types
* Traversal is parallelized, so the order of the entries will be
different each time
* You may wonder why fzf implements directory walker anyway when it's a
filter program following the Unix philosophy. But fzf has had the walker
code for years to tackle the performance problem on Windows. And I
decided to use the same approach on different platforms as well for the
benefits listed above.
* Built-in: walker is using the excellent charlievieth/fastwalk library,
which easily outperforms its competitors and supports safely following
symlinks.
* Added $FZF_DEFAULT_OPTS_FILE to allow managing default options in a file
* Option precedence from lower to higher
a. Options read from $FZF_DEFAULT_OPTS_FILE
b. Options from $FZF_DEFAULT_OPTS
c. Options from command-line arguments
* Bug fixes and improvements
|
2024-02-10 07:04:36 by Iku Iwasa | Files touched by this commit (3) | |
Log message:
fzf: update to 0.46.1
* Bug fixes and improvements
* Updated rivo/uniseg dependency to v0.4.6
|
2024-02-07 15:51:04 by Benny Siegert | Files touched by this commit (156) | |
Log message:
Revbump all Go packages after go121 update
|
2024-01-28 09:18:18 by Iku Iwasa | Files touched by this commit (3) | |
Log message:
fzf: update to 0.46.0
* Added two new events
* result - triggered when the filtering for the current query is complete
and the result list is ready resize - triggered when the terminal size
* is changed
* fzf now exports the following environment variables to the child processes
Variable Description
FZF_LINES Number of lines fzf takes up excluding padding and margin
FZF_COLUMNS Number of columns fzf takes up excluding padding and margin
FZF_TOTAL_COUNT Total number of items
FZF_MATCH_COUNT Number of matched items
FZF_SELECT_COUNT Number of selected items
FZF_QUERY Current query string
FZF_PROMPT Prompt string
FZF_ACTION The name of the last action performed
* This allows you to write sophisticated transformations like so
# Script to dynamically resize the preview window
transformer='
# 1 line for info, another for prompt, and 2 more lines for preview window \
border
lines=$(( FZF_LINES - FZF_MATCH_COUNT - 4 ))
if [[ $FZF_MATCH_COUNT -eq 0 ]]; then
echo "change-preview-window:hidden"
elif [[ $lines -gt 3 ]]; then
echo "change-preview-window:$lines"
elif [[ $FZF_PREVIEW_LINES -ne 3 ]]; then
echo "change-preview-window:3"
fi
'
seq 10000 | fzf --preview 'seq {} 10000' --preview-window up \
--bind "result:transform:$transformer" \
--bind "resize:transform:$transformer"
* And we're phasing out {fzf:prompt} and {fzf:action}
* Changed: mattn/go-runewidth dependency to rivo/uniseg for accurate
results
* Set --ambidouble if your terminal displays ambiguous width characters
(e.g. box-drawing characters for borders) as 2 columns
* RUNEWIDTH_EASTASIAN=1 is still respected for backward compatibility,
but it's recommended that you use this new option instead
* Bug fixes
|
2024-01-10 20:14:43 by Benny Siegert | Files touched by this commit (152) | |
Log message:
Revbump all Go packages after go121 update
|
2024-01-07 09:12:26 by Iku Iwasa | Files touched by this commit (3) | |
Log message:
fzf: update to 0.45.0
* Added transform action to conditionally perform a series of actions
# Disallow selecting an empty line
echo -e "1. Hello\n2. Goodbye\n\n3. Exit" |
fzf --height '~100%' --reverse --header 'Select one' \
--bind 'enter:transform:[[ -n {} ]] && echo accept || echo \
"change-header:Invalid selection"'
# Move cursor past the empty line
echo -e "1. Hello\n2. Goodbye\n\n3. Exit" |
fzf --height '~100%' --reverse --header 'Select one' \
--bind 'enter:transform:[[ -n {} ]] && echo accept || echo \
"change-header:Invalid selection"' \
--bind 'focus:transform:[[ -n {} ]] && exit; [[ {fzf:action} \
=~ up$ ]] && echo up || echo down'
# A single key binding to toggle between modes
fd --type file |
fzf --prompt 'Files> ' \
--header 'CTRL-T: Switch between Files/Directories' \
--bind 'ctrl-t:transform:[[ ! {fzf:prompt} =~ Files ]] &&
echo "change-prompt(Files> )+reload(fd --type \
file)" ||
echo "change-prompt(Directories> )+reload(fd --type \
directory)"'
* Added placeholder expressions
* {fzf:action} - The name of the last action performed
* {fzf:prompt} - Prompt string (including ANSI color codes)
* {fzf:query} - Synonym for {q}
* Added support for negative height
# Terminal height minus 1, so you can still see the command line
fzf --height=-1
This handles a terminal resize better than --height=$(($(tput lines) - 1))
* Added: accept-or-print-query action that acts like accept but prints the
current query when there's no match for the query
# You can make CTRL-R paste the current query when there's no match
export FZF_CTRL_R_OPTS='--bind enter:accept-or-print-query'
* Note that there are alternative ways to implement the same strategy
# 'become' is apparently more versatile but it's not available on Windows.
export FZF_CTRL_R_OPTS='--bind "enter:become:if [ -z {} ]; then echo \
{q}; else echo {}; fi"'
# Using the new 'transform' action
export FZF_CTRL_R_OPTS='--bind "enter:transform:[ -z {} ] && \
echo print-query || echo accept"'
* Added show-header and hide-header actions
* Bug fixes
|