Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package fzf for openSUSE:Factory checked in 
at 2022-07-22 19:21:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fzf (Old)
 and      /work/SRC/openSUSE:Factory/.fzf.new.21925 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fzf"

Fri Jul 22 19:21:35 2022 rev:23 rq:990676 version:0.31.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/fzf/fzf.changes  2022-06-23 10:23:57.831720005 
+0200
+++ /work/SRC/openSUSE:Factory/.fzf.new.21925/fzf.changes       2022-07-22 
19:21:54.516724192 +0200
@@ -1,0 +2,26 @@
+Thu Jul 21 16:17:24 UTC 2022 - Matej Cepl <mc...@suse.com>
+
+- Update to 0.31.0:
+  - Added support for an alternative preview window layout that
+    is activated when the size of the preview window is smaller
+    than a certain threshold.
+
+    # If the width of the preview window is smaller than 50 columns,
+    # it will be displayed above the search window.
+    fzf --preview 'cat {}' --preview-window 
'right,50%,border-left,<50(up,30%,border-bottom)'
+
+    # Or you can just hide it like so
+    fzf --preview 'cat {}' --preview-window '<50(hidden)'
+
+  - fzf now uses SGR mouse mode to properly support mouse on
+    larger terminals
+  - You can now use characters that do not satisfy
+    unicode.IsGraphic constraint for --marker, --pointer, and
+    --ellipsis. Allows Nerd Fonts and stuff.
+    Use at your own risk.
+  - Bug fixes and improvements
+  - Shell extension
+      kill completion now requires trigger sequence (**) for
+      consistency
+
+-------------------------------------------------------------------

Old:
----
  fzf-0.30.0.tar.gz

New:
----
  fzf-0.31.0.tar.gz

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

Other differences:
------------------
++++++ fzf.spec ++++++
--- /var/tmp/diff_new_pack.DYkWKK/_old  2022-07-22 19:21:54.920724816 +0200
+++ /var/tmp/diff_new_pack.DYkWKK/_new  2022-07-22 19:21:54.924724822 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           fzf
-Version:        0.30.0
+Version:        0.31.0
 Release:        0
 Summary:        A command-line fuzzy finder
 License:        MIT

++++++ fzf-0.30.0.tar.gz -> fzf-0.31.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/.github/workflows/codeql-analysis.yml 
new/fzf-0.31.0/.github/workflows/codeql-analysis.yml
--- old/fzf-0.30.0/.github/workflows/codeql-analysis.yml        2022-04-04 
16:01:43.000000000 +0200
+++ new/fzf-0.31.0/.github/workflows/codeql-analysis.yml        2022-07-21 
15:46:34.000000000 +0200
@@ -33,12 +33,12 @@
 
     # Initializes the CodeQL tools for scanning.
     - name: Initialize CodeQL
-      uses: github/codeql-action/init@28eead240834b314f7def40f6fcba65d100d99b1 
# v1
+      uses: github/codeql-action/init@1ed1437484560351c5be56cf73a48a279d116b78
       with:
         languages: ${{ matrix.language }}
 
     - name: Autobuild
-      uses: 
github/codeql-action/autobuild@28eead240834b314f7def40f6fcba65d100d99b1 # v1
+      uses: 
github/codeql-action/autobuild@1ed1437484560351c5be56cf73a48a279d116b78
 
     - name: Perform CodeQL Analysis
-      uses: 
github/codeql-action/analyze@28eead240834b314f7def40f6fcba65d100d99b1 # v1
+      uses: 
github/codeql-action/analyze@1ed1437484560351c5be56cf73a48a279d116b78
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/.github/workflows/linux.yml 
new/fzf-0.31.0/.github/workflows/linux.yml
--- old/fzf-0.30.0/.github/workflows/linux.yml  2022-04-04 16:01:43.000000000 
+0200
+++ new/fzf-0.31.0/.github/workflows/linux.yml  2022-07-21 15:46:34.000000000 
+0200
@@ -25,7 +25,7 @@
         go-version: 1.18
 
     - name: Setup Ruby
-      uses: ruby/setup-ruby@bd94d6a504586da892a5753afdd1480096ed30df # v1.62.0
+      uses: ruby/setup-ruby@ebaea52cb20fea395b0904125276395e37183dac
       with:
         ruby-version: 3.0.0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/.github/workflows/macos.yml 
new/fzf-0.31.0/.github/workflows/macos.yml
--- old/fzf-0.30.0/.github/workflows/macos.yml  2022-04-04 16:01:43.000000000 
+0200
+++ new/fzf-0.31.0/.github/workflows/macos.yml  2022-07-21 15:46:34.000000000 
+0200
@@ -25,7 +25,7 @@
         go-version: 1.18
 
     - name: Setup Ruby
-      uses: ruby/setup-ruby@bd94d6a504586da892a5753afdd1480096ed30df # v1.62.0
+      uses: ruby/setup-ruby@ebaea52cb20fea395b0904125276395e37183dac
       with:
         ruby-version: 3.0.0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/BUILD.md new/fzf-0.31.0/BUILD.md
--- old/fzf-0.30.0/BUILD.md     2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/BUILD.md     2022-07-21 15:46:34.000000000 +0200
@@ -6,7 +6,7 @@
 
 ### Prerequisites
 
-- Go 1.13 or above
+- Go 1.17 or above
 
 ### Using Makefile
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/CHANGELOG.md new/fzf-0.31.0/CHANGELOG.md
--- old/fzf-0.30.0/CHANGELOG.md 2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/CHANGELOG.md 2022-07-21 15:46:34.000000000 +0200
@@ -1,6 +1,26 @@
 CHANGELOG
 =========
 
