summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2019-08-09 11:11:29 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2019-08-09 11:11:29 +0900
commit5c7dcaffe892dad764d0130ee49198646cd8fd73 (patch)
tree3178cae07f2a991bd43f1d10c94737130e4c1728 /shell
parent50958992455708f4a9ec82f745f7496fbca243c7 (diff)
[bash-completion] _fzf_setup_completion to retain previous options
Diffstat (limited to 'shell')
-rw-r--r--shell/completion.bash20
1 files changed, 11 insertions, 9 deletions
diff --git a/shell/completion.bash b/shell/completion.bash
index 1bedb43e..d0d40869 100644
--- a/shell/completion.bash
+++ b/shell/completion.bash
@@ -292,7 +292,7 @@ if type _completion_loader > /dev/null 2>&1; then
_fzf_completion_loader=1
fi
-_fzf_defc() {
+__fzf_defc() {
local cmd func opts orig_var orig def
cmd="$1"
func="$2"
@@ -309,16 +309,14 @@ _fzf_defc() {
# Anything
for cmd in $a_cmds; do
- _fzf_defc "$cmd" _fzf_path_completion "-o default -o bashdefault"
+ __fzf_defc "$cmd" _fzf_path_completion "-o default -o bashdefault"
done
# Directory
for cmd in $d_cmds; do
- _fzf_defc "$cmd" _fzf_dir_completion "-o nospace -o dirnames"
+ __fzf_defc "$cmd" _fzf_dir_completion "-o nospace -o dirnames"
done
-unset _fzf_defc
-
# Kill completion
complete -F _fzf_complete_kill -o nospace -o default -o bashdefault kill
@@ -334,16 +332,20 @@ complete -F _fzf_complete_unalias -o default -o bashdefault unalias
unset cmd d_cmds a_cmds x_cmds
_fzf_setup_completion() {
- local fn cmd
- if [[ $# -lt 2 ]] || ! type -t _fzf_${1}_completion > /dev/null; then
+ local kind fn cmd
+ kind=$1
+ fn=_fzf_${1}_completion
+ if [[ $# -lt 2 ]] || ! type -t "$fn" > /dev/null; then
echo "usage: ${FUNCNAME[0]} path|dir COMMANDS..."
return 1
fi
- fn=_fzf_${1}_completion
shift
for cmd in "$@"; do
eval "$(complete -p "$cmd" 2> /dev/null | grep -v "$fn" | __fzf_orig_completion_filter)"
- complete -F "$fn" -o default -o bashdefault "$cmd"
+ case "$kind" in
+ dir) __fzf_defc "$cmd" "$fn" "-o nospace -o dirnames" ;;
+ *) __fzf_defc "$cmd" "$fn" "-o default -o bashdefault" ;;
+ esac
done
}