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)