summaryrefslogtreecommitdiffstats
path: root/shell/completion.bash
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2020-02-20 00:28:16 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2020-02-20 00:28:16 +0900
commit52154153150d0014a76ef8b429b73c590cb7f755 (patch)
tree7f745c14ac4cda8a8c148daab53bf3e87423c744 /shell/completion.bash
parent54891d11e09d3491dffa3f494199064583ac4862 (diff)
[completion] Allow users to customize fzf options via _fzf_comprun
Related #1809 #1850
Diffstat (limited to 'shell/completion.bash')
-rw-r--r--shell/completion.bash28
1 files changed, 16 insertions, 12 deletions
diff --git a/shell/completion.bash b/shell/completion.bash
index b8ad4e5f..47d01e8b 100644
--- a/shell/completion.bash
+++ b/shell/completion.bash
@@ -34,9 +34,16 @@ fi
# To redraw line after fzf closes (printf '\e[5n')
bind '"\e[0n": redraw-current-line'
-__fzfcmd_complete() {
- [ -n "$TMUX_PANE" ] && [ "${FZF_TMUX:-0}" != 0 ] && [ ${LINES:-40} -gt 15 ] &&
- echo "fzf-tmux -d${FZF_TMUX_HEIGHT:-40%}" || echo "fzf"
+__fzf_comprun() {
+ if [ "$(type -t _fzf_comprun 2>&1)" = function ]; then
+ _fzf_comprun "$@"
+ elif [ -n "$TMUX_PANE" ] && [ "${FZF_TMUX:-0}" != 0 ] && [ ${LINES:-40} -gt 15 ]; then
+ shift
+ fzf-tmux -d "${FZF_TMUX_HEIGHT:-40%}" "$@"
+ else
+ shift
+ fzf "$@"
+ fi
}
__fzf_orig_completion_filter() {
@@ -142,8 +149,7 @@ _fzf_handle_dynamic_completion() {
}
__fzf_generic_path_completion() {
- local cur base dir leftover matches trigger cmd fzf
- fzf="$(__fzfcmd_complete)"
+ local cur base dir leftover matches trigger cmd
cmd="${COMP_WORDS[0]//[^A-Za-z0-9_=]/_}"
COMPREPLY=()
trigger=${FZF_COMPLETION_TRIGGER-'**'}
@@ -159,7 +165,7 @@ __fzf_generic_path_completion() {
leftover=${leftover/#\/}
[ -z "$dir" ] && dir='.'
[ "$dir" != "/" ] && dir="${dir/%\//}"
- matches=$(eval "$1 $(printf %q "$dir")" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse $FZF_DEFAULT_OPTS $FZF_COMPLETION_OPTS" $fzf $2 -q "$leftover" | while read -r item; do
+ matches=$(eval "$1 $(printf %q "$dir")" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse $FZF_DEFAULT_OPTS $FZF_COMPLETION_OPTS $2" __fzf_comprun "$4" -q "$leftover" | while read -r item; do
printf "%q$3 " "$item"
done)
matches=${matches% }
@@ -184,10 +190,9 @@ __fzf_generic_path_completion() {
}
_fzf_complete() {
- local cur selected trigger cmd fzf post
+ local cur selected trigger cmd post
post="$(caller 0 | awk '{print $2}')_post"
type -t "$post" > /dev/null 2>&1 || post=cat
- fzf="$(__fzfcmd_complete)"
cmd="${COMP_WORDS[0]//[^A-Za-z0-9_=]/_}"
trigger=${FZF_COMPLETION_TRIGGER-'**'}
@@ -195,7 +200,7 @@ _fzf_complete() {
if [[ "$cur" == *"$trigger" ]]; then
cur=${cur:0:${#cur}-${#trigger}}
- selected=$(cat | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse $FZF_DEFAULT_OPTS $FZF_COMPLETION_OPTS" $fzf $1 -q "$cur" | $post | tr '\n' ' ')
+ selected=$(cat | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse $FZF_DEFAULT_OPTS $FZF_COMPLETION_OPTS $1" __fzf_comprun "$2" -q "$cur" | $post | tr '\n' ' ')
selected=${selected% } # Strip trailing space not to repeat "-o nospace"
if [ -n "$selected" ]; then
COMPREPLY=("$selected")
@@ -226,9 +231,8 @@ _fzf_dir_completion() {
_fzf_complete_kill() {
[ -n "${COMP_WORDS[COMP_CWORD]}" ] && return 1
- local selected fzf
- fzf="$(__fzfcmd_complete)"
- selected=$(command ps -ef | sed 1d | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-50%} --min-height 15 --reverse $FZF_DEFAULT_OPTS --preview 'echo {}' --preview-window down:3:wrap $FZF_COMPLETION_OPTS" $fzf -m | awk '{print $2}' | tr '\n' ' ')
+ local selected
+ selected=$(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 "kill" -m | awk '{print $2}' | tr '\n' ' ')
printf '\e[5n'
if [ -n "$selected" ]; then