+0.31.0
+------
+- Added support for an alternative preview window layout that is activated
+  when the size of the preview window is smaller than a certain threshold.
+  ```sh
+  # If the width of the preview window is smaller than 50 columns,
+  # it will be displayed above the search window.
+  fzf --preview 'cat {}' --preview-window 
'right,50%,border-left,<50(up,30%,border-bottom)'
+
+  # Or you can just hide it like so
+  fzf --preview 'cat {}' --preview-window '<50(hidden)'
+  ```
+- fzf now uses SGR mouse mode to properly support mouse on larger terminals
+- You can now use characters that do not satisfy `unicode.IsGraphic` constraint
+  for `--marker`, `--pointer`, and `--ellipsis`. Allows Nerd Fonts and stuff.
+  Use at your own risk.
+- Bug fixes and improvements
+- Shell extension
+    - `kill` completion now requires trigger sequence (`**`) for consistency
+
 0.30.0
 ------
 - Fixed cursor flickering over the screen by hiding it during rendering
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/Makefile new/fzf-0.31.0/Makefile
--- old/fzf-0.30.0/Makefile     2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/Makefile     2022-07-21 15:46:34.000000000 +0200
@@ -35,6 +35,7 @@
 BINARYARM8     := fzf-$(GOOS)_arm8
 BINARYPPC64LE  := fzf-$(GOOS)_ppc64le
 BINARYRISCV64  := fzf-$(GOOS)_riscv64
+BINARYLOONG64  := fzf-$(GOOS)_loong64
 
 # https://en.wikipedia.org/wiki/Uname
 UNAME_M := $(shell uname -m)
@@ -62,6 +63,8 @@
        BINARY := $(BINARYPPC64LE)
 else ifeq ($(UNAME_M),riscv64)
        BINARY := $(BINARYRISCV64)
+else ifeq ($(UNAME_M),loongarch64)
+       BINARY := $(BINARYLOONG64)
 else
 $(error Build on $(UNAME_M) is not supported, yet.)
 endif
@@ -148,6 +151,9 @@
 target/$(BINARYRISCV64): $(SOURCES)
        GOARCH=riscv64 $(GO) build $(BUILD_FLAGS) -o $@
 
+target/$(BINARYLOONG64): $(SOURCES)
+       GOARCH=loong64 $(GO) build $(BUILD_FLAGS) -o $@
+
 bin/fzf: target/$(BINARY) | bin
        cp -f target/$(BINARY) bin/fzf
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/README.md new/fzf-0.31.0/README.md
--- old/fzf-0.30.0/README.md    2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/README.md    2022-07-21 15:46:34.000000000 +0200
@@ -382,12 +382,11 @@
 
 #### Process IDs
 
-Fuzzy completion for PIDs is provided for kill command. In this case,
-there is no trigger sequence; just press the tab key after the kill command.
+Fuzzy completion for PIDs is provided for kill command.
 
 ```sh
 # Can select multiple processes with <TAB> or <Shift-TAB> keys
-kill -9 <TAB>
+kill -9 **<TAB>
 ```
 
 #### Host names
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/go.mod new/fzf-0.31.0/go.mod
--- old/fzf-0.30.0/go.mod       2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/go.mod       2022-07-21 15:46:34.000000000 +0200
@@ -2,16 +2,20 @@
 
 require (
        github.com/gdamore/tcell v1.4.0
-       github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
        github.com/mattn/go-isatty v0.0.14
        github.com/mattn/go-runewidth v0.0.13
        github.com/mattn/go-shellwords v1.0.12
        github.com/rivo/uniseg v0.2.0
        github.com/saracen/walker v0.1.2
+       golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12
+       golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
+)
+
+require (
+       github.com/gdamore/encoding v1.0.0 // indirect
+       github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
        golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
-       golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c
-       golang.org/x/term v0.0.0-20210317153231-de623e64d2a6
-       golang.org/x/text v0.3.6 // indirect
+       golang.org/x/text v0.3.7 // indirect
 )
 
-go 1.13
+go 1.17
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/go.sum new/fzf-0.31.0/go.sum
--- old/fzf-0.30.0/go.sum       2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/go.sum       2022-07-21 15:46:34.000000000 +0200
@@ -20,12 +20,13 @@
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c 
h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c 
h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/term v0.0.0-20210317153231-de623e64d2a6 
h1:EC6+IGYTjPpRfv9a2b/6Puw0W+hLtAhkV1tPsXhutqs=
-golang.org/x/term v0.0.0-20210317153231-de623e64d2a6/go.mod 
h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12 
h1:QyVthZKMsyaQwBTJE04jdNN0Pp5Fn9Qga0mrgxyERQM=
+golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 
h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod 
h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/install new/fzf-0.31.0/install
--- old/fzf-0.30.0/install      2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/install      2022-07-21 15:46:34.000000000 +0200
@@ -2,7 +2,7 @@
 
 set -u
 
-version=0.30.0
+version=0.31.0
 auto_completion=
 key_bindings=
 update_config=2
@@ -256,7 +256,7 @@
 # Setup fzf
 # ---------
 if [[ ! "\$PATH" == *$fzf_base_esc/bin* ]]; then
-  export PATH="\${PATH:+\${PATH}:}$fzf_base/bin"
+  PATH="\${PATH:+\${PATH}:}$fzf_base/bin"
 fi
 
 # Auto-completion
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/install.ps1 new/fzf-0.31.0/install.ps1
--- old/fzf-0.30.0/install.ps1  2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/install.ps1  2022-07-21 15:46:34.000000000 +0200
@@ -1,4 +1,4 @@
-$version="0.30.0"
+$version="0.31.0"
 
 $fzf_base=Split-Path -Parent $MyInvocation.MyCommand.Definition
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/main.go new/fzf-0.31.0/main.go
--- old/fzf-0.30.0/main.go      2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/main.go      2022-07-21 15:46:34.000000000 +0200
@@ -5,7 +5,7 @@
        "github.com/junegunn/fzf/src/protector"
 )
 
