mirror of
https://github.com/Llewellynvdm/fzf.git
synced 2024-11-10 15:50:56 +00:00
Fix #494 - _fzf_complete hangs on zsh when not using tmux pane
This commit is contained in:
parent
e57182c658
commit
a568120e42
@ -79,8 +79,15 @@ _fzf_dir_completion() {
|
|||||||
"" "/" ""
|
"" "/" ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_fzf_feed_fifo() (
|
||||||
|
rm -f "$fifo"
|
||||||
|
mkfifo "$fifo"
|
||||||
|
cat <&0 > "$fifo" &
|
||||||
|
)
|
||||||
|
|
||||||
_fzf_complete() {
|
_fzf_complete() {
|
||||||
local fzf_opts lbuf fzf matches post
|
local fifo fzf_opts lbuf fzf matches post
|
||||||
|
fifo="${TMPDIR:-/tmp}/fzf-complete-fifo-$$"
|
||||||
fzf_opts=$1
|
fzf_opts=$1
|
||||||
lbuf=$2
|
lbuf=$2
|
||||||
post="${funcstack[2]}_post"
|
post="${funcstack[2]}_post"
|
||||||
@ -88,11 +95,13 @@ _fzf_complete() {
|
|||||||
|
|
||||||
[ ${FZF_TMUX:-1} -eq 1 ] && fzf="fzf-tmux -d ${FZF_TMUX_HEIGHT:-40%}" || fzf="fzf"
|
[ ${FZF_TMUX:-1} -eq 1 ] && fzf="fzf-tmux -d ${FZF_TMUX_HEIGHT:-40%}" || fzf="fzf"
|
||||||
|
|
||||||
matches=$(cat | ${=fzf} ${=FZF_COMPLETION_OPTS} ${=fzf_opts} -q "${(Q)prefix}" | $post | tr '\n' ' ')
|
_fzf_feed_fifo "$fifo"
|
||||||
|
matches=$(cat "$fifo" | ${=fzf} ${=FZF_COMPLETION_OPTS} ${=fzf_opts} -q "${(Q)prefix}" | $post | tr '\n' ' ')
|
||||||
if [ -n "$matches" ]; then
|
if [ -n "$matches" ]; then
|
||||||
LBUFFER="$lbuf$matches"
|
LBUFFER="$lbuf$matches"
|
||||||
fi
|
fi
|
||||||
zle redisplay
|
zle redisplay
|
||||||
|
rm -f "$fifo"
|
||||||
}
|
}
|
||||||
|
|
||||||
_fzf_complete_telnet() {
|
_fzf_complete_telnet() {
|
||||||
|
@ -1140,7 +1140,7 @@ class TestGoFZF < TestBase
|
|||||||
private
|
private
|
||||||
def writelines path, lines
|
def writelines path, lines
|
||||||
File.unlink path while File.exists? path
|
File.unlink path while File.exists? path
|
||||||
File.open(path, 'w') { |f| f << lines.join($/) }
|
File.open(path, 'w') { |f| f << lines.join($/) + $/ }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1355,23 +1355,42 @@ module CompletionTest
|
|||||||
tmux.send_keys 'C-L'
|
tmux.send_keys 'C-L'
|
||||||
lines[-1] == "kill #{pid}"
|
lines[-1] == "kill #{pid}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_custom_completion
|
|
||||||
tmux.send_keys '_fzf_compgen_path() { echo "\$1"; seq 10; }', :Enter
|
|
||||||
tmux.prepare
|
|
||||||
tmux.send_keys 'ls /tmp/**', :Tab, pane: 0
|
|
||||||
tmux.until(1) { |lines| lines.item_count == 11 }
|
|
||||||
tmux.send_keys :BTab, :BTab, :BTab
|
|
||||||
tmux.until(1) { |lines| lines[-2].include? '(3)' }
|
|
||||||
tmux.send_keys :Enter
|
|
||||||
tmux.until do |lines|
|
|
||||||
tmux.send_keys 'C-L'
|
|
||||||
lines[-1] == "ls /tmp 1 2"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
ensure
|
ensure
|
||||||
Process.kill 'KILL', pid.to_i rescue nil if pid
|
Process.kill 'KILL', pid.to_i rescue nil if pid
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_custom_completion
|
||||||
|
tmux.send_keys '_fzf_compgen_path() { echo "\$1"; seq 10; }', :Enter
|
||||||
|
tmux.prepare
|
||||||
|
tmux.send_keys 'ls /tmp/**', :Tab, pane: 0
|
||||||
|
tmux.until(1) { |lines| lines.item_count == 11 }
|
||||||
|
tmux.send_keys :BTab, :BTab, :BTab
|
||||||
|
tmux.until(1) { |lines| lines[-2].include? '(3)' }
|
||||||
|
tmux.send_keys :Enter
|
||||||
|
tmux.until do |lines|
|
||||||
|
tmux.send_keys 'C-L'
|
||||||
|
lines[-1] == "ls /tmp 1 2"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_unset_completion
|
||||||
|
tmux.send_keys 'export FOO=BAR', :Enter
|
||||||
|
tmux.prepare
|
||||||
|
|
||||||
|
# Using tmux
|
||||||
|
tmux.send_keys 'unset FOO**', :Tab, pane: 0
|
||||||
|
tmux.until(1) { |lines| lines[-2].include? ' 1/' }
|
||||||
|
tmux.send_keys :Enter
|
||||||
|
tmux.until { |lines| lines[-1] == 'unset FOO' }
|
||||||
|
tmux.send_keys 'C-c'
|
||||||
|
|
||||||
|
# FZF_TMUX=0
|
||||||
|
new_shell
|
||||||
|
tmux.send_keys 'unset FOO**', :Tab
|
||||||
|
tmux.until { |lines| lines[-2].include? ' 1/' }
|
||||||
|
tmux.send_keys :Enter
|
||||||
|
tmux.until { |lines| lines[-1] == 'unset FOO' }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class TestBash < TestBase
|
class TestBash < TestBase
|
||||||
|
Loading…
Reference in New Issue
Block a user