mirror of
https://github.com/junegunn/fzf.git
synced 2026-09-16 08:50:42 +08:00
[vim] Open fzf in a tmux or Zellij floating pane by default
The window fzf was started from stays visible, and can be used while fzf runs, which a popup inside Vim cannot offer. Only where the pane is not modal, so tmux 3.7 or above, or Zellij 0.44 or above with fzf 0.71.0 or above. A tmux popup from 3.3 to 3.6 cannot be left, and below 3.3 fzf goes through the fzf-tmux script, whose options are spelled differently. Both keep the window inside Vim. An explicit popup layout is unaffected and still works from 3.3. fzf checks tmux before Zellij, so tmux wins when both are set. g:fzf_layout still wins, so anyone who set it sees no change.
This commit is contained in:
@@ -102,9 +102,36 @@ Execute (fzf#run with dir option and autochdir when final cwd is same as dir):
|
||||
" Working directory changed due to &acd
|
||||
AssertEqual '/', getcwd()
|
||||
|
||||
Execute (Default layout):
|
||||
unlet! g:fzf_layout g:fzf_height
|
||||
let layout_keys = ['window', 'popup', 'tmux', 'up', 'down', 'left', 'right']
|
||||
|
||||
let opts = fzf#wrap('foobar')
|
||||
Log opts
|
||||
let found = filter(copy(layout_keys), 'has_key(opts, v:val)')
|
||||
AssertEqual 1, len(found)
|
||||
if found[0] ==# 'tmux'
|
||||
" Only where fzf opens a floating pane, which can be left while fzf runs
|
||||
Assert !empty($TMUX) || !empty($ZELLIJ)
|
||||
AssertEqual '90%,60%', opts.tmux
|
||||
elseif found[0] ==# 'window'
|
||||
AssertEqual 0.9, opts.window.width
|
||||
else
|
||||
" No popup support in this build
|
||||
AssertEqual '~40%', opts.down
|
||||
endif
|
||||
|
||||
" Fullscreen strips it, whichever it was
|
||||
let opts = fzf#wrap('foobar', {}, 1)
|
||||
Log opts
|
||||
AssertEqual [], filter(copy(layout_keys), 'has_key(opts, v:val)')
|
||||
|
||||
Execute (fzf#wrap):
|
||||
AssertThrows fzf#wrap({'foo': 'bar'})
|
||||
|
||||
" Pin the layout so the assertions do not depend on the environment
|
||||
let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } }
|
||||
|
||||
let opts = fzf#wrap('foobar')
|
||||
Log opts
|
||||
AssertEqual 0.9, opts.window.width
|
||||
|
||||
Reference in New Issue
Block a user