-var version string = "0.30"
+var version string = "0.31"
 var revision string = "devel"
 
 func main() {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/man/man1/fzf-tmux.1 
new/fzf-0.31.0/man/man1/fzf-tmux.1
--- old/fzf-0.30.0/man/man1/fzf-tmux.1  2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/man/man1/fzf-tmux.1  2022-07-21 15:46:34.000000000 +0200
@@ -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 "Apr 2022" "fzf 0.30.0" "fzf-tmux - open fzf in tmux split pane"
+.TH fzf-tmux 1 "Jul 2022" "fzf 0.31.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.30.0/man/man1/fzf.1 
new/fzf-0.31.0/man/man1/fzf.1
--- old/fzf-0.30.0/man/man1/fzf.1       2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/man/man1/fzf.1       2022-07-21 15:46:34.000000000 +0200
@@ -21,7 +21,7 @@
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 ..
-.TH fzf 1 "Apr 2022" "fzf 0.30.0" "fzf - a command-line fuzzy finder"
+.TH fzf 1 "Jul 2022" "fzf 0.31.0" "fzf - a command-line fuzzy finder"
 
 .SH NAME
 fzf - a command-line fuzzy finder
@@ -450,7 +450,7 @@
      \fB# Press CTRL-A to select 100K items and see the sum of all the numbers.
      # This won't work properly without 'f' flag due to ARG_MAX limit.
      seq 100000 | fzf --multi --bind ctrl-a:select-all \\
-                      --preview "awk '{sum+=\$1} END {print sum}' {+f}"\fR
+                      --preview "awk '{sum+=\\$1} END {print sum}' {+f}"\fR
 
 Note that you can escape a placeholder pattern by prepending a backslash.
 
@@ -470,7 +470,7 @@
       done'\fR
 .RE
 .TP
-.BI "--preview-window=" 
"[POSITION][,SIZE[%]][,border-BORDER_OPT][,[no]wrap][,[no]follow][,[no]cycle][,[no]hidden][,+SCROLL[OFFSETS][/DENOM]][,~HEADER_LINES][,default]"
+.BI "--preview-window=" 
"[POSITION][,SIZE[%]][,border-BORDER_OPT][,[no]wrap][,[no]follow][,[no]cycle][,[no]hidden][,+SCROLL[OFFSETS][/DENOM]][,~HEADER_LINES][,default][,<SIZE_THRESHOLD(ALTERNATIVE_LAYOUT)]"
 
 .RS
 .B POSITION: (default: right)
@@ -488,9 +488,9 @@
 execute the command in the background.
 
 * Long lines are truncated by default. Line wrap can be enabled with
-\fB:wrap\fR flag.
+\fBwrap\fR flag.
 
-* Preview window will automatically scroll to the bottom when \fB:follow\fR
+* Preview window will automatically scroll to the bottom when \fBfollow\fR
 flag is set, similarly to how \fBtail -f\fR works.
 
 .RS
@@ -502,7 +502,7 @@
       done'\fR
 .RE
 
-* Cyclic scrolling is enabled with \fB:cycle\fR flag.
+* Cyclic scrolling is enabled with \fBcycle\fR flag.
 
 * To change the style of the border of the preview window, specify one of
 the options for \fB--border\fR with \fBborder-\fR prefix.
@@ -552,6 +552,15 @@
      fzf --preview 'bat --style=full --color=always {}' --preview-window 
'~3'\fR
 .RE
 
+* You can specify an alternative set of options that are used only when the 
size
+  of the preview window is below a certain threshold. Note that only one
+  alternative layout is allowed.
+
+.RS
+e.g.
+      \fBfzf --preview 'cat {}' --preview-window 
'right,border-left,<30(up,30%,border-bottom)'\fR
+.RE
+
 .SS Scripting
 .TP
 .BI "-q, --query=" "STR"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/plugin/fzf.vim 
new/fzf-0.31.0/plugin/fzf.vim
--- old/fzf-0.30.0/plugin/fzf.vim       2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/plugin/fzf.vim       2022-07-21 15:46:34.000000000 +0200
@@ -96,7 +96,12 @@
   if shell =~# 'cmd.exe$'
     return s:shellesc_cmd(a:arg)
   endif
-  return s:fzf_call('shellescape', a:arg)
+  try
+    let [shell, &shell] = [&shell, shell]
+    return s:fzf_call('shellescape', a:arg)
+  finally
+    let [shell, &shell] = [&shell, shell]
+  endtry
 endfunction
 
 function! s:fzf_getcwd()
@@ -159,7 +164,7 @@
   if has_key(s:versions, a:bin)
     return s:versions[a:bin]
   end
-  let command = a:bin . ' --version --no-height'
+  let command = fzf#shellescape(a:bin) . ' --version --no-height'
   let output = systemlist(command)
   if v:shell_error || empty(output)
     return ''
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/shell/completion.bash 
new/fzf-0.31.0/shell/completion.bash
--- old/fzf-0.30.0/shell/completion.bash        2022-04-04 16:01:43.000000000 
+0200
+++ new/fzf-0.31.0/shell/completion.bash        2022-07-21 15:46:34.000000000 
+0200
@@ -260,14 +260,6 @@
 }
 
 _fzf_complete_kill() {
-  local trigger=${FZF_COMPLETION_TRIGGER-'**'}
-  local cur="${COMP_WORDS[COMP_CWORD]}"
-  if [[ -z "$cur" ]]; then
-    COMP_WORDS[$COMP_CWORD]=$trigger
-  elif [[ "$cur" != *"$trigger" ]]; then
-    return 1
-  fi
-
   _fzf_proc_completion "$@"
 }
 
@@ -304,6 +296,10 @@
 
 # fzf options
 complete -o default -F _fzf_opts_completion fzf
+# fzf-tmux is a thin fzf wrapper that has only a few more options than fzf
+# itself. As a quick improvement we take fzf's completion. Adding the few extra
+# fzf-tmux specific options (like `-w WIDTH`) are left as a future patch.
+complete -o default -F _fzf_opts_completion fzf-tmux
 
 d_cmds="${FZF_COMPLETION_DIR_COMMANDS:-cd pushd rmdir}"
 a_cmds="
@@ -348,9 +344,6 @@
   __fzf_defc "$cmd" _fzf_dir_completion "-o nospace -o dirnames"
 done
 
