summaryrefslogtreecommitdiff
path: root/fzf-completion.bash
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2014-07-04 00:08:37 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2014-07-04 18:30:54 +0900
commit3b14c5230c3b5ad0d2f179f3bbb0e26563f3aae5 (patch)
treee17d75ea822fd990bd302bb3b0a1eed36d5946f2 /fzf-completion.bash
parent91401514ab68c3903305bfbb8f731ca8bf3e1c59 (diff)
downloadfzf-3b14c5230c3b5ad0d2f179f3bbb0e26563f3aae5.tar.gz
[bash-completion] Fail back to original completion (#72)
Diffstat (limited to 'fzf-completion.bash')
-rw-r--r--fzf-completion.bash55
1 files changed, 40 insertions, 15 deletions
diff --git a/fzf-completion.bash b/fzf-completion.bash
index c5d63430..9924b0a8 100644
--- a/fzf-completion.bash
+++ b/fzf-completion.bash
@@ -31,7 +31,8 @@ _fzf_opts_completion() {
}
_fzf_generic_completion() {
- local cur base dir leftover matches trigger
+ local cur base dir leftover matches trigger cmd orig
+ cmd=$(echo ${COMP_WORDS[0]} | sed 's/[^a-z0-9_=]/_/g')
COMPREPLY=()
trigger=${FZF_COMPLETION_TRIGGER:-**}
cur="${COMP_WORDS[COMP_CWORD]}"
@@ -61,25 +62,30 @@ _fzf_generic_completion() {
dir=$(dirname "$dir")
[[ "$dir" =~ /$ ]] || dir="$dir"/
done
+ else
+ shift
+ shift
+ orig=$(eval "echo \$_fzf_orig_completion_$cmd")
+ [ -n "$orig" ] && type "$orig" > /dev/null && $orig "$@"
fi
}
_fzf_all_completion() {
_fzf_generic_completion \
"-name .git -prune -o -name .svn -prune -o -type d -print -o -type f -print -o -type l -print" \
- "-m"
+ "-m" "$@"
}
_fzf_file_completion() {
_fzf_generic_completion \
"-name .git -prune -o -name .svn -prune -o -type f -print -o -type l -print" \
- "-m"
+ "-m" "$@"
}
_fzf_dir_completion() {
_fzf_generic_completion \
"-name .git -prune -o -name .svn -prune -o -type d -print" \
- ""
+ "" "$@"
}
_fzf_kill_completion() {
@@ -133,28 +139,46 @@ _fzf_ssh_completion() {
fi
}
+# fzf options
complete -F _fzf_opts_completion fzf
+d_cmds="cd pushd rmdir"
+f_cmds="
+ awk cat diff diff3
+ emacs ex file ftp g++ gcc gvim head hg java
+ javac ld less more mvim patch perl python ruby
+ sed sftp sort source tail tee uniq vi view vim wc"
+a_cmds="
+ basename bunzip2 bzip2 chmod chown curl cp dirname du
+ find git grep gunzip gzip hg jar
+ ln ls mv open rm rsync scp
+ svn tar unzip zip"
+
+# Preserve existing completion
+if [ "$_fzf_completion_loaded" != '0.8.6' ]; then
+ # Really wish I could use associative array but OSX comes with bash 3.2 :(
+ while read line; do
+ eval $line
+ done < <(complete | grep '\-F' | grep -v _fzf_ |
+ grep -E -w "$(echo $d_cmds $f_cmds $a_cmds | sed 's/ /|/g' | sed 's/+/\\+/g')" |
+ sed -E 's/.*-F *([^ ]*).* ([^ ]*)$/_fzf_orig_completion_\2=\1/' |
+ sed 's/[^a-z0-9_=]/_/g')
+ unset line
+ export _fzf_completion_loaded=0.8.6
+fi
+
# Directory
-for cmd in "cd pushd rmdir"; do
+for cmd in $d_cmds; do
complete -F _fzf_dir_completion -o default -o bashdefault $cmd
done
# File
-for cmd in "
- awk cat diff diff3
- emacs ex file ftp g++ gcc gvim head hg java
- javac ld less more mvim patch perl python ruby
- sed sftp sort source tail tee uniq vi view vim wc"; do
+for cmd in $f_cmds; do
complete -F _fzf_file_completion -o default -o bashdefault $cmd
done
# Anything
-for cmd in "
- basename bunzip2 bzip2 chmod chown curl cp dirname du
- find git grep gunzip gzip hg jar
- ln ls mv open rm rsync scp
- svn tar unzip zip"; do
+for cmd in $a_cmds; do
complete -F _fzf_all_completion -o default -o bashdefault $cmd
done
@@ -165,3 +189,4 @@ complete -F _fzf_kill_completion -o nospace -o default -o bashdefault kill
complete -F _fzf_ssh_completion -o default -o bashdefault ssh
complete -F _fzf_telnet_completion -o default -o bashdefault telnet
+unset cmd d_cmds f_cmds a_cmds