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-11 15:34:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fzf (Old)
 and      /work/SRC/openSUSE:Factory/.fzf.new.1770 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fzf"

Mon Mar 11 15:34:03 2024 rev:43 rq:1156762 version:0.47.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/fzf/fzf.changes  2024-02-01 18:07:47.268321992 
+0100
+++ /work/SRC/openSUSE:Factory/.fzf.new.1770/fzf.changes        2024-03-11 
15:41:42.919616317 +0100
@@ -1,0 +2,11 @@
+Sun Mar 10 19:38:03 UTC 2024 - Joshua Smith <jsmith...@gmail.com>
+
+- Update to version 0.47.0:
+  * Replaced default find command with built-in directory walker
+    to simplify the code and to achieve better performance. This
+    doesn't affect you if you have $FZF_DEFAULT_COMMAND set.
+  * Added $FZF_DEFAULT_OPTS_FILE to allow managing default options
+    in a file
+  * Bug fixes and improvements.
+
+-------------------------------------------------------------------

Old:
----
  fzf-0.46.1.tar.gz

New:
----
  fzf-0.47.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ fzf.spec ++++++
--- /var/tmp/diff_new_pack.NyLJnd/_old  2024-03-11 15:41:43.395633863 +0100
+++ /var/tmp/diff_new_pack.NyLJnd/_new  2024-03-11 15:41:43.395633863 +0100
@@ -18,7 +18,7 @@
 
 %global _lto_cflags %{nil}
 Name:           fzf
-Version:        0.46.1
+Version:        0.47.0
 Release:        0
 Summary:        A command-line fuzzy finder
 License:        MIT

++++++ fzf-0.46.1.tar.gz -> fzf-0.47.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/.github/workflows/codeql-analysis.yml 
new/fzf-0.47.0/.github/workflows/codeql-analysis.yml
--- old/fzf-0.46.1/.github/workflows/codeql-analysis.yml        2024-02-01 
10:13:00.000000000 +0100
+++ new/fzf-0.47.0/.github/workflows/codeql-analysis.yml        2024-03-10 
13:43:41.000000000 +0100
@@ -27,7 +27,7 @@
 
     steps:
     - name: Checkout repository
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
       with:
         fetch-depth: 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/.github/workflows/depsreview.yaml 
new/fzf-0.47.0/.github/workflows/depsreview.yaml
--- old/fzf-0.46.1/.github/workflows/depsreview.yaml    2024-02-01 
10:13:00.000000000 +0100
+++ new/fzf-0.47.0/.github/workflows/depsreview.yaml    2024-03-10 
13:43:41.000000000 +0100
@@ -9,6 +9,6 @@
     runs-on: ubuntu-latest
     steps:
       - name: 'Checkout Repository'
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
       - name: 'Dependency Review'
         uses: actions/dependency-review-action@v4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/.github/workflows/linux.yml 
new/fzf-0.47.0/.github/workflows/linux.yml
--- old/fzf-0.46.1/.github/workflows/linux.yml  2024-02-01 10:13:00.000000000 
+0100
+++ new/fzf-0.47.0/.github/workflows/linux.yml  2024-03-10 13:43:41.000000000 
+0100
@@ -18,7 +18,7 @@
   build:
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@v3
+    - uses: actions/checkout@v4
       with:
         fetch-depth: 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/.github/workflows/macos.yml 
new/fzf-0.47.0/.github/workflows/macos.yml
--- old/fzf-0.46.1/.github/workflows/macos.yml  2024-02-01 10:13:00.000000000 
+0100
+++ new/fzf-0.47.0/.github/workflows/macos.yml  2024-03-10 13:43:41.000000000 
+0100
@@ -15,7 +15,7 @@
   build:
     runs-on: macos-latest
     steps:
-    - uses: actions/checkout@v3
+    - uses: actions/checkout@v4
       with:
         fetch-depth: 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/.github/workflows/sponsors.yml 
new/fzf-0.47.0/.github/workflows/sponsors.yml
--- old/fzf-0.46.1/.github/workflows/sponsors.yml       2024-02-01 
10:13:00.000000000 +0100
+++ new/fzf-0.47.0/.github/workflows/sponsors.yml       2024-03-10 
13:43:41.000000000 +0100
@@ -9,7 +9,7 @@
     runs-on: ubuntu-latest
     steps:
       - name: Checkout 🛎️
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
 
       - name: Generate Sponsors 💖
         uses: JamesIves/github-sponsors-readme-action@v1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/.github/workflows/typos.yml 
new/fzf-0.47.0/.github/workflows/typos.yml
--- old/fzf-0.46.1/.github/workflows/typos.yml  2024-02-01 10:13:00.000000000 
+0100
+++ new/fzf-0.47.0/.github/workflows/typos.yml  2024-03-10 13:43:41.000000000 
+0100
@@ -6,5 +6,5 @@
     name: Spell Check with Typos
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@v3
-    - uses: crate-ci/typos@v1.17.2
+    - uses: actions/checkout@v4
+    - uses: crate-ci/typos@v1.19.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/ADVANCED.md new/fzf-0.47.0/ADVANCED.md
--- old/fzf-0.46.1/ADVANCED.md  2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/ADVANCED.md  2024-03-10 13:43:41.000000000 +0100
@@ -552,7 +552,7 @@
     - Press enter key on a pod to `kubectl exec` into it
     - Press CTRL-O to open the log in your editor
 - Press CTRL-R to reload the pod list
-- Press CTRL-/ repeatedly to to rotate through a different sets of preview
+- Press CTRL-/ repeatedly to rotate through a different sets of preview
   window options
     1. `80%,border-bottom`
     1. `hidden`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/BUILD.md new/fzf-0.47.0/BUILD.md