-# Kill completion (supports empty completion trigger)
-complete -F _fzf_complete_kill -o default -o bashdefault kill
-
 unset cmd d_cmds a_cmds
 
 _fzf_setup_completion() {
@@ -373,9 +366,10 @@
   done
 }
 
-# Environment variables / Aliases / Hosts
+# Environment variables / Aliases / Hosts / Process
 _fzf_setup_completion 'var'   export unset
 _fzf_setup_completion 'alias' unalias
 _fzf_setup_completion 'host'  ssh telnet
+_fzf_setup_completion 'proc'  kill
 
 fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/shell/completion.zsh 
new/fzf-0.31.0/shell/completion.zsh
--- old/fzf-0.30.0/shell/completion.zsh 2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/shell/completion.zsh 2022-07-21 15:46:34.000000000 +0200
@@ -285,12 +285,6 @@
 
   lbuf=$LBUFFER
   tail=${LBUFFER:$(( ${#LBUFFER} - ${#trigger} ))}
-  # Kill completion (do not require trigger sequence)
-  if [ "$cmd" = kill -a ${LBUFFER[-1]} = ' ' ]; then
-    tail=$trigger
-    tokens+=$trigger
-    lbuf="$lbuf$trigger"
-  fi
 
   # Trigger sequence given
   if [ ${#tokens} -gt 1 -a "$tail" = "$trigger" ]; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/shell/key-bindings.bash 
new/fzf-0.31.0/shell/key-bindings.bash
--- old/fzf-0.30.0/shell/key-bindings.bash      2022-04-04 16:01:43.000000000 
+0200
+++ new/fzf-0.31.0/shell/key-bindings.bash      2022-07-21 15:46:34.000000000 
+0200
@@ -14,14 +14,17 @@
 # Key bindings
 # ------------
 __fzf_select__() {
-  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 \
+  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 | cut -b3-"}"
-  eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse 
--bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS" $(__fzfcmd) -m "$@" | 
while read -r item; do
-    printf '%q ' "$item"
-  done
-  echo
+  opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore --reverse 
$FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS -m"
+  eval "$cmd" |
+    FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) "$@" |
+    while read -r item; do
+      printf '%q ' "$item"  # escape special chars
+    done
 }
 
 if [[ $- =~ i ]]; then
@@ -32,24 +35,27 @@
 }
 
 fzf-file-widget() {
-  local selected="$(__fzf_select__)"
+  local selected="$(__fzf_select__ "$@")"
   
READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}$selected${READLINE_LINE:$READLINE_POINT}"
   READLINE_POINT=$(( READLINE_POINT + ${#selected} ))
 }
 
 __fzf_cd__() {
-  local cmd dir
+  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 | cut -b3-"}"
-  dir=$(eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} 
--reverse --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_ALT_C_OPTS" $(__fzfcmd) 
+m) && printf 'cd -- %q' "$dir"
+  opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore --reverse 
$FZF_DEFAULT_OPTS $FZF_ALT_C_OPTS +m"
+  dir=$(eval "$cmd" | FZF_DEFAULT_OPTS="$opts" $(__fzfcmd)) && printf 'builtin 
cd -- %q' "$dir"
 }
 
 __fzf_history__() {
-  local output
+  local output opts script
+  opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore 
$FZF_DEFAULT_OPTS -n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort 
$FZF_CTRL_R_OPTS +m --read0"
+  script='BEGIN { getc; $/ = "\n\t"; $HISTCOUNT = $ENV{last_hist} + 1 } s/^[ 
*]//; print $HISTCOUNT - $. . "\t$_" if !$seen{$_}++'
   output=$(
     builtin fc -lnr -2147483648 |
-      last_hist=$(HISTTIMEFORMAT='' builtin history 1) perl -n -l0 -e 'BEGIN { 
getc; $/ = "\n\t"; $HISTCMD = $ENV{last_hist} + 1 } s/^[ *]//; print $HISTCMD - 
$. . "\t$_" if !$seen{$_}++' |
-      FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} $FZF_DEFAULT_OPTS 
-n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort,ctrl-z:ignore 
$FZF_CTRL_R_OPTS +m --read0" $(__fzfcmd) --query "$READLINE_LINE"
+      last_hist=$(HISTTIMEFORMAT='' builtin history 1) perl -n -l0 -e 
"$script" |
+      FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) --query "$READLINE_LINE"
   ) || return
   READLINE_LINE=${output#*$'\t'}
   if [[ -z "$READLINE_POINT" ]]; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/shell/key-bindings.fish 
new/fzf-0.31.0/shell/key-bindings.fish
--- old/fzf-0.30.0/shell/key-bindings.fish      2022-04-04 16:01:43.000000000 
+0200
+++ new/fzf-0.31.0/shell/key-bindings.fish      2022-07-21 15:46:34.000000000 
+0200
@@ -87,7 +87,7 @@
       eval "$FZF_ALT_C_COMMAND | "(__fzfcmd)' +m --query "'$fzf_query'"' | 
read -l result
 
       if [ -n "$result" ]
-        cd -- $result
+        builtin cd -- $result
 
         # Remove last token from commandline.
         commandline -t ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/shell/key-bindings.zsh 
new/fzf-0.31.0/shell/key-bindings.zsh
--- old/fzf-0.30.0/shell/key-bindings.zsh       2022-04-04 16:01:43.000000000 
+0200
+++ new/fzf-0.31.0/shell/key-bindings.zsh       2022-07-21 15:46:34.000000000 
+0200
@@ -81,7 +81,7 @@
     return 0
   fi
   zle push-line # Clear buffer. Auto-restored on next prompt.
-  BUFFER="cd -- ${(q)dir}"
+  BUFFER="builtin cd -- ${(q)dir}"
   zle accept-line
   local ret=$?
   unset dir # ensure this doesn't end up appearing in prompt expansion
@@ -97,7 +97,7 @@
 fzf-history-widget() {
   local selected num
   setopt localoptions noglobsubst noposixbuiltins pipefail no_aliases 2> 
/dev/null
-  selected=( $(fc -rl 1 | perl -ne 'print if !$seen{(/^\s*[0-9]+\**\s+(.*)/, 
$1)}++' |
+  selected=( $(fc -rl 1 | awk '{ cmd=$0; sub(/^\s*[0-9]+\**\s+/, "", cmd); if 
(!seen[cmd]++) print $0 }' |
     FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} $FZF_DEFAULT_OPTS 
-n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort,ctrl-z:ignore 
$FZF_CTRL_R_OPTS --query=${(qqq)LBUFFER} +m" $(__fzfcmd)) )
   local ret=$?
   if [ -n "$selected" ]; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/src/options.go 
new/fzf-0.31.0/src/options.go
--- old/fzf-0.30.0/src/options.go       2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/src/options.go       2022-07-21 15:46:34.000000000 +0200
@@ -89,7 +89,7 @@
                           [,[no]wrap][,[no]cycle][,[no]follow][,[no]hidden]
                           [,border-BORDER_OPT]
                           [,+SCROLL[OFFSETS][/DENOM]][,~HEADER_LINES]
-                          [,default]
+                          [,default][,<SIZE_THRESHOLD(ALTERNATIVE_LAYOUT)]
 
   Scripting
     -q, --query=STR       Start the finder with the given query
@@ -175,10 +175,14 @@
        follow      bool
        border      tui.BorderShape
        headerLines int
+       threshold   int
+       alternative *previewOpts
 }
 
 func (a previewOpts) sameLayout(b previewOpts) bool {
-       return a.size == b.size && a.position == b.position && a.border == 
b.border && a.hidden == b.hidden
+       return a.size == b.size && a.position == b.position && a.border == 
b.border && a.hidden == b.hidden && a.threshold == b.threshold &&
+               (a.alternative != nil && b.alternative != nil && 
a.alternative.sameLayout(*b.alternative) ||
+                       a.alternative == nil && b.alternative == nil)
 }
 
 func (a previewOpts) sameContentLayout(b previewOpts) bool {
@@ -247,7 +251,7 @@
 }
 
 func defaultPreviewOpts(command string) previewOpts {
-       return previewOpts{command, posRight, sizeSpec{50, true}, "", false, 
false, false, false, tui.BorderRounded, 0}
+       return previewOpts{command, posRight, sizeSpec{50, true}, "", false, 
false, false, false, tui.BorderRounded, 0, 0, nil}
 }
 
 func defaultOptions() *Options {
@@ -1169,12 +1173,19 @@
 }
 
 func parsePreviewWindow(opts *previewOpts, input string) {
-       delimRegex := regexp.MustCompile("[:,]") // : for backward compatibility
+       tokenRegex := 
regexp.MustCompile(`[:,]*(<([1-9][0-9]*)\(([^)<]+)\)|[^,:]+)`)
        sizeRegex := regexp.MustCompile("^[0-9]+%?$")
        offsetRegex := 
regexp.MustCompile(`^(\+{-?[0-9]+})?([+-][0-9]+)*(-?/[1-9][0-9]*)?$`)
        headerRegex := regexp.MustCompile("^~(0|[1-9][0-9]*)$")
-       tokens := delimRegex.Split(input, -1)
-       for _, token := range tokens {
+       tokens := tokenRegex.FindAllStringSubmatch(input, -1)
+       var alternative string
+       for _, match := range tokens {
+               if len(match[2]) > 0 {
+                       opts.threshold = atoi(match[2])
+                       alternative = match[3]
+                       continue
+               }
+               token := match[1]
                switch token {
                case "":
                case "default":
@@ -1233,6 +1244,13 @@
                        }
                }
        }
+       if len(alternative) > 0 {
+               alternativeOpts := *opts
+               opts.alternative = &alternativeOpts
+               opts.alternative.hidden = false
+               opts.alternative.alternative = nil
+               parsePreviewWindow(opts.alternative, alternative)
+       }
 }
 
 func parseMargin(opt string, margin string) [4]sizeSpec {
@@ -1289,7 +1307,6 @@
        validateJumpLabels := false
        validatePointer := false
        validateMarker := false
-       validateEllipsis := false
        for i := 0; i < len(allArgs); i++ {
                arg := allArgs[i]
                switch arg {
@@ -1477,7 +1494,6 @@
                        opts.HeaderFirst = false
                case "--ellipsis":
                        opts.Ellipsis = nextString(allArgs, &i, "ellipsis 
string required")
-                       validateEllipsis = true
                case "--preview":
                        opts.Preview.command = nextString(allArgs, &i, "preview 
command required")
                case "--no-preview":
@@ -1577,7 +1593,6 @@
                                opts.HeaderLines = atoi(value)
                        } else if match, value := optString(arg, 
"--ellipsis="); match {
                                opts.Ellipsis = value
-                               validateEllipsis = true
                        } else if match, value := optString(arg, "--preview="); 
match {
                                opts.Preview.command = value
                        } else if match, value := optString(arg, 
"--preview-window="); match {
@@ -1640,25 +1655,12 @@
                        errorExit(err.Error())
                }
        }
-
-       if validateEllipsis {
-               for _, r := range opts.Ellipsis {
-                       if !unicode.IsGraphic(r) {
-                               errorExit("invalid character in ellipsis")
-                       }
-               }
-       }
 }
 
 func validateSign(sign string, signOptName string) error {
        if sign == "" {
                return fmt.Errorf("%v cannot be empty", signOptName)
        }
-       for _, r := range sign {
-               if !unicode.IsGraphic(r) {
-                       return fmt.Errorf("invalid character in %v", 
signOptName)
-               }
-       }
        if runewidth.StringWidth(sign) > 2 {
                return fmt.Errorf("%v display width should be up to 2", 
signOptName)
        }
@@ -1744,6 +1746,13 @@
 func ParseOptions() *Options {
        opts := defaultOptions()
 
+       for _, arg := range os.Args[1:] {
+               if arg == "--version" {
+                       opts.Version = true
+                       return opts
+               }
+       }
+
        // Options from Env var
        words, _ := shellwords.Parse(os.Getenv("FZF_DEFAULT_OPTS"))
        if len(words) > 0 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/src/options_test.go 
new/fzf-0.31.0/src/options_test.go
--- old/fzf-0.30.0/src/options_test.go  2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/src/options_test.go  2022-07-21 15:46:34.000000000 +0200
@@ -65,6 +65,19 @@
        }
 }
 
+func TestDelimiterRegexRegexCaret(t *testing.T) {
+       delim := delimiterRegexp(`(^\s*|\s+)`)
+       tokens := Tokenize("foo  bar baz", delim)
+       if delim.str != nil ||
+               len(tokens) != 4 ||
+               tokens[0].text.ToString() != "" ||
+               tokens[1].text.ToString() != "foo  " ||
+               tokens[2].text.ToString() != "bar " ||
+               tokens[3].text.ToString() != "baz" {
+               t.Errorf("%s %d", tokens, len(tokens))
+       }
+}
+
 func TestSplitNth(t *testing.T) {
        {
                ranges := splitNth("..")
@@ -440,8 +453,6 @@
                {"????", true},
                {"", false},
                {">>>", false},
-               {"\n", false},
-               {"\t", false},
        }
 
        for _, testCase := range testCases {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/src/terminal.go 
new/fzf-0.31.0/src/terminal.go
--- old/fzf-0.30.0/src/terminal.go      2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/src/terminal.go      2022-07-21 15:46:34.000000000 +0200
@@ -819,12 +819,15 @@
        }
        if t.window != nil {
                t.window.Close()
+               t.window = nil
        }
        if t.pborder != nil {
                t.pborder.Close()
+               t.pborder = nil
        }
        if t.pwindow != nil {
                t.pwindow.Close()
+               t.pwindow = nil
        }
        // Reset preview version so that full redraw occurs
        t.previewed.version = 0
@@ -869,76 +872,97 @@
        width = screenWidth - marginInt[1] - marginInt[3]
        height = screenHeight - marginInt[0] - marginInt[2]
 
+       // Set up preview window
        noBorder := tui.MakeBorderStyle(tui.BorderNone, t.unicode)
        if previewVisible {
-               createPreviewWindow := func(y int, x int, w int, h int) {
-                       pwidth := w
-                       pheight := h
-                       var previewBorder tui.BorderStyle
-                       if t.previewOpts.border == tui.BorderNone {
-                               previewBorder = tui.MakeTransparentBorder()
-                       } else {
-                               previewBorder = 
tui.MakeBorderStyle(t.previewOpts.border, t.unicode)
+               var resizePreviewWindows func(previewOpts previewOpts)
+               resizePreviewWindows = func(previewOpts previewOpts) {
+                       hasThreshold := previewOpts.threshold > 0 && 
previewOpts.alternative != nil
+                       createPreviewWindow := func(y int, x int, w int, h int) 
{
+                               pwidth := w
+                               pheight := h
+                               var previewBorder tui.BorderStyle
+                               if previewOpts.border == tui.BorderNone {
+                                       previewBorder = 
tui.MakeTransparentBorder()
+                               } else {
+                                       previewBorder = 
tui.MakeBorderStyle(previewOpts.border, t.unicode)
+                               }
+                               t.pborder = t.tui.NewWindow(y, x, w, h, true, 
previewBorder)
+                               switch previewOpts.border {
+                               case tui.BorderSharp, tui.BorderRounded:
+                                       pwidth -= 4
+                                       pheight -= 2
+                                       x += 2
+                                       y += 1
+                               case tui.BorderLeft:
+                                       pwidth -= 2
+                                       x += 2
+                               case tui.BorderRight:
+                                       pwidth -= 2
+                               case tui.BorderTop:
+                                       pheight -= 1
+                                       y += 1
+                               case tui.BorderBottom:
+                                       pheight -= 1
+                               case tui.BorderHorizontal:
+                                       pheight -= 2
+                                       y += 1
+                               case tui.BorderVertical:
+                                       pwidth -= 4
+                                       x += 2
+                               }
+                               t.pwindow = t.tui.NewWindow(y, x, pwidth, 
pheight, true, noBorder)
                        }
-                       t.pborder = t.tui.NewWindow(y, x, w, h, true, 
previewBorder)
-                       switch t.previewOpts.border {
-                       case tui.BorderSharp, tui.BorderRounded:
-                               pwidth -= 4
-                               pheight -= 2
-                               x += 2
-                               y += 1
-                       case tui.BorderLeft:
-                               pwidth -= 2
-                               x += 2
-                       case tui.BorderRight:
-                               pwidth -= 2
-                       case tui.BorderTop:
-                               pheight -= 1
-                               y += 1
-                       case tui.BorderBottom:
-                               pheight -= 1
-                       case tui.BorderHorizontal:
-                               pheight -= 2
-                               y += 1
-                       case tui.BorderVertical:
-                               pwidth -= 4
-                               x += 2
+                       verticalPad := 2
+                       minPreviewHeight := 3
+                       switch previewOpts.border {
+                       case tui.BorderNone, tui.BorderVertical, 
tui.BorderLeft, tui.BorderRight:
+                               verticalPad = 0
+                               minPreviewHeight = 1
+                       case tui.BorderTop, tui.BorderBottom:
+                               verticalPad = 1
+                               minPreviewHeight = 2
+                       }
+                       switch previewOpts.position {
+                       case posUp, posDown:
+                               pheight := calculateSize(height, 
previewOpts.size, minHeight, minPreviewHeight, verticalPad)
+                               if hasThreshold && pheight < 
previewOpts.threshold {
+                                       if !previewOpts.alternative.hidden {
+                                               
resizePreviewWindows(*previewOpts.alternative)
+                                       }
+                                       return
+                               }
+                               if previewOpts.position == posUp {
+                                       t.window = t.tui.NewWindow(
+                                               marginInt[0]+pheight, 
marginInt[3], width, height-pheight, false, noBorder)
+                                       createPreviewWindow(marginInt[0], 
marginInt[3], width, pheight)
+                               } else {
+                                       t.window = t.tui.NewWindow(
+                                               marginInt[0], marginInt[3], 
width, height-pheight, false, noBorder)
+                                       
createPreviewWindow(marginInt[0]+height-pheight, marginInt[3], width, pheight)
+                               }
+                       case posLeft, posRight:
+                               pwidth := calculateSize(width, 
previewOpts.size, minWidth, 5, 4)
+                               if hasThreshold && pwidth < 
previewOpts.threshold {
+                                       if !previewOpts.alternative.hidden {
+                                               
resizePreviewWindows(*previewOpts.alternative)
+                                       }
+                                       return
+                               }
+                               if previewOpts.position == posLeft {
+                                       t.window = t.tui.NewWindow(
+                                               marginInt[0], 
marginInt[3]+pwidth, width-pwidth, height, false, noBorder)
+                                       createPreviewWindow(marginInt[0], 
marginInt[3], pwidth, height)
+                               } else {
+                                       t.window = t.tui.NewWindow(
+                                               marginInt[0], marginInt[3], 
width-pwidth, height, false, noBorder)
+                                       createPreviewWindow(marginInt[0], 
marginInt[3]+width-pwidth, pwidth, height)
+                               }
                        }
-                       t.pwindow = t.tui.NewWindow(y, x, pwidth, pheight, 
true, noBorder)
-               }
-               verticalPad := 2
-               minPreviewHeight := 3
-               switch t.previewOpts.border {
-               case tui.BorderNone, tui.BorderVertical, tui.BorderLeft, 
tui.BorderRight:
-                       verticalPad = 0
-                       minPreviewHeight = 1
-               case tui.BorderTop, tui.BorderBottom:
-                       verticalPad = 1
-                       minPreviewHeight = 2
-               }
-               switch t.previewOpts.position {
-               case posUp:
-                       pheight := calculateSize(height, t.previewOpts.size, 
minHeight, minPreviewHeight, verticalPad)
-                       t.window = t.tui.NewWindow(
-                               marginInt[0]+pheight, marginInt[3], width, 
height-pheight, false, noBorder)
-                       createPreviewWindow(marginInt[0], marginInt[3], width, 
pheight)
-               case posDown:
-                       pheight := calculateSize(height, t.previewOpts.size, 
minHeight, minPreviewHeight, verticalPad)
-                       t.window = t.tui.NewWindow(
-                               marginInt[0], marginInt[3], width, 
height-pheight, false, noBorder)
-                       createPreviewWindow(marginInt[0]+height-pheight, 
marginInt[3], width, pheight)
-               case posLeft:
-                       pwidth := calculateSize(width, t.previewOpts.size, 
minWidth, 5, 4)
-                       t.window = t.tui.NewWindow(
-                               marginInt[0], marginInt[3]+pwidth, 
width-pwidth, height, false, noBorder)
-                       createPreviewWindow(marginInt[0], marginInt[3], pwidth, 
height)
-               case posRight:
-                       pwidth := calculateSize(width, t.previewOpts.size, 
minWidth, 5, 4)
-                       t.window = t.tui.NewWindow(
-                               marginInt[0], marginInt[3], width-pwidth, 
height, false, noBorder)
-                       createPreviewWindow(marginInt[0], 
marginInt[3]+width-pwidth, pwidth, height)
                }
-       } else {
+               resizePreviewWindows(t.previewOpts)
+       }
+       if t.window == nil {
                t.window = t.tui.NewWindow(
                        marginInt[0],
                        marginInt[3],
@@ -1417,6 +1441,7 @@
                line = strings.TrimSuffix(line, "\n")
                if lineNo >= height || t.pwindow.Y() == height-1 && 
t.pwindow.X() > 0 {
                        t.previewed.filled = true
+                       t.previewer.scrollable = true
                        break
                } else if lineNo >= 0 {
                        var fillRet tui.FillReturn
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/src/tokenizer.go 
new/fzf-0.31.0/src/tokenizer.go
--- old/fzf-0.30.0/src/tokenizer.go     2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/src/tokenizer.go     2022-07-21 15:46:34.000000000 +0200
@@ -156,14 +156,14 @@
        // FIXME performance
        var tokens []string
        if delimiter.regex != nil {
-               for len(text) > 0 {
-                       loc := delimiter.regex.FindStringIndex(text)
-                       if len(loc) < 2 {
-                               loc = []int{0, len(text)}
-                       }
-                       last := util.Max(loc[1], 1)
-                       tokens = append(tokens, text[:last])
-                       text = text[last:]
+               locs := delimiter.regex.FindAllStringIndex(text, -1)
+               begin := 0
+               for _, loc := range locs {
+                       tokens = append(tokens, text[begin:loc[1]])
+                       begin = loc[1]
+               }
+               if begin < len(text) {
+                       tokens = append(tokens, text[begin:])
                }
        }
        return withPrefixLengths(tokens, 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/src/tui/light.go 
new/fzf-0.31.0/src/tui/light.go
--- old/fzf-0.30.0/src/tui/light.go     2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/src/tui/light.go     2022-07-21 15:46:34.000000000 +0200
@@ -176,6 +176,7 @@
 
        if r.mouse {
                r.csi("?1000h")
+               r.csi("?1006h")
        }
        r.csi(fmt.Sprintf("%dA", r.MaxY()-1))
        r.csi("G")
@@ -378,7 +379,7 @@
                        return Event{Home, 0, nil}
                case 'F':
                        return Event{End, 0, nil}
-               case 'M':
+               case '<':
                        return r.mouseSequence(sz)
                case 'P':
                        return Event{F1, 0, nil}
@@ -519,47 +520,73 @@
        return Event{Invalid, 0, nil}
 }
 
+// https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Mouse-Tracking
 func (r *LightRenderer) mouseSequence(sz *int) Event {
-       if len(r.buffer) < 6 || !r.mouse {
+       // "\e[<0;0;0M"
+       if len(r.buffer) < 9 || !r.mouse {
                return Event{Invalid, 0, nil}
        }
-       *sz = 6
-       switch r.buffer[3] {
-       case 32, 34, 36, 40, 48, // mouse-down / shift / cmd / ctrl
-               35, 39, 43, 51: // mouse-up / shift / cmd / ctrl
-               mod := r.buffer[3] >= 36
-               left := r.buffer[3] == 32
-               down := r.buffer[3]%2 == 0
-               x := int(r.buffer[4] - 33)
-               y := int(r.buffer[5]-33) - r.yoffset
-               double := false
-               if down {
-                       now := time.Now()
-                       if !left { // Right double click is not allowed
-                               r.clickY = []int{}
-                       } else if now.Sub(r.prevDownTime) < doubleClickDuration 
{
-                               r.clickY = append(r.clickY, y)
-                       } else {
-                               r.clickY = []int{y}
-                       }
-                       r.prevDownTime = now
+
+       rest := r.buffer[*sz:]
+       end := bytes.IndexAny(rest, "mM")
+       if end == -1 {
+               return Event{Invalid, 0, nil}
+       }
+
+       elems := strings.SplitN(string(rest[:end]), ";", 3)
+       if len(elems) != 3 {
+               return Event{Invalid, 0, nil}
+       }
+
+       t := atoi(elems[0], -1)
+       x := atoi(elems[1], -1) - 1
+       y := atoi(elems[2], -1) - 1
+       if t < 0 || x < 0 || y < 0 {
+               return Event{Invalid, 0, nil}
+       }
+       *sz += end + 1
+
+       down := rest[end] == 'M'
+
+       scroll := 0
+       if t >= 64 {
+               t -= 64
+               if t&0b1 == 1 {
+                       scroll = -1
                } else {
-                       if len(r.clickY) > 1 && r.clickY[0] == r.clickY[1] &&
-                               time.Since(r.prevDownTime) < 
doubleClickDuration {
-                               double = true
-                       }
+                       scroll = 1
                }
+       }
+
+       // middle := t & 0b1
+       left := t&0b11 == 0
 
-               return Event{Mouse, 0, &MouseEvent{y, x, 0, left, down, double, 
mod}}
-       case 96, 100, 104, 112, // scroll-up / shift / cmd / ctrl
-               97, 101, 105, 113: // scroll-down / shift / cmd / ctrl
-               mod := r.buffer[3] >= 100
-               s := 1 - int(r.buffer[3]%2)*2
-               x := int(r.buffer[4] - 33)
-               y := int(r.buffer[5]-33) - r.yoffset
-               return Event{Mouse, 0, &MouseEvent{y, x, s, false, false, 
false, mod}}
+       // shift := t & 0b100
+       // ctrl := t & 0b1000
+       mod := t&0b1100 > 0
+
+       if scroll != 0 {
+               return Event{Mouse, 0, &MouseEvent{y, x, scroll, false, false, 
false, mod}}
+       }
+
+       double := false
+       if down {
+               now := time.Now()
+               if !left { // Right double click is not allowed
+                       r.clickY = []int{}
+               } else if now.Sub(r.prevDownTime) < doubleClickDuration {
+                       r.clickY = append(r.clickY, y)
+               } else {
+                       r.clickY = []int{y}
+               }
+               r.prevDownTime = now
+       } else {
+               if len(r.clickY) > 1 && r.clickY[0] == r.clickY[1] &&
+                       time.Since(r.prevDownTime) < doubleClickDuration {
+                       double = true
+               }
        }
-       return Event{Invalid, 0, nil}
+       return Event{Mouse, 0, &MouseEvent{y, x, 0, left, down, double, mod}}
 }
 
 func (r *LightRenderer) smcup() {
@@ -597,6 +624,7 @@
                // It's highly likely that the offset we obtained at the 
beginning is
                // no longer correct, so we simply disable mouse input.
                r.csi("?1000l")
+               r.csi("?1006l")
                r.mouse = false
        }
 }
@@ -636,6 +664,7 @@
        }
        if r.mouse {
                r.csi("?1000l")
+               r.csi("?1006l")
        }
        r.flush()
        r.closePlatform()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/test/test_go.rb 
new/fzf-0.31.0/test/test_go.rb
--- old/fzf-0.30.0/test/test_go.rb      2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/test/test_go.rb      2022-07-21 15:46:34.000000000 +0200
@@ -2478,7 +2478,7 @@
     pid = lines[-1]&.split&.last
     tmux.prepare
     tmux.send_keys 'C-L'
-    tmux.send_keys 'kill ', :Tab
+    tmux.send_keys 'kill **', :Tab
     tmux.until { |lines| assert_operator lines.match_count, :>, 0 }
     tmux.send_keys 'sleep12345'
     tmux.until { |lines| assert lines.any_include?('sleep 12345') }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fzf-0.30.0/uninstall new/fzf-0.31.0/uninstall
--- old/fzf-0.30.0/uninstall    2022-04-04 16:01:43.000000000 +0200
+++ new/fzf-0.31.0/uninstall    2022-07-21 15:46:34.000000000 +0200
@@ -51,13 +51,8 @@
 }
 
 remove_line() {
-  src=$(readlink "$1")
-  if [ $? -eq 0 ]; then
-    echo "Remove from $1 ($src):"
-  else
-    src=$1
-    echo "Remove from $1:"
-  fi
+  src=$1
+  echo "Remove from $1:"
 
   shift
   line_no=1
@@ -75,8 +70,9 @@
     echo    "  - Line #$line_no: $content"
     [ "$content" = "$1" ] || ask "    - Remove?"
     if [ $? -eq 0 ]; then
-      awk -v n=$line_no 'NR == n {next} {print}' "$src" > "$src.bak" &&
-        mv "$src.bak" "$src" || break
+      temp=$(mktemp)
+      awk -v n=$line_no 'NR == n {next} {print}' "$src" > "$temp" &&
+        cat "$temp" > "$src" && rm -f "$temp" || break
       echo  "      - Removed"
     else
       echo  "      - Skipped"

++++++ vendor.tar.gz ++++++
++++ 27756 lines of diff (skipped)

Reply via email to