Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package fzf for openSUSE:Factory checked in at 2024-03-13 22:21:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fzf (Old) and /work/SRC/openSUSE:Factory/.fzf.new.1770 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fzf" Wed Mar 13 22:21:35 2024 rev:44 rq:1157747 version:0.48.0 Changes: -------- --- /work/SRC/openSUSE:Factory/fzf/fzf.changes 2024-03-11 15:41:42.919616317 +0100 +++ /work/SRC/openSUSE:Factory/.fzf.new.1770/fzf.changes 2024-03-13 22:22:57.577966993 +0100 @@ -1,0 +2,14 @@ +Wed Mar 13 17:37:01 UTC 2024 - Joshua Smith <smolsh...@opensuse.org> + +- Update to version 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. + * Added options for customizing the behavior of the built-in + walker + * 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. + +------------------------------------------------------------------- Old: ---- fzf-0.47.0.tar.gz New: ---- fzf-0.48.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fzf.spec ++++++ --- /var/tmp/diff_new_pack.w49UjD/_old 2024-03-13 22:22:58.105986482 +0100 +++ /var/tmp/diff_new_pack.w49UjD/_new 2024-03-13 22:22:58.105986482 +0100 @@ -18,7 +18,7 @@ %global _lto_cflags %{nil} Name: fzf -Version: 0.47.0 +Version: 0.48.0 Release: 0 Summary: A command-line fuzzy finder License: MIT ++++++ fzf-0.47.0.tar.gz -> fzf-0.48.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/CHANGELOG.md new/fzf-0.48.0/CHANGELOG.md --- old/fzf-0.47.0/CHANGELOG.md 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/CHANGELOG.md 2024-03-13 16:02:53.000000000 +0100 @@ -1,17 +1,62 @@ CHANGELOG ========= +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 + ```sh + # Set up fzf key bindings and fuzzy completion + eval "$(fzf --bash)" + ``` + - zsh + ```sh + # Set up fzf key bindings and fuzzy completion + eval "$(fzf --zsh)" + ``` + - fish + ```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 + ```sh + # 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"][find] with a built-in directory traversal to simplify the code and to achieve better performance and consistent behavior across platforms. +- Replaced ["the default find command"][find] 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][find], 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 would wonder why fzf implements directory traversal anyway when it's a filter program following the Unix philosophy. - But fzf has had [the traversal code for years][walker] 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 traversal is now done using the excellent [charlievieth/fastwalk][fastwalk] library, which easily outperforms its competitors and supports safely following symlinks. + - You may wonder why fzf implements directory walker anyway when it's a filter program following the [Unix philosophy][unix]. + But fzf has had [the walker code for years][walker] 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][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 - See [#3618](https://github.com/junegunn/fzf/pull/3618) - Option precedence from lower to higher @@ -23,6 +68,7 @@ [find]: https://github.com/junegunn/fzf/blob/0.46.1/src/constants.go#L60-L64 [walker]: https://github.com/junegunn/fzf/pull/1847 [fastwalk]: https://github.com/charlievieth/fastwalk +[unix]: https://en.wikipedia.org/wiki/Unix_philosophy 0.46.1 ------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/README.md new/fzf-0.48.0/README.md --- old/fzf-0.47.0/README.md 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/README.md 2024-03-13 16:02:53.000000000 +0100 @@ -56,6 +56,7 @@ * [Using git](#using-git) * [Using Linux package managers](#using-linux-package-managers) * [Windows](#windows) + * [Setting up shell integration](#setting-up-shell-integration) * [As Vim plugin](#as-vim-plugin) * [Upgrading fzf](#upgrading-fzf) * [Building fzf](#building-fzf) @@ -104,9 +105,9 @@ - `fzf` executable - `fzf-tmux` script for launching fzf in a tmux pane -- Shell extensions +- Shell integration - Key bindings (`CTRL-T`, `CTRL-R`, and `ALT-C`) (bash, zsh, fish) - - Fuzzy auto-completion (bash, zsh) + - Fuzzy completion (bash, zsh) - Vim/Neovim plugin You can [download fzf executable][bin] alone if you don't need the extra @@ -121,11 +122,12 @@ ```sh brew install fzf - -# To install useful key bindings and fuzzy completion: -$(brew --prefix)/opt/fzf/install ``` +> [!IMPORTANT] +> To set up shell integration (key bindings and fuzzy completion), +> see [the instructions below](#setting-up-shell-integration). + fzf is also available [via MacPorts][portfile]: `sudo port install fzf` [portfile]: https://github.com/macports/macports-ports/blob/master/sysutils/fzf/Portfile @@ -140,6 +142,9 @@ ~/.fzf/install ``` +The install script will add lines to your shell configuration file to modify +`$PATH` and set up shell integration. + ### Using Linux package managers | Package Manager | Linux Distribution | Command | @@ -158,10 +163,9 @@ | XBPS | Void Linux | `sudo xbps-install -S fzf` | | Zypper | openSUSE | `sudo zypper install fzf` | -> :warning: **Key bindings (CTRL-T / CTRL-R / ALT-C) and fuzzy auto-completion -> may not be enabled by default.** -> -> Refer to the package documentation for more information. (e.g. `apt show fzf`) +> [!IMPORTANT] +> To set up shell integration (key bindings and fuzzy completion), +> see [the instructions below](#setting-up-shell-integration). [](https://repology.org/project/fzf/versions) @@ -187,6 +191,31 @@ [windows-wiki]: https://github.com/junegunn/fzf/wiki/Windows +### Setting up shell integration + +Add the following line to your shell configuration file. + +* bash + ```sh + # Set up fzf key bindings and fuzzy completion + eval "$(fzf --bash)" + ``` +* zsh + ```sh + # Set up fzf key bindings and fuzzy completion + eval "$(fzf --zsh)" + ``` +* fish + ```fish + # Set up fzf key bindings + fzf --fish | source + ``` + +> [!NOTE] +> `--bash`, `--zsh`, and `--fish` options are only available in +> fzf 0.48.0 or above. If you have an older version of fzf, refer to the +> package documentation for more information. (e.g. `apt show fzf`) + ### As Vim plugin If you use @@ -231,21 +260,26 @@ ``` Without STDIN pipe, fzf will traverse the file system under the current -directory to get the list of files, skipping hidden directories. (You can -override the default behavior with `FZF_DEFAULT_COMMAND`) +directory to get the list of files. ```sh vim $(fzf) ``` -> *:bulb: A more robust solution would be to use `xargs` but we've presented -> the above as it's easier to grasp* +> [!NOTE] +> You can override the default behavior +> * Either by setting `$FZF_DEFAULT_COMMAND` to a command that generates the desired list +> * Or by setting `--walker`, `--walker-root`, and `--walker-skip` options in `$FZF_DEFAULT_OPTS` + +> [!WARNING] +> A more robust solution would be to use `xargs` but we've presented +> the above as it's easier to grasp > ```sh > fzf --print0 | xargs -0 -o vim > ``` -> -> *:bulb: fzf also has the ability to turn itself into a different process.* +> [!TIP] +> fzf also has the ability to turn itself into a different process. > > ```sh > fzf --bind 'enter:become(vim {})' @@ -319,13 +353,6 @@ - `FZF_DEFAULT_COMMAND` - Default command to use when input is tty - e.g. `export FZF_DEFAULT_COMMAND='fd --type f'` - - > :warning: This variable is not used by shell extensions due to the - > slight difference in requirements. - > - > (e.g. `CTRL-T` runs `$FZF_CTRL_T_COMMAND` instead, `vim **<tab>` runs - > `_fzf_compgen_path()`, and `cd **<tab>` runs `_fzf_compgen_dir()`) - > - > The available options are described later in this document. - `FZF_DEFAULT_OPTS` - Default options - e.g. `export FZF_DEFAULT_OPTS="--layout=reverse --inline-info"` @@ -334,6 +361,17 @@ point to the location of the file - e.g. `export FZF_DEFAULT_OPTS_FILE=~/.fzfrc` +> [!WARNING] +> `FZF_DEFAULT_COMMAND` is not used by shell integration due to the +> slight difference in requirements. +> +> * `CTRL-T` runs `$FZF_CTRL_T_COMMAND` to get a list of files and directories +> * `ALT-C` runs `$FZF_ALT_C_COMMAND` to get a list of directories +> * `vim ~/**<tab>` runs `fzf_compgen_path()` with the prefix (`~/`) as the first argument +> * `cd foo**<tab>` runs `fzf_compgen_dir()` with the prefix (`foo`) as the first argument +> +> The available options are described later in this document. + ### Options See the man page (`man fzf`) for the full list of options. @@ -388,11 +426,14 @@ fish. - `CTRL-T` - Paste the selected files and directories onto the command-line - - Set `FZF_CTRL_T_COMMAND` to override the default command + - The list is generated using `--walker file,dir,follow,hidden` option + - You can override the behavior by setting `FZF_CTRL_T_COMMAND` to a custom command that generates the desired list + - Or you can set `--walker*` options in `FZF_CTRL_T_OPTS` - Set `FZF_CTRL_T_OPTS` to pass additional options to fzf ```sh # Preview file content using bat (https://github.com/sharkdp/bat) export FZF_CTRL_T_OPTS=" + --walker-skip .git,node_modules,target --preview 'bat -n --color=always {}' --bind 'ctrl-/:change-preview-window(down|hidden|)'" ``` @@ -411,11 +452,15 @@ --header 'Press CTRL-Y to copy command into clipboard'" ``` - `ALT-C` - cd into the selected directory + - The list is generated using `--walker dir,follow,hidden` option - Set `FZF_ALT_C_COMMAND` to override the default command + - Or you can set `--walker-*` options in `FZF_ALT_C_OPTS` - Set `FZF_ALT_C_OPTS` to pass additional options to fzf ```sh # Print tree structure in the preview window - export FZF_ALT_C_OPTS="--preview 'tree -C {}'" + export FZF_ALT_C_OPTS=" + --walker-skip .git,node_modules,target + --preview 'tree -C {}'" ``` If you're on a tmux session, you can start fzf in a tmux split-pane or in @@ -739,22 +784,21 @@ More advanced examples can be found [here](https://github.com/junegunn/fzf/blob/master/ADVANCED.md). ----- - -Since fzf is a general-purpose text filter rather than a file finder, **it is -not a good idea to add `--preview` option to your `$FZF_DEFAULT_OPTS`**. - -```sh -# ********************* -# ** DO NOT DO THIS! ** -# ********************* -export FZF_DEFAULT_OPTS='--preview "bat --style=numbers --color=always --line-range :500 {}"' - -# bat doesn't work with any input other than the list of files -ps -ef | fzf -seq 100 | fzf -history | fzf -``` +> [!WARNING] +> Since fzf is a general-purpose text filter rather than a file finder, **it is +> not a good idea to add `--preview` option to your `$FZF_DEFAULT_OPTS`**. +> +> ```sh +> # ********************* +> # ** DO NOT DO THIS! ** +> # ********************* +> export FZF_DEFAULT_OPTS='--preview "bat --style=numbers --color=always --line-range :500 {}"' +> +> # bat doesn't work with any input other than the list of files +> ps -ef | fzf +> seq 100 | fzf +> history | fzf +> ``` ### Previewing an image @@ -787,7 +831,7 @@ # Setting fd as the default source for fzf export FZF_DEFAULT_COMMAND='fd --type f --strip-cwd-prefix' -# Now fzf (w/o pipe) will use fd instead of find +# Now fzf (w/o pipe) will use the fd command to generate the list fzf # To apply the command to CTRL-T as well diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/bin/fzf-tmux new/fzf-0.48.0/bin/fzf-tmux --- old/fzf-0.47.0/bin/fzf-tmux 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/bin/fzf-tmux 2024-03-13 16:02:53.000000000 +0100 @@ -196,8 +196,9 @@ exit 2 fi fi -[[ -n "$FZF_DEFAULT_OPTS" ]] && envs="$envs FZF_DEFAULT_OPTS=$(printf %q "$FZF_DEFAULT_OPTS")" -[[ -n "$FZF_DEFAULT_COMMAND" ]] && envs="$envs FZF_DEFAULT_COMMAND=$(printf %q "$FZF_DEFAULT_COMMAND")" +envs="$envs FZF_DEFAULT_COMMAND=$(printf %q "$FZF_DEFAULT_COMMAND")" +envs="$envs FZF_DEFAULT_OPTS=$(printf %q "$FZF_DEFAULT_OPTS")" +envs="$envs FZF_DEFAULT_OPTS_FILE=$(printf %q "$FZF_DEFAULT_OPTS_FILE")" [[ -n "$RUNEWIDTH_EASTASIAN" ]] && envs="$envs RUNEWIDTH_EASTASIAN=$(printf %q "$RUNEWIDTH_EASTASIAN")" [[ -n "$BAT_THEME" ]] && envs="$envs BAT_THEME=$(printf %q "$BAT_THEME")" echo "$envs;" > "$argsf" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/go.mod new/fzf-0.48.0/go.mod --- old/fzf-0.47.0/go.mod 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/go.mod 2024-03-13 16:02:53.000000000 +0100 @@ -6,8 +6,8 @@ github.com/mattn/go-isatty v0.0.20 github.com/mattn/go-shellwords v1.0.12 github.com/rivo/uniseg v0.4.7 - golang.org/x/sys v0.17.0 - golang.org/x/term v0.17.0 + golang.org/x/sys v0.18.0 + golang.org/x/term v0.18.0 ) require ( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/go.sum new/fzf-0.48.0/go.sum --- old/fzf-0.47.0/go.sum 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/go.sum 2024-03-13 16:02:53.000000000 +0100 @@ -35,13 +35,15 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/install new/fzf-0.48.0/install --- old/fzf-0.47.0/install 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/install 2024-03-13 16:02:53.000000000 +0100 @@ -2,7 +2,7 @@ set -u -version=0.47.0 +version=0.48.0 auto_completion= key_bindings= update_config=2 @@ -262,6 +262,12 @@ PATH="\${PATH:+\${PATH}:}$fzf_base/bin" fi +EOF + + if [[ $auto_completion -eq 1 ]] && [[ $key_bindings -eq 1 ]]; then + echo "eval \"\$(fzf --$shell)\"" >> "$src" + else + cat >> "$src" << EOF # Auto-completion # --------------- $fzf_completion @@ -270,6 +276,7 @@ # ------------ $fzf_key_bindings EOF + fi echo "OK" done @@ -281,18 +288,6 @@ or set --universal fish_user_paths \$fish_user_paths "$fzf_base"/bin EOF [ $? -eq 0 ] && echo "OK" || echo "Failed" - - mkdir -p "${fish_dir}/functions" - fish_binding="${fish_dir}/functions/fzf_key_bindings.fish" - if [ $key_bindings -ne 0 ]; then - echo -n "Symlink $fish_binding ... " - ln -sf "$fzf_base/shell/key-bindings.fish" \ - "$fish_binding" && echo "OK" || echo "Failed" - else - echo -n "Removing $fish_binding ... " - rm -f "$fish_binding" - echo "OK" - fi fi append_line() { @@ -355,12 +350,23 @@ if [ $key_bindings -eq 1 ] && [[ "$shells" =~ fish ]]; then bind_file="${fish_dir}/functions/fish_user_key_bindings.fish" if [ ! -e "$bind_file" ]; then + mkdir -p "${fish_dir}/functions" create_file "$bind_file" \ 'function fish_user_key_bindings' \ - ' fzf_key_bindings' \ + ' fzf --fish | source' \ 'end' else - append_line $update_config "fzf_key_bindings" "$bind_file" + echo "Check $bind_file:" + lno=$(\grep -nF "fzf_key_bindings" "$bind_file" | sed 's/:.*//' | tr '\n' ' ') + if [[ -n $lno ]]; then + echo " ** Found 'fzf_key_bindings' in line #$lno" + echo " ** You have to replace the line to 'fzf --fish | source'" + echo + else + echo " - Clear" + echo + append_line $update_config "fzf --fish | source" "$bind_file" + fi fi fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/install.ps1 new/fzf-0.48.0/install.ps1 --- old/fzf-0.47.0/install.ps1 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/install.ps1 2024-03-13 16:02:53.000000000 +0100 @@ -1,4 +1,4 @@ -$version="0.47.0" +$version="0.48.0" $fzf_base=Split-Path -Parent $MyInvocation.MyCommand.Definition diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/main.go new/fzf-0.48.0/main.go --- old/fzf-0.47.0/main.go 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/main.go 2024-03-13 16:02:53.000000000 +0100 @@ -1,14 +1,55 @@ package main import ( + _ "embed" + "fmt" + "strings" + fzf "github.com/junegunn/fzf/src" "github.com/junegunn/fzf/src/protector" ) -var version string = "0.47" +var version string = "0.48" var revision string = "devel" +//go:embed shell/key-bindings.bash +var bashKeyBindings []byte + +//go:embed shell/completion.bash +var bashCompletion []byte + +//go:embed shell/key-bindings.zsh +var zshKeyBindings []byte + +//go:embed shell/completion.zsh +var zshCompletion []byte + +//go:embed shell/key-bindings.fish +var fishKeyBindings []byte + +func printScript(label string, content []byte) { + fmt.Println("### " + label + " ###") + fmt.Println(strings.TrimSpace(string(content))) + fmt.Println("### end: " + label + " ###") +} + func main() { protector.Protect() - fzf.Run(fzf.ParseOptions(), version, revision) + options := fzf.ParseOptions() + if options.Bash { + printScript("key-bindings.bash", bashKeyBindings) + printScript("completion.bash", bashCompletion) + return + } + if options.Zsh { + printScript("key-bindings.zsh", zshKeyBindings) + printScript("completion.zsh", zshCompletion) + return + } + if options.Fish { + printScript("key-bindings.fish", fishKeyBindings) + fmt.Println("fzf_key_bindings") + return + } + fzf.Run(options, version, revision) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/man/man1/fzf-tmux.1 new/fzf-0.48.0/man/man1/fzf-tmux.1 --- old/fzf-0.47.0/man/man1/fzf-tmux.1 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/man/man1/fzf-tmux.1 2024-03-13 16:02:53.000000000 +0100 @@ -21,7 +21,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. .. -.TH fzf-tmux 1 "Mar 2024" "fzf 0.47.0" "fzf-tmux - open fzf in tmux split pane" +.TH fzf-tmux 1 "Mar 2024" "fzf 0.48.0" "fzf-tmux - open fzf in tmux split pane" .SH NAME fzf-tmux - open fzf in tmux split pane diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/man/man1/fzf.1 new/fzf-0.48.0/man/man1/fzf.1 --- old/fzf-0.47.0/man/man1/fzf.1 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/man/man1/fzf.1 2024-03-13 16:02:53.000000000 +0100 @@ -21,7 +21,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. .. -.TH fzf 1 "Mar 2024" "fzf 0.47.0" "fzf - a command-line fuzzy finder" +.TH fzf 1 "Mar 2024" "fzf 0.48.0" "fzf - a command-line fuzzy finder" .SH NAME fzf - a command-line fuzzy finder @@ -33,6 +33,10 @@ fzf is a general-purpose command-line fuzzy finder. .SH OPTIONS +.SS Note +.TP +Most long options have the opposite version with \fB--no-\fR prefix. + .SS Search mode .TP .B "-x, --extended" @@ -620,7 +624,7 @@ script to render an image using either of the protocols inside the preview window. e.g. - \fBfzf --preview='fzf-preview.sh {}' + \fBfzf --preview='fzf-preview.sh {}'\fR .RE @@ -854,8 +858,49 @@ .B "--version" Display version information and exit +.SS Directory traversal +.TP +.B "--walker=[file][,dir][,follow][,hidden]" +Determines the behavior of the built-in directory walker that is used when +\fB$FZF_DEFAULT_COMMAND\fR is not set. The default value is \fBfile,follow,hidden\fR. + +* \fBfile\fR: Include files in the search result +.br +* \fBdir\fR: Include directories in the search result +.br +* \fBhidden\fR: Include and follow hidden directories +.br +* \fBfollow\fR: Follow symbolic links +.br + +.TP +.B "--walker-root=DIR" +The root directory from which to start the built-in directory walker. +The default value is the current working directory. + +.TP +.B "--walker-skip=DIRS" +Comma-separated list of directory names to skip during the directory walk. +The default value is \fB.git,node_modules\fR. + +.SS Shell integration +.TP +.B "--bash" +Print script to set up Bash shell integration + +e.g. \fBeval "$(fzf --bash)"\fR + .TP -Note that most options have the opposite versions with \fB--no-\fR prefix. +.B "--zsh" +Print script to set up Zsh shell integration + +e.g. \fBeval "$(fzf --zsh)"\fR + +.TP +.B "--fish" +Print script to set up Fish shell integration + +e.g. \fBfzf --fish | source\fR .SH ENVIRONMENT VARIABLES .TP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/shell/completion.bash new/fzf-0.48.0/shell/completion.bash --- old/fzf-0.47.0/shell/completion.bash 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/shell/completion.bash 2024-03-13 16:02:53.000000000 +0100 @@ -13,22 +13,19 @@ # To use custom commands instead of find, override _fzf_compgen_{path,dir} -if ! declare -F _fzf_compgen_path > /dev/null; then - _fzf_compgen_path() { - echo "$1" - command find -L "$1" \ - -name .git -prune -o -name .hg -prune -o -name .svn -prune -o \( -type d -o -type f -o -type l \) \ - -a -not -path "$1" -print 2> /dev/null | command sed 's@^\./@@' - } -fi - -if ! declare -F _fzf_compgen_dir > /dev/null; then - _fzf_compgen_dir() { - command find -L "$1" \ - -name .git -prune -o -name .hg -prune -o -name .svn -prune -o -type d \ - -a -not -path "$1" -print 2> /dev/null | command sed 's@^\./@@' - } -fi +# +# _fzf_compgen_path() { +# echo "$1" +# command find -L "$1" \ +# -name .git -prune -o -name .hg -prune -o -name .svn -prune -o \( -type d -o -type f -o -type l \) \ +# -a -not -path "$1" -print 2> /dev/null | command sed 's@^\./@@' +# } +# +# _fzf_compgen_dir() { +# command find -L "$1" \ +# -name .git -prune -o -name .hg -prune -o -name .svn -prune -o -type d \ +# -a -not -path "$1" -print 2> /dev/null | command sed 's@^\./@@' +# } ########################################################### @@ -336,9 +333,18 @@ leftover=${leftover/#\/} [[ -z "$dir" ]] && dir='.' [[ "$dir" != "/" ]] && dir="${dir/%\//}" - matches=$(eval "$1 $(printf %q "$dir")" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --scheme=path --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_COMPLETION_OPTS-} $2" __fzf_comprun "$4" -q "$leftover" | while read -r item; do - printf "%q " "${item%$3}$3" - done) + matches=$( + unset FZF_DEFAULT_COMMAND + export FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --scheme=path --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_COMPLETION_OPTS-} $2" + if declare -F "$1" > /dev/null; then + eval "$1 $(printf %q "$dir")" | __fzf_comprun "$4" -q "$leftover" + else + [[ $1 =~ dir ]] && walker=dir,follow || walker=file,dir,follow,hidden + __fzf_comprun "$4" -q "$leftover" --walker "$walker" --walker-root="$dir" + fi | while read -r item; do + printf "%q " "${item%$3}$3" + done + ) matches=${matches% } [[ -z "$3" ]] && [[ "${__fzf_nospace_commands-}" = *" ${COMP_WORDS[0]} "* ]] && matches="$matches " if [[ -n "$matches" ]]; then @@ -387,6 +393,7 @@ type -t "$post" > /dev/null 2>&1 || post='command cat' trigger=${FZF_COMPLETION_TRIGGER-'**'} + cmd="${COMP_WORDS[0]}" cur="${COMP_WORDS[COMP_CWORD]}" if [[ "$cur" == *"$trigger" ]] && [[ $cur != *'$('* ]] && [[ $cur != *':='* ]] && [[ $cur != *'`'* ]]; then cur=${cur:0:${#cur}-${#trigger}} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/shell/completion.zsh new/fzf-0.48.0/shell/completion.zsh --- old/fzf-0.47.0/shell/completion.zsh 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/shell/completion.zsh 2024-03-13 16:02:53.000000000 +0100 @@ -77,22 +77,19 @@ { # To use custom commands instead of find, override _fzf_compgen_{path,dir} -if ! declare -f _fzf_compgen_path > /dev/null; then - _fzf_compgen_path() { - echo "$1" - command find -L "$1" \ - -name .git -prune -o -name .hg -prune -o -name .svn -prune -o \( -type d -o -type f -o -type l \) \ - -a -not -path "$1" -print 2> /dev/null | sed 's@^\./@@' - } -fi - -if ! declare -f _fzf_compgen_dir > /dev/null; then - _fzf_compgen_dir() { - command find -L "$1" \ - -name .git -prune -o -name .hg -prune -o -name .svn -prune -o -type d \ - -a -not -path "$1" -print 2> /dev/null | sed 's@^\./@@' - } -fi +# +# _fzf_compgen_path() { +# echo "$1" +# command find -L "$1" \ +# -name .git -prune -o -name .hg -prune -o -name .svn -prune -o \( -type d -o -type f -o -type l \) \ +# -a -not -path "$1" -print 2> /dev/null | sed 's@^\./@@' +# } +# +# _fzf_compgen_dir() { +# command find -L "$1" \ +# -name .git -prune -o -name .hg -prune -o -name .svn -prune -o -type d \ +# -a -not -path "$1" -print 2> /dev/null | sed 's@^\./@@' +# } ########################################################### @@ -148,10 +145,19 @@ leftover=${leftover/#\/} [ -z "$dir" ] && dir='.' [ "$dir" != "/" ] && dir="${dir/%\//}" - matches=$(eval "$compgen $(printf %q "$dir")" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --scheme=path --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_COMPLETION_OPTS-}" __fzf_comprun "$cmd" ${(Q)${(Z+n+)fzf_opts}} -q "$leftover" | while read item; do - item="${item%$suffix}$suffix" - echo -n "${(q)item} " - done) + matches=$( + unset FZF_DEFAULT_COMMAND + export FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --scheme=path --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_COMPLETION_OPTS-}" + if declare -f "$compgen" > /dev/null; then + eval "$compgen $(printf %q "$dir")" | __fzf_comprun "$cmd" ${(Q)${(Z+n+)fzf_opts}} -q "$leftover" + else + [[ $compgen =~ dir ]] && walker=dir,follow || walker=file,dir,follow,hidden + __fzf_comprun "$cmd" ${(Q)${(Z+n+)fzf_opts}} -q "$leftover" --walker "$walker" --walker-root="$dir" < /dev/tty + fi | while read item; do + item="${item%$suffix}$suffix" + echo -n "${(q)item} " + done + ) matches=${matches% } if [ -n "$matches" ]; then LBUFFER="$lbuf$matches$tail" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/shell/key-bindings.bash new/fzf-0.48.0/shell/key-bindings.bash --- old/fzf-0.47.0/shell/key-bindings.bash 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/shell/key-bindings.bash 2024-03-13 16:02:53.000000000 +0100 @@ -17,14 +17,9 @@ # Key bindings # ------------ __fzf_select__() { - local cmd opts - cmd="${FZF_CTRL_T_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \ - -o -type f -print \ - -o -type d -print \ - -o -type l -print 2> /dev/null | command cut -b3-"}" - opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore --reverse --scheme=path ${FZF_DEFAULT_OPTS-} ${FZF_CTRL_T_OPTS-} -m" - eval "$cmd" | - FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) "$@" | + local opts + opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore --reverse --walker=file,dir,follow,hidden --scheme=path ${FZF_DEFAULT_OPTS-} ${FZF_CTRL_T_OPTS-} -m" + FZF_DEFAULT_COMMAND=${FZF_CTRL_T_COMMAND:-} FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) "$@" | while read -r item; do printf '%q ' "$item" # escape special chars done @@ -42,11 +37,11 @@ } __fzf_cd__() { - local cmd opts dir - cmd="${FZF_ALT_C_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \ - -o -type d -print 2> /dev/null | command cut -b3-"}" - opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore --reverse --scheme=path ${FZF_DEFAULT_OPTS-} ${FZF_ALT_C_OPTS-} +m" - dir=$(set +o pipefail; eval "$cmd" | FZF_DEFAULT_OPTS="$opts" $(__fzfcmd)) && printf 'builtin cd -- %q' "$dir" + local opts dir + opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore --reverse --walker=dir,follow,hidden --scheme=path ${FZF_DEFAULT_OPTS-} ${FZF_ALT_C_OPTS-} +m" + dir=$( + FZF_DEFAULT_COMMAND=${FZF_ALT_C_COMMAND:-} FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) + ) && printf 'builtin cd -- %q' "$dir" } if command -v perl > /dev/null; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/shell/key-bindings.fish new/fzf-0.48.0/shell/key-bindings.fish --- old/fzf-0.47.0/shell/key-bindings.fish 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/shell/key-bindings.fish 2024-03-13 16:02:53.000000000 +0100 @@ -25,18 +25,11 @@ set -l fzf_query $commandline[2] set -l prefix $commandline[3] - # "-path \$dir'*/.*'" matches hidden files/folders inside $dir but not - # $dir itself, even if hidden. - test -n "$FZF_CTRL_T_COMMAND"; or set -l FZF_CTRL_T_COMMAND " - command find -L \$dir -mindepth 1 \\( -path \$dir'*/.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' \\) -prune \ - -o -type f -print \ - -o -type d -print \ - -o -type l -print 2> /dev/null | sed 's@^\./@@'" - test -n "$FZF_TMUX_HEIGHT"; or set FZF_TMUX_HEIGHT 40% begin - set -lx FZF_DEFAULT_OPTS "--height $FZF_TMUX_HEIGHT --reverse --scheme=path --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS" - eval "$FZF_CTRL_T_COMMAND | "(__fzfcmd)' -m --query "'$fzf_query'"' | while read -l r; set result $result $r; end + set -lx FZF_DEFAULT_OPTS "--height $FZF_TMUX_HEIGHT --reverse --walker=file,dir,follow,hidden --scheme=path --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS" + set -lx FZF_DEFAULT_COMMAND "$FZF_CTRL_T_COMMAND" + eval (__fzfcmd)' -m --query "'$fzf_query'"' | while read -l r; set result $result $r; end end if [ -z "$result" ] commandline -f repaint @@ -81,13 +74,11 @@ set -l fzf_query $commandline[2] set -l prefix $commandline[3] - test -n "$FZF_ALT_C_COMMAND"; or set -l FZF_ALT_C_COMMAND " - command find -L \$dir -mindepth 1 \\( -path \$dir'*/.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' \\) -prune \ - -o -type d -print 2> /dev/null | sed 's@^\./@@'" test -n "$FZF_TMUX_HEIGHT"; or set FZF_TMUX_HEIGHT 40% begin - set -lx FZF_DEFAULT_OPTS "--height $FZF_TMUX_HEIGHT --reverse --scheme=path --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_ALT_C_OPTS" - eval "$FZF_ALT_C_COMMAND | "(__fzfcmd)' +m --query "'$fzf_query'"' | read -l result + set -lx FZF_DEFAULT_OPTS "--height $FZF_TMUX_HEIGHT --reverse --walker=dir,follow,hidden --scheme=path --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_ALT_C_OPTS" + set -lx FZF_DEFAULT_COMMAND "$FZF_ALT_C_COMMAND" + eval (__fzfcmd)' +m --query "'$fzf_query'"' | read -l result if [ -n "$result" ] cd -- $result diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/shell/key-bindings.zsh new/fzf-0.48.0/shell/key-bindings.zsh --- old/fzf-0.47.0/shell/key-bindings.zsh 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/shell/key-bindings.zsh 2024-03-13 16:02:53.000000000 +0100 @@ -41,13 +41,9 @@ # CTRL-T - Paste the selected file path(s) into the command line __fsel() { - local cmd="${FZF_CTRL_T_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \ - -o -type f -print \ - -o -type d -print \ - -o -type l -print 2> /dev/null | cut -b3-"}" setopt localoptions pipefail no_aliases 2> /dev/null local item - eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --scheme=path --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_CTRL_T_OPTS-}" $(__fzfcmd) -m "$@" | while read item; do + FZF_DEFAULT_COMMAND=${FZF_CTRL_T_COMMAND:-} FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --walker=file,dir,follow,hidden --scheme=path --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_CTRL_T_OPTS-}" $(__fzfcmd) -m "$@" < /dev/tty | while read item; do echo -n "${(q)item} " done local ret=$? @@ -73,10 +69,8 @@ # ALT-C - cd into the selected directory fzf-cd-widget() { - local cmd="${FZF_ALT_C_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \ - -o -type d -print 2> /dev/null | cut -b3-"}" setopt localoptions pipefail no_aliases 2> /dev/null - local dir="$(eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --scheme=path --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_ALT_C_OPTS-}" $(__fzfcmd) +m)" + local dir="$(FZF_DEFAULT_COMMAND=${FZF_ALT_C_COMMAND:-} FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --walker=dir,follow,hidden --scheme=path --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_ALT_C_OPTS-}" $(__fzfcmd) +m < /dev/tty)" if [[ -z "$dir" ]]; then zle redisplay return 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/src/core.go new/fzf-0.48.0/src/core.go --- old/fzf-0.47.0/src/core.go 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/src/core.go 2024-03-13 16:02:53.000000000 +0100 @@ -117,7 +117,7 @@ reader = NewReader(func(data []byte) bool { return chunkList.Push(data) }, eventBox, opts.ReadZero, opts.Filter == nil) - go reader.ReadSource() + go reader.ReadSource(opts.WalkerRoot, opts.WalkerOpts, opts.WalkerSkip) } // Matcher @@ -165,7 +165,7 @@ } return false }, eventBox, opts.ReadZero, false) - reader.ReadSource() + reader.ReadSource(opts.WalkerRoot, opts.WalkerOpts, opts.WalkerSkip) } else { eventBox.Unwatch(EvtReadNew) eventBox.WaitFor(EvtReadFin) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/src/options.go new/fzf-0.48.0/src/options.go --- old/fzf-0.47.0/src/options.go 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/src/options.go 2024-03-13 16:02:53.000000000 +0100 @@ -124,6 +124,17 @@ (To allow remote process execution, use --listen-unsafe) --version Display version information and exit + Directory traversal (Only used when $FZF_DEFAULT_COMMAND is not set) + --walker=OPTS [file][,dir][,follow][,hidden] (default: file,follow,hidden) + --walker-root=DIR Root directory from which to start walker (default: .) + --walker-skip=DIRS Comma-separated list of directory names to skip + (default: .git,node_modules) + + Shell integration + --bash Print script to set up Bash shell integration + --zsh Print script to set up Zsh shell integration + --fish Print script to set up Fish shell integration + Environment variables FZF_DEFAULT_COMMAND Default command to use when input is tty FZF_DEFAULT_OPTS Default options (e.g. '--layout=reverse --info=inline') @@ -274,8 +285,18 @@ return strings.SplitN(s, "\n", 2)[0] } +type walkerOpts struct { + file bool + dir bool + hidden bool + follow bool +} + // Options stores the values of command-line options type Options struct { + Bash bool + Zsh bool + Fish bool Fuzzy bool FuzzyAlgo algo.Algo Scheme string @@ -342,15 +363,31 @@ ListenAddr *listenAddress Unsafe bool ClearOnExit bool + WalkerOpts walkerOpts + WalkerRoot string + WalkerSkip []string Version bool } +func filterNonEmpty(input []string) []string { + output := make([]string, 0, len(input)) + for _, str := range input { + if len(str) > 0 { + output = append(output, str) + } + } + return output +} + func defaultPreviewOpts(command string) previewOpts { return previewOpts{command, posRight, sizeSpec{50, true}, "", false, false, false, false, tui.DefaultBorderShape, 0, 0, nil} } func defaultOptions() *Options { return &Options{ + Bash: false, + Zsh: false, + Fish: false, Fuzzy: true, FuzzyAlgo: algo.FuzzyMatchV2, Scheme: "default", @@ -413,6 +450,9 @@ PreviewLabel: labelOpts{}, Unsafe: false, ClearOnExit: true, + WalkerOpts: walkerOpts{file: true, hidden: true, follow: true}, + WalkerRoot: ".", + WalkerSkip: []string{".git", "node_modules"}, Version: false} } @@ -966,6 +1006,30 @@ return theme } +func parseWalkerOpts(str string) walkerOpts { + opts := walkerOpts{} + for _, str := range strings.Split(strings.ToLower(str), ",") { + switch str { + case "file": + opts.file = true + case "dir": + opts.dir = true + case "hidden": + opts.hidden = true + case "follow": + opts.follow = true + case "": + // Ignored + default: + errorExit("invalid walker option: " + str) + } + } + if !opts.file && !opts.dir { + errorExit("at least one of 'file' or 'dir' should be specified") + } + return opts +} + var ( executeRegexp *regexp.Regexp splitRegexp *regexp.Regexp @@ -1602,6 +1666,21 @@ for i := 0; i < len(allArgs); i++ { arg := allArgs[i] switch arg { + case "--bash": + opts.Bash = true + if opts.Zsh || opts.Fish { + errorExit("cannot specify --bash with --zsh or --fish") + } + case "--zsh": + opts.Zsh = true + if opts.Bash || opts.Fish { + errorExit("cannot specify --zsh with --bash or --fish") + } + case "--fish": + opts.Fish = true + if opts.Bash || opts.Zsh { + errorExit("cannot specify --fish with --bash or --zsh") + } case "-h", "--help": help(exitOk) case "-x", "--extended": @@ -1880,6 +1959,12 @@ opts.ClearOnExit = true case "--no-clear": opts.ClearOnExit = false + case "--walker": + opts.WalkerOpts = parseWalkerOpts(nextString(allArgs, &i, "walker options required [file][,dir][,follow][,hidden]")) + case "--walker-root": + opts.WalkerRoot = nextString(allArgs, &i, "directory required") + case "--walker-skip": + opts.WalkerSkip = filterNonEmpty(strings.Split(nextString(allArgs, &i, "directory names to ignore required"), ",")) case "--version": opts.Version = true case "--": @@ -1977,6 +2062,12 @@ } opts.ListenAddr = &addr opts.Unsafe = true + } else if match, value := optString(arg, "--walker="); match { + opts.WalkerOpts = parseWalkerOpts(value) + } else if match, value := optString(arg, "--walker-root="); match { + opts.WalkerRoot = value + } else if match, value := optString(arg, "--walker-skip="); match { + opts.WalkerSkip = filterNonEmpty(strings.Split(value, ",")) } else if match, value := optString(arg, "--hscroll-off="); match { opts.HscrollOff = atoi(value) } else if match, value := optString(arg, "--scroll-off="); match { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/src/reader.go new/fzf-0.48.0/src/reader.go --- old/fzf-0.47.0/src/reader.go 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/src/reader.go 2024-03-13 16:02:53.000000000 +0100 @@ -93,13 +93,13 @@ } // ReadSource reads data from the default command or from standard input -func (r *Reader) ReadSource() { +func (r *Reader) ReadSource(root string, opts walkerOpts, ignores []string) { r.startEventPoller() var success bool if util.IsTty() { cmd := os.Getenv("FZF_DEFAULT_COMMAND") if len(cmd) == 0 { - success = r.readFiles() + success = r.readFiles(root, opts, ignores) } else { // We can't export FZF_* environment variables to the default command success = r.readFromCommand(cmd, nil) @@ -145,9 +145,9 @@ return true } -func (r *Reader) readFiles() bool { +func (r *Reader) readFiles(root string, opts walkerOpts, ignores []string) bool { r.killed = false - conf := fastwalk.Config{Follow: true} + conf := fastwalk.Config{Follow: opts.follow} fn := func(path string, de os.DirEntry, err error) error { if err != nil { return nil @@ -155,10 +155,18 @@ path = filepath.Clean(path) if path != "." { isDir := de.IsDir() - if isDir && filepath.Base(path)[0] == '.' { - return filepath.SkipDir + if isDir { + base := filepath.Base(path) + if !opts.hidden && base[0] == '.' { + return filepath.SkipDir + } + for _, ignore := range ignores { + if ignore == base { + return filepath.SkipDir + } + } } - if !isDir && r.pusher([]byte(path)) { + if ((opts.file && !isDir) || (opts.dir && isDir)) && r.pusher([]byte(path)) { atomic.StoreInt32(&r.event, int32(EvtReadNew)) } } @@ -169,7 +177,7 @@ } return nil } - return fastwalk.Walk(&conf, ".", fn) == nil + return fastwalk.Walk(&conf, root, fn) == nil } func (r *Reader) readFromCommand(command string, environ []string) bool { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.47.0/uninstall new/fzf-0.48.0/uninstall --- old/fzf-0.47.0/uninstall 2024-03-10 13:43:41.000000000 +0100 +++ new/fzf-0.48.0/uninstall 2024-03-13 16:02:53.000000000 +0100 @@ -94,6 +94,7 @@ bind_file="${fish_dir}/functions/fish_user_key_bindings.fish" if [ -f "$bind_file" ]; then remove_line "$bind_file" "fzf_key_bindings" + remove_line "$bind_file" "fzf --fish | source" fi if [ -d "${fish_dir}/functions" ]; then ++++++ vendor.tar.zst ++++++ Binary files /var/tmp/diff_new_pack.w49UjD/_old and /var/tmp/diff_new_pack.w49UjD/_new differ