From c329279339a5f49020f6cb43c714d54e68424700 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sat, 18 Apr 2020 00:51:06 +0900 Subject: [completion] Make kill completion more consistent with the others Support both ordinary completion trigger and empty trigger kill kill foo** Close #1988 Close #385 --- shell/completion.zsh | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'shell/completion.zsh') diff --git a/shell/completion.zsh b/shell/completion.zsh index 3381f463..2096ad4e 100644 --- a/shell/completion.zsh +++ b/shell/completion.zsh @@ -250,6 +250,16 @@ _fzf_complete_unalias() { ) } +_fzf_complete_kill() { + _fzf_complete -m --preview 'echo {}' --preview-window down:3:wrap --min-height 15 -- "$@" < <( + command ps -ef | sed 1d + ) +} + +_fzf_complete_kill_post() { + awk '{print $2}' +} + fzf-completion() { local tokens cmd prefix trigger tail matches lbuf d_cmds setopt localoptions noshwordsplit noksh_arrays noposixbuiltins @@ -274,20 +284,21 @@ fzf-completion() { tokens=(${tokens[0,-2]}) fi + lbuf=$LBUFFER tail=${LBUFFER:$(( ${#LBUFFER} - ${#trigger} ))} # Kill completion (do not require trigger sequence) if [ "$cmd" = kill -a ${LBUFFER[-1]} = ' ' ]; then - matches=$(command ps -ef | sed 1d | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-50%} --min-height 15 --reverse $FZF_DEFAULT_OPTS $FZF_COMPLETION_OPTS --preview 'echo {}' --preview-window down:3:wrap" __fzf_comprun "$cmd" -m | awk '{print $2}' | tr '\n' ' ') - if [ -n "$matches" ]; then - LBUFFER="$LBUFFER$matches" - fi - zle reset-prompt + tail=$trigger + tokens+=$trigger + lbuf="$lbuf$trigger" + fi + # Trigger sequence given - elif [ ${#tokens} -gt 1 -a "$tail" = "$trigger" ]; then + if [ ${#tokens} -gt 1 -a "$tail" = "$trigger" ]; then d_cmds=(${=FZF_COMPLETION_DIR_COMMANDS:-cd pushd rmdir}) [ -z "$trigger" ] && prefix=${tokens[-1]} || prefix=${tokens[-1]:0:-${#trigger}} - [ -z "${tokens[-1]}" ] && lbuf=$LBUFFER || lbuf=${LBUFFER:0:-${#tokens[-1]}} + [ -n "${tokens[-1]}" ] && lbuf=${lbuf:0:-${#tokens[-1]}} if eval "type _fzf_complete_${cmd} > /dev/null"; then prefix="$prefix" eval _fzf_complete_${cmd} ${(q)lbuf} -- cgit v1.2.3