--- old/fzf-0.46.1/BUILD.md     2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/BUILD.md     2024-03-10 13:43:41.000000000 +0100
@@ -42,6 +42,8 @@
     - Licensed under [MIT](http://mattn.mit-license.org)
 - [tcell](https://github.com/gdamore/tcell)
     - Licensed under [Apache License 
2.0](https://github.com/gdamore/tcell/blob/master/LICENSE)
+- [fastwalk](https://github.com/charlievieth/fastwalk)
+    - Licensed under 
[MIT](https://raw.githubusercontent.com/charlievieth/fastwalk/master/LICENSE)
 
 License
 -------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/CHANGELOG.md new/fzf-0.47.0/CHANGELOG.md
--- old/fzf-0.46.1/CHANGELOG.md 2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/CHANGELOG.md 2024-03-10 13:43:41.000000000 +0100
@@ -1,6 +1,29 @@
 CHANGELOG
 =========
 
+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.
+  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.
+- 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
+        1. Options read from `$FZF_DEFAULT_OPTS_FILE`
+        1. Options from `$FZF_DEFAULT_OPTS`
+        1. Options from command-line arguments
+- Bug fixes and improvements
+
+[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
+
 0.46.1
 ------
 - Bug fixes and improvements
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/README-VIM.md new/fzf-0.47.0/README-VIM.md
--- old/fzf-0.46.1/README-VIM.md        2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/README-VIM.md        2024-03-10 13:43:41.000000000 +0100
@@ -238,19 +238,20 @@
 ```
 
 We haven't specified the `source`, so this is equivalent to starting fzf on
-command line without standard input pipe; fzf will use find command (or
-`$FZF_DEFAULT_COMMAND` if defined) to list the files under the current
-directory. When you select one, it will open it with the sink, `:e` command.
-If you want to open it in a new tab, you can pass `:tabedit` command instead
-as the sink.
+command line without standard input pipe; fzf will traverse the file system
+under the current directory to get the list of files. (If
+`$FZF_DEFAULT_COMMAND` is set, fzf will use the output of the command
+instead.) When you select one, it will open it with the sink, `:e` command. If
+you want to open it in a new tab, you can pass `:tabedit` command instead as
+the sink.
 
 ```vim
 call fzf#run({'sink': 'tabedit'})
 ```
 
-Instead of using the default find command, you can use any shell command as
-the source. The following example will list the files managed by git. It's
-equivalent to running `git ls-files | fzf` on shell.
+You can use any shell command as the source to generate the list. The
+following example will list the files managed by git. It's equivalent to
+running `git ls-files | fzf` on shell.
 
 ```vim
 call fzf#run({'source': 'git ls-files', 'sink': 'e'})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/README.md new/fzf-0.47.0/README.md
--- old/fzf-0.46.1/README.md    2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/README.md    2024-03-10 13:43:41.000000000 +0100
@@ -1,3 +1,21 @@
+<div align="center">
+<sup>Special thanks to:</sup>
+<br>
+<br>
+<a 
href="https://warp.dev/?utm_source=github&utm_medium=referral&utm_campaign=fzf_20240209";>
+  <div>
+    <img src="https://raw.githubusercontent.com/junegunn/i/master/warp.png"; 
width="300" alt="Warp">
+  </div>
+  <b>Warp is a modern, Rust-based terminal with AI built in so you and your 
team can build great software, faster.</b>
+  <div>
+    <sup>Visit warp.dev to learn more.</sup>
+  </div>
+</a>
+<br>
+<hr>
+</div>
+<br>
+
 <img src="https://raw.githubusercontent.com/junegunn/i/master/fzf.png"; 
height="170" alt="fzf - a command-line fuzzy finder"> 
[![github-actions](https://github.com/junegunn/fzf/workflows/Test%20fzf%20on%20Linux/badge.svg)](https://github.com/junegunn/fzf/actions)
 ===
 
@@ -26,7 +44,7 @@
 
 If you'd like to sponsor this project, please visit 
https://github.com/sponsors/junegunn.
 
-<!-- sponsors --><a href="https://github.com/miyanokomiya";><img 
src="https://github.com/miyanokomiya.png"; width="60px" alt="miyanokomiya" 
/></a><a href="https://github.com/jonhoo";><img 
src="https://github.com/jonhoo.png"; width="60px" alt="Jon Gjengset" /></a><a 
href="https://github.com/AceofSpades5757";><img 
src="https://github.com/AceofSpades5757.png"; width="60px" alt="Kyle L. Davis" 
/></a><a href="https://github.com/Frederick888";><img 
src="https://github.com/Frederick888.png"; width="60px" alt="Frederick Zhang" 
/></a><a href="https://github.com/moritzdietz";><img 
src="https://github.com/moritzdietz.png"; width="60px" alt="Moritz Dietz" 
/></a><a href="https://github.com/mikker";><img 
src="https://github.com/mikker.png"; width="60px" alt="Mikkel Malmberg" /></a><a 
href="https://github.com/pldubouilh";><img 
src="https://github.com/pldubouilh.png"; width="60px" alt="Pierre Dubouilh" 
/></a><a href="https://github.com/rcorre";><img 
src="https://github.com/rcorre.png"; width="60px" alt="Ryan Roden
 -Corrent" /></a><a href="https://github.com/blissdev";><img 
src="https://github.com/blissdev.png"; width="60px" alt="Jordan Arentsen" 
/></a><a href="https://github.com/mislav";><img 
src="https://github.com/mislav.png"; width="60px" alt="Mislav Marohnić" 
/></a><a href="https://github.com/aexvir";><img 
src="https://github.com/aexvir.png"; width="60px" alt="Alex Viscreanu" /></a><a 
href="https://github.com/dbalatero";><img src="https://github.com/dbalatero.png"; 
width="60px" alt="David Balatero" /></a><a 
href="https://github.com/comatory";><img src="https://github.com/comatory.png"; 
width="60px" alt="Ondrej Synacek" /></a><a 
href="https://github.com/moobar";><img src="https://github.com/moobar.png"; 
width="60px" alt="" /></a><a href="https://github.com/majjoha";><img 
src="https://github.com/majjoha.png"; width="60px" alt="Mathias Jean Johansen" 
/></a><a href="https://github.com/benelan";><img 
src="https://github.com/benelan.png"; width="60px" alt="Ben Elan" /></a><a 
href="https://github.com/pawelduda
 "><img src="https://github.com/pawelduda.png"; width="60px" alt="Paweł Duda" 
/></a><a href="https://github.com/slezica";><img 
src="https://github.com/slezica.png"; width="60px" alt="Santiago Lezica" 
/></a><a href="https://github.com/pbwn";><img src="https://github.com/pbwn.png"; 
width="60px" alt="" /></a><a href="https://github.com/timgluz";><img 
src="https://github.com/timgluz.png"; width="60px" alt="Timo Sulg" /></a><a 
href="https://github.com/pyrho";><img src="https://github.com/pyrho.png"; 
width="60px" alt="Damien Rajon" /></a><a href="https://github.com/ArtBIT";><img 
src="https://github.com/ArtBIT.png"; width="60px" alt="ArtBIT" /></a><a 
href="https://github.com/da-moon";><img src="https://github.com/da-moon.png"; 
width="60px" alt="" /></a><a href="https://github.com/hovissimo";><img 
src="https://github.com/hovissimo.png"; width="60px" alt="Hovis" /></a><a 
href="https://github.com/dariusjonda";><img 
src="https://github.com/dariusjonda.png"; width="60px" alt="Darius Jonda" 
/></a><a href="https:
 //github.com/mortymacs"><img src="https://github.com/mortymacs.png"; 
width="60px" alt="Morteza NourelahiAlamdari" /></a><a 
href="https://github.com/cristiand391";><img 
src="https://github.com/cristiand391.png"; width="60px" alt="Cristian Dominguez" 
/></a><a href="https://github.com/eliangcs";><img 
src="https://github.com/eliangcs.png"; width="60px" alt="Chang-Hung Liang" 
/></a><a href="https://github.com/asphaltbuffet";><img 
src="https://github.com/asphaltbuffet.png"; width="60px" alt="Ben Lechlitner" 
/></a><a href="https://github.com/yash1th";><img 
src="https://github.com/yash1th.png"; width="60px" alt="yash" /></a><a 
href="https://github.com/looshch";><img src="https://github.com/looshch.png"; 
width="60px" alt="george looshch" /></a><a href="https://github.com/kg8m";><img 
src="https://github.com/kg8m.png"; width="60px" alt="Takumi KAGIYAMA" /></a><a 
href="https://github.com/polm";><img src="https://github.com/polm.png"; 
width="60px" alt="Paul O'Leary McCann" /></a><a href="https://github.com/rbe
 eger"><img src="https://github.com/rbeeger.png"; width="60px" alt="Robert 
Beeger" /></a><a href="https://github.com/veebch";><img 
src="https://github.com/veebch.png"; width="60px" alt="VEEB Projects" /></a><a 
href="https://github.com/khuedoan";><img src="https://github.com/khuedoan.png"; 
width="60px" alt="Khue Doan" /></a><a href="https://github.com/yowayb";><img 
src="https://github.com/yowayb.png"; width="60px" alt="Yoway Buorn" /></a><a 
href="https://github.com/scalisi";><img src="https://github.com/scalisi.png"; 
width="60px" alt="Josh Scalisi" /></a><a href="https://github.com/alecbcs";><img 
src="https://github.com/alecbcs.png"; width="60px" alt="Alec Scott" /></a><a 
href="https://github.com/the-shank";><img src="https://github.com/the-shank.png"; 
width="60px" alt="theshank" /></a><a href="https://github.com/thnxdev";><img 
src="https://github.com/thnxdev.png"; width="60px" alt="thanks.dev" /></a><a 
href="https://github.com/artursapek";><img 
src="https://github.com/artursapek.png"; width="60px" al
 t="Artur Sapek" /></a><a href="https://github.com/ramnes";><img 
src="https://github.com/ramnes.png"; width="60px" alt="Guillaume Gelin" /></a><a 
href="https://github.com/mikkifr";><img src="https://github.com/mikkifr.png"; 
width="60px" alt="Mikki Freeman" /></a><a 
href="https://github.com/aldosch";><img src="https://github.com/aldosch.png"; 
width="60px" alt="Aldo Schumann" /></a><a href="https://github.com/jyc";><img 
src="https://github.com/jyc.png"; width="60px" alt="" /></a><a 
href="https://github.com/Bombycinous";><img 
src="https://github.com/Bombycinous.png"; width="60px" alt="" /></a><a 
href="https://github.com/mrcnski";><img src="https://github.com/mrcnski.png"; 
width="60px" alt="Marcin S." /></a><a href="https://github.com/roblevy";><img 
src="https://github.com/roblevy.png"; width="60px" alt="Rob Levy" /></a><!-- 
sponsors -->
+<!-- sponsors --><a href="https://github.com/miyanokomiya";><img 
src="https://github.com/miyanokomiya.png"; width="60px" alt="miyanokomiya" 
/></a><a href="https://github.com/jonhoo";><img 
src="https://github.com/jonhoo.png"; width="60px" alt="Jon Gjengset" /></a><a 
href="https://github.com/AceofSpades5757";><img 
src="https://github.com/AceofSpades5757.png"; width="60px" alt="Kyle L. Davis" 
/></a><a href="https://github.com/Frederick888";><img 
src="https://github.com/Frederick888.png"; width="60px" alt="Frederick Zhang" 
/></a><a href="https://github.com/moritzdietz";><img 
src="https://github.com/moritzdietz.png"; width="60px" alt="Moritz Dietz" 
/></a><a href="https://github.com/mikker";><img 
src="https://github.com/mikker.png"; width="60px" alt="Mikkel Malmberg" /></a><a 
href="https://github.com/pldubouilh";><img 
src="https://github.com/pldubouilh.png"; width="60px" alt="Pierre Dubouilh" 
/></a><a href="https://github.com/rcorre";><img 
src="https://github.com/rcorre.png"; width="60px" alt="Ryan Roden
 -Corrent" /></a><a href="https://github.com/blissdev";><img 
src="https://github.com/blissdev.png"; width="60px" alt="Jordan Arentsen" 
/></a><a href="https://github.com/mislav";><img 
src="https://github.com/mislav.png"; width="60px" alt="Mislav Marohnić" 
/></a><a href="https://github.com/aexvir";><img 
src="https://github.com/aexvir.png"; width="60px" alt="Alex Viscreanu" /></a><a 
href="https://github.com/dbalatero";><img src="https://github.com/dbalatero.png"; 
width="60px" alt="David Balatero" /></a><a 
href="https://github.com/comatory";><img src="https://github.com/comatory.png"; 
width="60px" alt="Ondrej Synacek" /></a><a 
href="https://github.com/moobar";><img src="https://github.com/moobar.png"; 
width="60px" alt="" /></a><a href="https://github.com/majjoha";><img 
src="https://github.com/majjoha.png"; width="60px" alt="Mathias Jean Johansen" 
/></a><a href="https://github.com/benelan";><img 
src="https://github.com/benelan.png"; width="60px" alt="Ben Elan" /></a><a 
href="https://github.com/pawelduda
 "><img src="https://github.com/pawelduda.png"; width="60px" alt="Paweł Duda" 
/></a><a href="https://github.com/slezica";><img 
src="https://github.com/slezica.png"; width="60px" alt="Santiago Lezica" 
/></a><a href="https://github.com/pbwn";><img src="https://github.com/pbwn.png"; 
width="60px" alt="" /></a><a href="https://github.com/timgluz";><img 
src="https://github.com/timgluz.png"; width="60px" alt="Timo Sulg" /></a><a 
href="https://github.com/pyrho";><img src="https://github.com/pyrho.png"; 
width="60px" alt="Damien Rajon" /></a><a href="https://github.com/ArtBIT";><img 
src="https://github.com/ArtBIT.png"; width="60px" alt="ArtBIT" /></a><a 
href="https://github.com/da-moon";><img src="https://github.com/da-moon.png"; 
width="60px" alt="" /></a><a href="https://github.com/hovissimo";><img 
src="https://github.com/hovissimo.png"; width="60px" alt="Hovis" /></a><a 
href="https://github.com/dariusjonda";><img 
src="https://github.com/dariusjonda.png"; width="60px" alt="Darius Jonda" 
/></a><a href="https:
 //github.com/cristiand391"><img src="https://github.com/cristiand391.png"; 
width="60px" alt="Cristian Dominguez" /></a><a 
href="https://github.com/eliangcs";><img src="https://github.com/eliangcs.png"; 
width="60px" alt="Chang-Hung Liang" /></a><a 
href="https://github.com/asphaltbuffet";><img 
src="https://github.com/asphaltbuffet.png"; width="60px" alt="Ben Lechlitner" 
/></a><a href="https://github.com/yash1th";><img 
src="https://github.com/yash1th.png"; width="60px" alt="yash" /></a><a 
href="https://github.com/looshch";><img src="https://github.com/looshch.png"; 
width="60px" alt="george looshch" /></a><a href="https://github.com/kg8m";><img 
src="https://github.com/kg8m.png"; width="60px" alt="Takumi KAGIYAMA" /></a><a 
href="https://github.com/polm";><img src="https://github.com/polm.png"; 
width="60px" alt="Paul O'Leary McCann" /></a><a 
href="https://github.com/rbeeger";><img src="https://github.com/rbeeger.png"; 
width="60px" alt="Robert Beeger" /></a><a href="https://github.com/veebch";><img 
src="h
 ttps://github.com/veebch.png" width="60px" alt="VEEB Projects" /></a><a 
href="https://github.com/khuedoan";><img src="https://github.com/khuedoan.png"; 
width="60px" alt="Khue Doan" /></a><a href="https://github.com/yowayb";><img 
src="https://github.com/yowayb.png"; width="60px" alt="Yoway Buorn" /></a><a 
href="https://github.com/scalisi";><img src="https://github.com/scalisi.png"; 
width="60px" alt="Josh Scalisi" /></a><a href="https://github.com/alecbcs";><img 
src="https://github.com/alecbcs.png"; width="60px" alt="Alec Scott" /></a><a 
href="https://github.com/thnxdev";><img src="https://github.com/thnxdev.png"; 
width="60px" alt="thanks.dev" /></a><a 
href="https://github.com/artursapek";><img 
src="https://github.com/artursapek.png"; width="60px" alt="Artur Sapek" /></a><a 
href="https://github.com/ramnes";><img src="https://github.com/ramnes.png"; 
width="60px" alt="Guillaume Gelin" /></a><a href="https://github.com/jyc";><img 
src="https://github.com/jyc.png"; width="60px" alt="" /></a><a href="https
 ://github.com/mrcnski"><img src="https://github.com/mrcnski.png"; width="60px" 
alt="Marcin S." /></a><a href="https://github.com/roblevy";><img 
src="https://github.com/roblevy.png"; width="60px" alt="Rob Levy" /></a><a 
href="https://github.com/michael-dwan";><img 
src="https://github.com/michael-dwan.png"; width="60px" alt="Michael Dwan" 
/></a><a href="https://github.com/glozow";><img 
src="https://github.com/glozow.png"; width="60px" alt="Gloria Zhao" /></a><a 
href="https://github.com/pooriajr";><img src="https://github.com/pooriajr.png"; 
width="60px" alt="Pooria" /></a><a href="https://github.com/wjt";><img 
src="https://github.com/wjt.png"; width="60px" alt="Will Thompson" /></a><a 
href="https://github.com/faruzzy";><img src="https://github.com/faruzzy.png"; 
width="60px" alt="Roland" /></a><!-- sponsors -->
 
 Table of Contents
 -----------------
@@ -150,17 +168,19 @@
 ### Windows
 
 Pre-built binaries for Windows can be downloaded [here][bin]. fzf is also
-available via [Chocolatey][choco], [Scoop][scoop], and [Winget][winget]:
+available via [Chocolatey][choco], [Scoop][scoop], [Winget][winget], and 
[MSYS2][msys2]:
 
-| Package manager | Command              |
-| --------------- | -------------------- |
-| Chocolatey      | `choco install fzf`  |
-| Scoop           | `scoop install fzf`  |
-| Winget          | `winget install fzf` |
+| Package manager | Command                               |
+| --------------- | ------------------------------------- |
+| Chocolatey      | `choco install fzf`                   |
+| Scoop           | `scoop install fzf`                   |
+| Winget          | `winget install fzf`                  |
+| MSYS2 (pacman)  | `pacman -S $MINGW_PACKAGE_PREFIX-fzf` |
 
 [choco]: https://chocolatey.org/packages/fzf
 [scoop]: https://github.com/ScoopInstaller/Main/blob/master/bucket/fzf.json
 [winget]: 
https://github.com/microsoft/winget-pkgs/tree/master/manifests/j/junegunn/fzf
+[msys2]: https://packages.msys2.org/base/mingw-w64-fzf
 
 Known issues and limitations on Windows can be found on [the wiki
 page][windows-wiki].
@@ -210,9 +230,9 @@
 find * -type f | fzf > selected
 ```
 
-Without STDIN pipe, fzf will use find command to fetch the list of
-files excluding hidden ones. (You can override the default command with
-`FZF_DEFAULT_COMMAND`)
+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`)
 
 ```sh
 vim $(fzf)
@@ -309,6 +329,10 @@
 - `FZF_DEFAULT_OPTS`
     - Default options
     - e.g. `export FZF_DEFAULT_OPTS="--layout=reverse --inline-info"`
+- `FZF_DEFAULT_OPTS_FILE`
+    - If you prefer to manage default options in a file, set this variable to
+      point to the location of the file
+    - e.g. `export FZF_DEFAULT_OPTS_FILE=~/.fzfrc`
 
 ### Options
 
@@ -468,8 +492,7 @@
 # Options to fzf command
 export FZF_COMPLETION_OPTS='--border --info=inline'
 
-# Use fd (https://github.com/sharkdp/fd) instead of the default find
-# command for listing path candidates.
+# Use fd (https://github.com/sharkdp/fd) for listing path candidates.
 # - The first argument to the function ($1) is the base path to start traversal
 # - See the source code (completion.{bash,zsh}) for the details.
 _fzf_compgen_path() {
@@ -754,9 +777,8 @@
 
 You can use [fd](https://github.com/sharkdp/fd),
 [ripgrep](https://github.com/BurntSushi/ripgrep), or [the silver
-searcher](https://github.com/ggreer/the_silver_searcher) instead of the
-default find command to traverse the file system while respecting
-`.gitignore`.
+searcher](https://github.com/ggreer/the_silver_searcher) to traverse the file
+system while respecting `.gitignore`.
 
 ```sh
 # Feed the output of fd into fzf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/bin/fzf-tmux new/fzf-0.47.0/bin/fzf-tmux
--- old/fzf-0.46.1/bin/fzf-tmux 2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/bin/fzf-tmux 2024-03-10 13:43:41.000000000 +0100
@@ -95,9 +95,9 @@
       elif [[ "$size" =~ %$ ]]; then
         size=${size:0:((${#size}-1))}
         if [[ -n "$swap" ]]; then
-          opt="$opt -p $(( 100 - size ))"
+          opt="$opt -l $(( 100 - size ))%"
         else
-          opt="$opt -p $size"
+          opt="$opt -l $size%"
         fi
       else
         if [[ -n "$swap" ]]; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/doc/fzf.txt new/fzf-0.47.0/doc/fzf.txt
--- old/fzf-0.46.1/doc/fzf.txt  2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/doc/fzf.txt  2024-03-10 13:43:41.000000000 +0100
@@ -1,4 +1,4 @@
-fzf.txt        fzf     Last change: January 1 2024
+fzf.txt        fzf     Last change: February 15 2024
 FZF - TABLE OF CONTENTS                                            *fzf* 
*fzf-toc*
 ==============================================================================
 
@@ -264,17 +264,18 @@
     call fzf#run({'sink': 'e'})
 <
 We haven't specified the `source`, so this is equivalent to starting fzf on
-command line without standard input pipe; fzf will use find command (or
-`$FZF_DEFAULT_COMMAND` if defined) to list the files under the current
-directory. When you select one, it will open it with the sink, `:e` command.
-If you want to open it in a new tab, you can pass `:tabedit` command instead
-as the sink.
+command line without standard input pipe; fzf will traverse the file system
+under the current directory to get the list of files. (If
+`$FZF_DEFAULT_COMMAND` is set, fzf will use the output of the command
+instead.) When you select one, it will open it with the sink, `:e` command. If
+you want to open it in a new tab, you can pass `:tabedit` command instead as
+the sink.
 >
     call fzf#run({'sink': 'tabedit'})
 <
-Instead of using the default find command, you can use any shell command as
-the source. The following example will list the files managed by git. It's
-equivalent to running `git ls-files | fzf` on shell.
+You can use any shell command as the source to generate the list. The
+following example will list the files managed by git. It's equivalent to
+running `git ls-files | fzf` on shell.
 >
     call fzf#run({'source': 'git ls-files', 'sink': 'e'})
 <
@@ -417,24 +418,12 @@
 < fzf inside terminal buffer >________________________________________________~
                                                     
*fzf-inside-terminal-buffer*
 
-The latest versions of Vim and Neovim include builtin terminal emulator
-(`:terminal`) and fzf will start in a terminal buffer in the following cases:
-
- - On Neovim
- - On GVim
- - On Terminal Vim with a non-default layout
-   - `call fzf#run({'left': '30%'})` or 
`let g:fzf_layout = {'left': '30%'}`
 
 On the latest versions of Vim and Neovim, fzf will start in a terminal buffer.
 If you find the default ANSI colors to be different, consider configuring the
 colors using `g:terminal_ansi_colors` in regular Vim or `g:terminal_color_x`
 in Neovim.
 
-                   *g:terminal_color_15* *g:terminal_color_14* 
*g:terminal_color_13*
-*g:terminal_color_12* *g:terminal_color_11* *g:terminal_color_10* 
*g:terminal_color_9*
-   *g:terminal_color_8* *g:terminal_color_7* *g:terminal_color_6* 
*g:terminal_color_5*
-   *g:terminal_color_4* *g:terminal_color_3* *g:terminal_color_2* 
*g:terminal_color_1*
-                                                            
*g:terminal_color_0*
 >
     " Terminal colors for seoul256 color scheme
     if has('nvim')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/go.mod new/fzf-0.47.0/go.mod
--- old/fzf-0.46.1/go.mod       2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/go.mod       2024-03-10 13:43:41.000000000 +0100
@@ -1,20 +1,19 @@
 module github.com/junegunn/fzf
 
 require (
-       github.com/gdamore/tcell/v2 v2.7.0
-       github.com/mattn/go-isatty v0.0.17
+       github.com/charlievieth/fastwalk v1.0.2
+       github.com/gdamore/tcell/v2 v2.7.4
+       github.com/mattn/go-isatty v0.0.20
        github.com/mattn/go-shellwords v1.0.12
-       github.com/rivo/uniseg v0.4.6
-       github.com/saracen/walker v0.1.3
-       golang.org/x/sys v0.16.0
-       golang.org/x/term v0.16.0
+       github.com/rivo/uniseg v0.4.7
+       golang.org/x/sys v0.17.0
+       golang.org/x/term v0.17.0
 )
 
 require (
        github.com/gdamore/encoding v1.0.0 // indirect
        github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
        github.com/mattn/go-runewidth v0.0.15 // indirect
-       golang.org/x/sync v0.5.0 // indirect
        golang.org/x/text v0.14.0 // indirect
 )
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/go.sum new/fzf-0.47.0/go.sum
--- old/fzf-0.46.1/go.sum       2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/go.sum       2024-03-10 13:43:41.000000000 +0100
@@ -1,21 +1,21 @@
+github.com/charlievieth/fastwalk v1.0.2 
h1:KYWo7xszmoldOGrwdNIeznSzhj9mhgk+6DwHunG99bc=
+github.com/charlievieth/fastwalk v1.0.2/go.mod 
h1:JSfglY/gmL/rqsUS1NCsJTocB5n6sSl9ApAqif4CUbs=
 github.com/gdamore/encoding v1.0.0 
h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
 github.com/gdamore/encoding v1.0.0/go.mod 
h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
-github.com/gdamore/tcell/v2 v2.7.0 
h1:I5LiGTQuwrysAt1KS9wg1yFfOI3arI3ucFrxtd/xqaA=
-github.com/gdamore/tcell/v2 v2.7.0/go.mod 
h1:hl/KtAANGBecfIPxk+FzKvThTqI84oplgbPEmVX60b8=
+github.com/gdamore/tcell/v2 v2.7.4 
h1:sg6/UnTM9jGpZU+oFYAsDahfchWAFW8Xx2yFinNSAYU=
+github.com/gdamore/tcell/v2 v2.7.4/go.mod 
h1:dSXtXTSK0VsW1biw65DZLZ2NKr7j0qP/0J7ONmsraWg=
 github.com/lucasb-eyer/go-colorful v1.2.0 
h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod 
h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
-github.com/mattn/go-isatty v0.0.17 
h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
-github.com/mattn/go-isatty v0.0.17/go.mod 
h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
+github.com/mattn/go-isatty v0.0.20 
h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod 
h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
 github.com/mattn/go-runewidth v0.0.15 
h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
 github.com/mattn/go-runewidth v0.0.15/go.mod 
h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
 github.com/mattn/go-shellwords v1.0.12 
h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk=
 github.com/mattn/go-shellwords v1.0.12/go.mod 
h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
 github.com/rivo/uniseg v0.2.0/go.mod 
h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 github.com/rivo/uniseg v0.4.3/go.mod 
h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
-github.com/rivo/uniseg v0.4.6 h1:Sovz9sDSwbOz9tgUy8JpT+KgCkPYJEN/oYzlJiYTNLg=
-github.com/rivo/uniseg v0.4.6/go.mod 
h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
-github.com/saracen/walker v0.1.3 
h1:YtcKKmpRPy6XJTHJ75J2QYXXZYWnZNQxPCVqZSHVV/g=
-github.com/saracen/walker v0.1.3/go.mod 
h1:FU+7qU8DeQQgSZDmmThMJi93kPkLFgy0oVAcLxurjIk=
+github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
+github.com/rivo/uniseg v0.4.7/go.mod 
h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
 github.com/yuin/goldmark v1.4.13/go.mod 
h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod 
h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod 
h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
@@ -26,27 +26,22 @@
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod 
h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
 golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
-golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
-golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+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/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.15.0/go.mod 
h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
-golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE=
-golang.org/x/term v0.16.0/go.mod 
h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
+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/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.46.1/install new/fzf-0.47.0/install
--- old/fzf-0.46.1/install      2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/install      2024-03-10 13:43:41.000000000 +0100
@@ -2,7 +2,7 @@
 
 set -u
 
-version=0.46.1
+version=0.47.0
 auto_completion=
 key_bindings=
 update_config=2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/install.ps1 new/fzf-0.47.0/install.ps1
--- old/fzf-0.46.1/install.ps1  2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/install.ps1  2024-03-10 13:43:41.000000000 +0100
@@ -1,4 +1,4 @@
-$version="0.46.1"
+$version="0.47.0"
 
 $fzf_base=Split-Path -Parent $MyInvocation.MyCommand.Definition
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/main.go new/fzf-0.47.0/main.go
--- old/fzf-0.46.1/main.go      2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/main.go      2024-03-10 13:43:41.000000000 +0100
@@ -5,7 +5,7 @@
        "github.com/junegunn/fzf/src/protector"
 )
 
-var version string = "0.46"
+var version string = "0.47"
 var revision string = "devel"
 
 func main() {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/man/man1/fzf-tmux.1 
new/fzf-0.47.0/man/man1/fzf-tmux.1
--- old/fzf-0.46.1/man/man1/fzf-tmux.1  2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/man/man1/fzf-tmux.1  2024-03-10 13:43:41.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 "Feb 2024" "fzf 0.46.1" "fzf-tmux - open fzf in tmux split pane"
+.TH fzf-tmux 1 "Mar 2024" "fzf 0.47.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.46.1/man/man1/fzf.1 
new/fzf-0.47.0/man/man1/fzf.1
--- old/fzf-0.46.1/man/man1/fzf.1       2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/man/man1/fzf.1       2024-03-10 13:43:41.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 "Feb 2024" "fzf 0.46.1" "fzf - a command-line fuzzy finder"
+.TH fzf 1 "Mar 2024" "fzf 0.47.0" "fzf - a command-line fuzzy finder"
 
 .SH NAME
 fzf - a command-line fuzzy finder
@@ -865,7 +865,14 @@
 this case make sure that the command is POSIX-compliant.
 .TP
 .B FZF_DEFAULT_OPTS
-Default options. e.g. \fBexport FZF_DEFAULT_OPTS="--extended --cycle"\fR
+Default options.
+.br
+e.g. \fBexport FZF_DEFAULT_OPTS="--layout=reverse --border --cycle"\fR
+.TP
+.B FZF_DEFAULT_OPTS_FILE
+The location of the file that contains the default options.
+.br
+e.g. \fBexport FZF_DEFAULT_OPTS_FILE=~/.fzfrc\fR
 .TP
 .B FZF_API_KEY
 Can be used to require an API key when using \fB--listen\fR option. If not set,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/shell/completion.bash 
new/fzf-0.47.0/shell/completion.bash
--- old/fzf-0.46.1/shell/completion.bash        2024-02-01 10:13:00.000000000 
+0100
+++ new/fzf-0.47.0/shell/completion.bash        2024-03-10 13:43:41.000000000 
+0100
@@ -63,6 +63,31 @@
   done
 }
 
+# @param $1 cmd - Command name for which the original completion is searched
+# @var[out] REPLY - Original function name is returned
+__fzf_orig_completion_get_orig_func() {
+  local cmd orig_var orig
+  cmd=$1
+  orig_var="_fzf_orig_completion_${cmd//[^A-Za-z0-9_]/_}"
+  orig="${!orig_var-}"
+  REPLY="${orig##*#}"
+  [[ $REPLY ]] && type "$REPLY" &> /dev/null
+}
+
+# @param $1 cmd - Command name for which the original completion is searched
+# @param $2 func - Fzf's completion function to replace the original function
+# @var[out] REPLY - Completion setting is returned as a string to "eval"
+__fzf_orig_completion_instantiate() {
+  local cmd func orig_var orig
+  cmd=$1
+  func=$2
+  orig_var="_fzf_orig_completion_${cmd//[^A-Za-z0-9_]/_}"
+  orig="${!orig_var-}"
+  orig="${orig%#*}"
+  [[ $orig == *' %s '* ]] || return 1
+  printf -v REPLY "$orig" "$func"
+}
+
 _fzf_opts_completion() {
   local cur prev opts
   COMPREPLY=()
@@ -261,15 +286,12 @@
 }
 
 _fzf_handle_dynamic_completion() {
-  local cmd orig_var orig ret orig_cmd orig_complete
+  local cmd ret REPLY orig_cmd orig_complete
   cmd="$1"
   shift
   orig_cmd="$1"
-  orig_var="_fzf_orig_completion_$cmd"
-  orig="${!orig_var-}"
-  orig="${orig##*#}"
-  if [[ -n "$orig" ]] && type "$orig" > /dev/null 2>&1; then
-    $orig "$@"
+  if __fzf_orig_completion_get_orig_func "$cmd"; then
+    "$REPLY" "$@"
   elif [[ -n "${_fzf_completion_loader-}" ]]; then
     orig_complete=$(complete -p "$orig_cmd" 2> /dev/null)
     _completion_loader "$@"
@@ -277,6 +299,12 @@
     # _completion_loader may not have updated completion for the command
     if [[ "$(complete -p "$orig_cmd" 2> /dev/null)" != "$orig_complete" ]]; 
then
       __fzf_orig_completion < <(complete -p "$orig_cmd" 2> /dev/null)
+
+      # Update orig_complete by _fzf_orig_completion entry
+      [[ $orig_complete =~ ' -F '(_fzf_[^ ]+)' ' ]] &&
+        __fzf_orig_completion_instantiate "$cmd" "${BASH_REMATCH[1]}" &&
+        orig_complete=$REPLY
+
       if [[ "${__fzf_nospace_commands-}" = *" $orig_cmd "* ]]; then
         eval "${orig_complete/ -F / -o nospace -F }"
       else
@@ -293,7 +321,6 @@
   if [[ $cmd == \\* ]]; then
     cmd="${cmd:1}"
   fi
-  cmd="${cmd//[^A-Za-z0-9_=]/_}"
   COMPREPLY=()
   trigger=${FZF_COMPLETION_TRIGGER-'**'}
   cur="${COMP_WORDS[COMP_CWORD]}"
@@ -359,7 +386,6 @@
   post="$(caller 0 | command awk '{print $2}')_post"
   type -t "$post" > /dev/null 2>&1 || post='command cat'
 
-  cmd="${COMP_WORDS[0]//[^A-Za-z0-9_=]/_}"
   trigger=${FZF_COMPLETION_TRIGGER-'**'}
   cur="${COMP_WORDS[COMP_CWORD]}"
   if [[ "$cur" == *"$trigger" ]] && [[ $cur != *'$('* ]] && [[ $cur != *':='* 
]] && [[ $cur != *'`'* ]]; then
@@ -488,15 +514,12 @@
 fi
 
 __fzf_defc() {
-  local cmd func opts orig_var orig def
+  local cmd func opts REPLY
   cmd="$1"
   func="$2"
   opts="$3"
-  orig_var="_fzf_orig_completion_${cmd//[^A-Za-z0-9_]/_}"
-  orig="${!orig_var-}"
-  if [[ -n "$orig" ]]; then
-    printf -v def "$orig" "$func"
-    eval "$def"
+  if __fzf_orig_completion_instantiate "$cmd" "$func"; then
+    eval "$REPLY"
   else
     complete -F "$func" $opts "$cmd"
   fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/src/algo/algo.go 
new/fzf-0.47.0/src/algo/algo.go
--- old/fzf-0.46.1/src/algo/algo.go     2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/src/algo/algo.go     2024-03-10 13:43:41.000000000 +0100
@@ -255,24 +255,29 @@
 
 func bonusFor(prevClass charClass, class charClass) int16 {
        if class > charNonWord {
-               if prevClass == charWhite {
+               switch prevClass {
+               case charWhite:
                        // Word boundary after whitespace
                        return bonusBoundaryWhite
-               } else if prevClass == charDelimiter {
+               case charDelimiter:
                        // Word boundary after a delimiter character
                        return bonusBoundaryDelimiter
-               } else if prevClass == charNonWord {
+               case charNonWord:
                        // Word boundary
                        return bonusBoundary
                }
        }
+
        if prevClass == charLower && class == charUpper ||
                prevClass != charNumber && class == charNumber {
                // camelCase letter123
                return bonusCamel123
-       } else if class == charNonWord {
+       }
+
+       switch class {
+       case charNonWord, charDelimiter:
                return bonusNonWord
-       } else if class == charWhite {
+       case charWhite:
                return bonusBoundaryWhite
        }
        return 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/src/constants.go 
new/fzf-0.47.0/src/constants.go
--- old/fzf-0.46.1/src/constants.go     2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/src/constants.go     2024-03-10 13:43:41.000000000 +0100
@@ -2,7 +2,6 @@
 
 import (
        "math"
-       "os"
        "time"
 
        "github.com/junegunn/fzf/src/util"
@@ -54,16 +53,6 @@
        defaultJumpLabels string = 
"asdfghjklqwertyuiopzxcvbnm1234567890ASDFGHJKLQWERTYUIOPZXCVBNM`~;:,<.>/?'\"!@#$%^&*()[{]}-_=+"
 )
 
-var defaultCommand string
-
-func init() {
-       if !util.IsWindows() {
-               defaultCommand = `set -o pipefail; 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 l -print 2> /dev/null | 
cut -b3-`
-       } else if os.Getenv("TERM") == "cygwin" {
-               defaultCommand = `sh -c "command find -L . -mindepth 1 -path 
'*/.*' -prune -o -type f -print -o -type l -print 2> /dev/null | cut -b3-"`
-       }
-}
-
 // fzf events
 const (
        EvtReadNew util.EventType = iota
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/src/core.go new/fzf-0.47.0/src/core.go
--- old/fzf-0.46.1/src/core.go  2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/src/core.go  2024-03-10 13:43:41.000000000 +0100
@@ -213,6 +213,7 @@
        reading := true
        ticks := 0
        var nextCommand *string
+       var nextEnviron []string
        eventBox.Watch(EvtReadNew)
        total := 0
        query := []rune{}
@@ -232,13 +233,13 @@
        useSnapshot := false
        var snapshot []*Chunk
        var count int
-       restart := func(command string) {
+       restart := func(command string, environ []string) {
                reading = true
                chunkList.Clear()
                itemIndex = 0
                inputRevision++
                header = make([]string, 0, opts.HeaderLines)
-               go reader.restart(command)
+               go reader.restart(command, environ)
        }
        for {
                delay := true
@@ -266,8 +267,9 @@
                                        os.Exit(value.(int))
                                case EvtReadNew, EvtReadFin:
                                        if evt == EvtReadFin && nextCommand != 
nil {
-                                               restart(*nextCommand)
+                                               restart(*nextCommand, 
nextEnviron)
                                                nextCommand = nil
+                                               nextEnviron = nil
                                                break
                                        } else {
                                                reading = reading && evt == 
EvtReadNew
@@ -292,11 +294,13 @@
 
                                case EvtSearchNew:
                                        var command *string
+                                       var environ []string
                                        var changed bool
                                        switch val := value.(type) {
                                        case searchRequest:
                                                sort = val.sort
                                                command = val.command
+                                               environ = val.environ
                                                changed = val.changed
                                                if command != nil {
                                                        useSnapshot = val.sync
@@ -306,8 +310,9 @@
                                                if reading {
                                                        reader.terminate()
                                                        nextCommand = command
+                                                       nextEnviron = environ
                                                } else {
-                                                       restart(*command)
+                                                       restart(*command, 
environ)
                                                }
                                        }
                                        if !changed {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/src/options.go 
new/fzf-0.47.0/src/options.go
--- old/fzf-0.46.1/src/options.go       2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/src/options.go       2024-03-10 13:43:41.000000000 +0100
@@ -126,8 +126,8 @@
 
   Environment variables
     FZF_DEFAULT_COMMAND    Default command to use when input is tty
-    FZF_DEFAULT_OPTS       Default options
-                           (e.g. '--layout=reverse --inline-info')
+    FZF_DEFAULT_OPTS       Default options (e.g. '--layout=reverse 
--info=inline')
+    FZF_DEFAULT_OPTS_FILE  Location of the file to read default options from
     FZF_API_KEY            X-API-Key header for HTTP server (--listen)
 
 `
@@ -421,8 +421,10 @@
        os.Exit(code)
 }
 
+var errorContext = ""
+
 func errorExit(msg string) {
-       os.Stderr.WriteString(msg + "\n")
+       os.Stderr.WriteString(errorContext + msg + "\n")
        os.Exit(exitError)
 }
 
@@ -1864,7 +1866,7 @@
                        addr := defaultListenAddr
                        if given {
                                var err error
-                               err, addr = parseListenAddress(str)
+                               addr, err = parseListenAddress(str)
                                if err != nil {
                                        errorExit(err.Error())
                                }
@@ -1962,14 +1964,14 @@
                        } else if match, value := optString(arg, "--tabstop="); 
match {
                                opts.Tabstop = atoi(value)
                        } else if match, value := optString(arg, "--listen="); 
match {
-                               err, addr := parseListenAddress(value)
+                               addr, err := parseListenAddress(value)
                                if err != nil {
                                        errorExit(err.Error())
                                }
                                opts.ListenAddr = &addr
                                opts.Unsafe = false
                        } else if match, value := optString(arg, 
"--listen-unsafe="); match {
-                               err, addr := parseListenAddress(value)
+                               addr, err := parseListenAddress(value)
                                if err != nil {
                                        errorExit(err.Error())
                                }
@@ -2167,13 +2169,36 @@
                }
        }
 
-       // Options from Env var
-       words, _ := shellwords.Parse(os.Getenv("FZF_DEFAULT_OPTS"))
+       // 1. Options from $FZF_DEFAULT_OPTS_FILE
+       if path := os.Getenv("FZF_DEFAULT_OPTS_FILE"); path != "" {
+               bytes, err := os.ReadFile(path)
+               if err != nil {
+                       errorContext = "$FZF_DEFAULT_OPTS_FILE: "
+                       errorExit(err.Error())
+               }
+
+               words, parseErr := shellwords.Parse(string(bytes))
+               if parseErr != nil {
+                       errorContext = path + ": "
+                       errorExit(parseErr.Error())
+               }
+               if len(words) > 0 {
+                       parseOptions(opts, words)
+               }
+       }
+
+       // 2. Options from $FZF_DEFAULT_OPTS string
+       words, parseErr := shellwords.Parse(os.Getenv("FZF_DEFAULT_OPTS"))
+       errorContext = "$FZF_DEFAULT_OPTS: "
+       if parseErr != nil {
+               errorExit(parseErr.Error())
+       }
        if len(words) > 0 {
                parseOptions(opts, words)
        }
 
-       // Options from command-line arguments
+       // 3. Options from command-line arguments
+       errorContext = ""
        parseOptions(opts, os.Args[1:])
 
        postProcessOptions(opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/src/pattern.go 
new/fzf-0.47.0/src/pattern.go
--- old/fzf-0.46.1/src/pattern.go       2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/src/pattern.go       2024-03-10 13:43:41.000000000 +0100
@@ -209,11 +209,10 @@
                        // Flip exactness
                        if fuzzy && !inv {
                                typ = termExact
-                               text = text[1:]
                        } else {
                                typ = termFuzzy
-                               text = text[1:]
                        }
+                       text = text[1:]
                } else if strings.HasPrefix(text, "^") {
                        if typ == termSuffix {
                                typ = termEqual
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/src/reader.go new/fzf-0.47.0/src/reader.go
--- old/fzf-0.46.1/src/reader.go        2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/src/reader.go        2024-03-10 13:43:41.000000000 +0100
@@ -6,14 +6,13 @@
        "io"
        "os"
        "os/exec"
-       "path"
        "path/filepath"
        "sync"
        "sync/atomic"
        "time"
 
+       "github.com/charlievieth/fastwalk"
        "github.com/junegunn/fzf/src/util"
-       "github.com/saracen/walker"
 )
 
 // Reader reads from command or standard input
@@ -77,20 +76,19 @@
 
 func (r *Reader) terminate() {
        r.mutex.Lock()
-       defer func() { r.mutex.Unlock() }()
-
        r.killed = true
        if r.exec != nil && r.exec.Process != nil {
                util.KillCommand(r.exec)
-       } else if defaultCommand != "" {
+       } else {
                os.Stdin.Close()
        }
+       r.mutex.Unlock()
 }
 
-func (r *Reader) restart(command string) {
+func (r *Reader) restart(command string, environ []string) {
        r.event = int32(EvtReady)
        r.startEventPoller()
-       success := r.readFromCommand(nil, command)
+       success := r.readFromCommand(command, environ)
        r.fin(success)
 }
 
@@ -99,26 +97,12 @@
        r.startEventPoller()
        var success bool
        if util.IsTty() {
-               // The default command for *nix requires a shell that supports 
"pipefail"
-               // https://unix.stackexchange.com/a/654932/62171
-               shell := "bash"
-               currentShell := os.Getenv("SHELL")
-               currentShellName := path.Base(currentShell)
-               for _, shellName := range []string{"bash", "zsh", "ksh", "ash", 
"hush", "mksh", "yash"} {
-                       if currentShellName == shellName {
-                               shell = currentShell
-                               break
-                       }
-               }
                cmd := os.Getenv("FZF_DEFAULT_COMMAND")
                if len(cmd) == 0 {
-                       if defaultCommand != "" {
-                               success = r.readFromCommand(&shell, 
defaultCommand)
-                       } else {
-                               success = r.readFiles()
-                       }
+                       success = r.readFiles()
                } else {
-                       success = r.readFromCommand(nil, cmd)
+                       // We can't export FZF_* environment variables to the 
default command
+                       success = r.readFromCommand(cmd, nil)
                }
        } else {
                success = r.readFromStdin()
@@ -163,10 +147,14 @@
 
 func (r *Reader) readFiles() bool {
        r.killed = false
-       fn := func(path string, mode os.FileInfo) error {
+       conf := fastwalk.Config{Follow: true}
+       fn := func(path string, de os.DirEntry, err error) error {
+               if err != nil {
+                       return nil
+               }
                path = filepath.Clean(path)
                if path != "." {
-                       isDir := mode.Mode().IsDir()
+                       isDir := de.IsDir()
                        if isDir && filepath.Base(path)[0] == '.' {
                                return filepath.SkipDir
                        }
@@ -181,20 +169,16 @@
                }
                return nil
        }
-       cb := walker.WithErrorCallback(func(pathname string, err error) error {
-               return nil
-       })
-       return walker.Walk(".", fn, cb) == nil
+       return fastwalk.Walk(&conf, ".", fn) == nil
 }
 
-func (r *Reader) readFromCommand(shell *string, command string) bool {
+func (r *Reader) readFromCommand(command string, environ []string) bool {
        r.mutex.Lock()
        r.killed = false
        r.command = &command
-       if shell != nil {
-               r.exec = util.ExecCommandWith(*shell, command, true)
-       } else {
-               r.exec = util.ExecCommand(command, true)
+       r.exec = util.ExecCommand(command, true)
+       if environ != nil {
+               r.exec.Env = environ
        }
        out, err := r.exec.StdoutPipe()
        if err != nil {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/src/reader_test.go 
new/fzf-0.47.0/src/reader_test.go
--- old/fzf-0.46.1/src/reader_test.go   2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/src/reader_test.go   2024-03-10 13:43:41.000000000 +0100
@@ -22,7 +22,7 @@
        }
 
        // Normal command
-       reader.fin(reader.readFromCommand(nil, `echo abc&&echo def`))
+       reader.fin(reader.readFromCommand(`echo abc&&echo def`, nil))
        if len(strs) != 2 || strs[0] != "abc" || strs[1] != "def" {
                t.Errorf("%s", strs)
        }
@@ -47,7 +47,7 @@
        reader.startEventPoller()
 
        // Failing command
-       reader.fin(reader.readFromCommand(nil, `no-such-command`))
+       reader.fin(reader.readFromCommand(`no-such-command`, nil))
        strs = []string{}
        if len(strs) > 0 {
                t.Errorf("%s", strs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/src/server.go new/fzf-0.47.0/src/server.go
--- old/fzf-0.46.1/src/server.go        2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/src/server.go        2024-03-10 13:43:41.000000000 +0100
@@ -53,47 +53,47 @@
 
 var defaultListenAddr = listenAddress{"localhost", 0}
 
-func parseListenAddress(address string) (error, listenAddress) {
+func parseListenAddress(address string) (listenAddress, error) {
        parts := strings.SplitN(address, ":", 3)
        if len(parts) == 1 {
                parts = []string{"localhost", parts[0]}
        }
        if len(parts) != 2 {
-               return fmt.Errorf("invalid listen address: %s", address), 
defaultListenAddr
+               return defaultListenAddr, fmt.Errorf("invalid listen address: 
%s", address)
        }
        portStr := parts[len(parts)-1]
        port, err := strconv.Atoi(portStr)
        if err != nil || port < 0 || port > 65535 {
-               return fmt.Errorf("invalid listen port: %s", portStr), 
defaultListenAddr
+               return defaultListenAddr, fmt.Errorf("invalid listen port: %s", 
portStr)
        }
        if len(parts[0]) == 0 {
                parts[0] = "localhost"
        }
-       return nil, listenAddress{parts[0], port}
+       return listenAddress{parts[0], port}, nil
 }
 
-func startHttpServer(address listenAddress, actionChannel chan []*action, 
responseChannel chan string) (error, int) {
+func startHttpServer(address listenAddress, actionChannel chan []*action, 
responseChannel chan string) (int, error) {
        host := address.host
        port := address.port
        apiKey := os.Getenv("FZF_API_KEY")
        if !address.IsLocal() && len(apiKey) == 0 {
-               return fmt.Errorf("FZF_API_KEY is required to allow remote 
access"), port
+               return port, fmt.Errorf("FZF_API_KEY is required to allow 
remote access")
        }
        addrStr := fmt.Sprintf("%s:%d", host, port)
        listener, err := net.Listen("tcp", addrStr)
        if err != nil {
-               return fmt.Errorf("failed to listen on %s", addrStr), port
+               return port, fmt.Errorf("failed to listen on %s", addrStr)
        }
        if port == 0 {
                addr := listener.Addr().String()
                parts := strings.Split(addr, ":")
                if len(parts) < 2 {
-                       return fmt.Errorf("cannot extract port: %s", addr), port
+                       return port, fmt.Errorf("cannot extract port: %s", addr)
                }
                var err error
                port, err = strconv.Atoi(parts[len(parts)-1])
                if err != nil {
-                       return err, port
+                       return port, err
                }
        }
 
@@ -119,7 +119,7 @@
                listener.Close()
        }()
 
-       return nil, port
+       return port, nil
 }
 
 // Here we are writing a simplistic HTTP server without using net/http
@@ -237,15 +237,13 @@
                parts := strings.SplitN(pair, "=", 2)
                if len(parts) == 2 {
                        switch parts[0] {
-                       case "limit":
-                               val, err := strconv.Atoi(parts[1])
-                               if err == nil {
-                                       params.limit = val
-                               }
-                       case "offset":
-                               val, err := strconv.Atoi(parts[1])
-                               if err == nil {
-                                       params.offset = val
+                       case "limit", "offset":
+                               if val, err := strconv.Atoi(parts[1]); err == 
nil {
+                                       if parts[0] == "limit" {
+                                               params.limit = val
+                                       } else {
+                                               params.offset = val
+                                       }
                                }
                        }
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/src/terminal.go 
new/fzf-0.47.0/src/terminal.go
--- old/fzf-0.46.1/src/terminal.go      2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/src/terminal.go      2024-03-10 13:43:41.000000000 +0100
@@ -67,7 +67,7 @@
        // * https://sw.kovidgoyal.net/kitty/graphics-protocol
        // * https://en.wikipedia.org/wiki/Sixel
        // * https://iterm2.com/documentation-images.html
-       passThroughRegex = 
regexp.MustCompile(`\x1bPtmux;\x1b\x1b.*?[^\x1b]\x1b\\|\x1b(_G|P[0-9;]*q).*?\x1b\\\r?|\x1b]1337;.*?\a`)
+       passThroughRegex = 
regexp.MustCompile(`\x1bPtmux;\x1b\x1b.*?[^\x1b]\x1b\\|\x1b(_G|P[0-9;]*q).*?\x1b\\\r?|\x1b]1337;.*?(\a|\x1b\\)`)
 }
 
 type jumpMode int
@@ -499,6 +499,7 @@
        sort    bool
        sync    bool
        command *string
+       environ []string
        changed bool
 }
 
@@ -828,7 +829,7 @@
        _, t.hasLoadActions = t.keymap[tui.Load.AsEvent()]
 
        if t.listenAddr != nil {
-               err, port := startHttpServer(*t.listenAddr, t.serverInputChan, 
t.serverOutputChan)
+               port, err := startHttpServer(*t.listenAddr, t.serverInputChan, 
t.serverOutputChan)
                if err != nil {
                        errorExit(err.Error())
                }
@@ -3160,7 +3161,7 @@
                                                }
                                                t.previewer.lines = result.lines
                                                t.previewer.spinner = 
result.spinner
-                                               if 
t.previewer.following.Enabled() {
+                                               if t.hasPreviewWindow() && 
t.previewer.following.Enabled() {
                                                        t.previewer.offset = 
util.Max(t.previewer.offset, 
len(t.previewer.lines)-(t.pwindow.Height()-t.previewOpts.headerLines))
                                                } else if result.offset >= 0 {
                                                        t.previewer.offset = 
util.Constrain(result.offset, t.previewOpts.headerLines, 
len(t.previewer.lines)-1)
@@ -3381,6 +3382,9 @@
                                                // Discard the preview content 
so that it won't accidentally appear
                                                // when preview window is 
re-enabled and previewDelay is triggered
                                                t.previewer.lines = nil
+
+                                               // Also kill the preview 
process if it's still running
+                                               t.cancelPreview()
                                        }
                                }
                        case actTogglePreviewWrap:
@@ -3987,11 +3991,18 @@
 
                                // Full redraw
                                if 
!currentPreviewOpts.sameLayout(t.previewOpts) {
-                                       wasHidden := t.pwindow == nil
+                                       // Preview command can be running in 
the background if the size of
+                                       // the preview window is 0 but not 
'hidden'
+                                       wasHidden := currentPreviewOpts.hidden
                                        updatePreviewWindow(false)
                                        if wasHidden && t.hasPreviewWindow() {
+                                               // Restart
                                                
refreshPreview(t.previewOpts.command)
+                                       } else if t.previewOpts.hidden {
+                                               // Cancel
+                                               t.cancelPreview()
                                        } else {
+                                               // Refresh
                                                req(reqPreviewRefresh)
                                        }
                                } else if 
!currentPreviewOpts.sameContentLayout(t.previewOpts) {
@@ -4081,10 +4092,15 @@
                        req(reqPrompt)
                }
 
+               reload := changed || newCommand != nil
+               var reloadRequest *searchRequest
+               if reload {
+                       reloadRequest = &searchRequest{sort: t.sort, sync: 
reloadSync, command: newCommand, environ: t.environ(), changed: changed}
+               }
                t.mutex.Unlock() // Must be unlocked before touching reqBox
 
-               if changed || newCommand != nil {
-                       t.eventBox.Set(EvtSearchNew, searchRequest{sort: 
t.sort, sync: reloadSync, command: newCommand, changed: changed})
+               if reload {
+                       t.eventBox.Set(EvtSearchNew, *reloadRequest)
                }
                for _, event := range events {
                        t.reqBox.Set(event, nil)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/src/tui/light.go 
new/fzf-0.47.0/src/tui/light.go
--- old/fzf-0.46.1/src/tui/light.go     2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/src/tui/light.go     2024-03-10 13:43:41.000000000 +0100
@@ -808,13 +808,25 @@
                color = ColPreviewBorder
        }
        hw := runeWidth(w.border.top)
+       pad := repeat(' ', w.width/hw)
+
+       w.Move(0, 0)
        if top {
-               w.Move(0, 0)
                w.CPrint(color, repeat(w.border.top, w.width/hw))
+       } else {
+               w.CPrint(color, pad)
+       }
+
+       for y := 1; y < w.height-1; y++ {
+               w.Move(y, 0)
+               w.CPrint(color, pad)
        }
+
+       w.Move(w.height-1, 0)
        if bottom {
-               w.Move(w.height-1, 0)
                w.CPrint(color, repeat(w.border.bottom, w.width/hw))
+       } else {
+               w.CPrint(color, pad)
        }
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/src/tui/tcell.go 
new/fzf-0.47.0/src/tui/tcell.go
--- old/fzf-0.46.1/src/tui/tcell.go     2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/src/tui/tcell.go     2024-03-10 13:43:41.000000000 +0100
@@ -544,7 +544,7 @@
                height:      height,
                normal:      normal,
                borderStyle: borderStyle}
-       w.drawBorder(false)
+       w.Erase()
        return w
 }
 
@@ -561,8 +561,8 @@
 }
 
 func (w *TcellWindow) Erase() {
-       w.drawBorder(false)
        fill(w.left-1, w.top, w.width+1, w.height-1, w.normal, ' ')
+       w.drawBorder(false)
 }
 
 func (w *TcellWindow) EraseMaybe() bool {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.46.1/test/test_go.rb 
new/fzf-0.47.0/test/test_go.rb
--- old/fzf-0.46.1/test/test_go.rb      2024-02-01 10:13:00.000000000 +0100
+++ new/fzf-0.47.0/test/test_go.rb      2024-03-10 13:43:41.000000000 +0100
@@ -1918,7 +1918,7 @@
   end
 
   def test_reload
-    tmux.send_keys %(seq 1000 | #{FZF} --bind 'change:reload(seq 
{q}),a:reload(seq 100),b:reload:seq 200' --header-lines 2 --multi 2), :Enter
+    tmux.send_keys %(seq 1000 | #{FZF} --bind 'change:reload(seq 
$FZF_QUERY),a:reload(seq 100),b:reload:seq 200' --header-lines 2 --multi 2), 
:Enter
     tmux.until { |lines| assert_equal 998, lines.match_count }
     tmux.send_keys 'a'
     tmux.until do |lines|
@@ -2582,6 +2582,7 @@
   def test_change_preview_window_rotate
     tmux.send_keys "seq 100 | #{FZF} --preview-window left,border-none 
--preview 'echo hello' --bind '" \
       "a:change-preview-window(right|down|up|hidden|)'", :Enter
+    tmux.until { |lines| assert(lines.any? { _1.include?('100/100') }) }
     3.times do
       tmux.until { |lines| lines[0].start_with?('hello') }
       tmux.send_keys 'a'

++++++ vendor.tar.zst ++++++
Binary files /var/tmp/diff_new_pack.NyLJnd/_old and 
/var/tmp/diff_new_pack.NyLJnd/_new differ

Reply via email to