summaryrefslogtreecommitdiff
path: root/fzf-completion.bash
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2013-12-22 20:42:11 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2013-12-22 20:45:35 +0900
commit76fe23b92877a4541fecceca6e9d721fd52f4c35 (patch)
treec637b4e767598b0b04a3433996076df856751441 /fzf-completion.bash
parent622c54f4a3fa270713203397716dbf802592c7ed (diff)
downloadfzf-76fe23b92877a4541fecceca6e9d721fd52f4c35.tar.gz
Fix host completion to include ssh_config entries (#13)
Diffstat (limited to 'fzf-completion.bash')
-rw-r--r--fzf-completion.bash26
1 files changed, 22 insertions, 4 deletions
diff --git a/fzf-completion.bash b/fzf-completion.bash
index 1c35607d..8d5b903f 100644
--- a/fzf-completion.bash
+++ b/fzf-completion.bash
@@ -96,7 +96,7 @@ _fzf_kill_completion() {
fi
}
-_fzf_host_completion() {
+_fzf_telnet_completion() {
local cur prev selected
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
@@ -112,6 +112,25 @@ _fzf_host_completion() {
fi
}
+_fzf_ssh_completion() {
+ local cur prev selected
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ prev="${COMP_WORDS[COMP_CWORD-1]}"
+ [[ "$cur" =~ ^- || "$prev" =~ ^- ]] && return 1
+
+ tput sc
+ selected=$(cat \
+ <(cat ~/.ssh/config /etc/ssh/ssh_config 2> /dev/null | grep -i ^host) \
+ <(grep -v '^\s*\(#\|$\)' /etc/hosts) | \
+ awk '{print $2}' | sort -u | fzf $FZF_COMPLETION_OPTS -q "$cur")
+ tput rc
+
+ if [ -n "$selected" ]; then
+ COMPREPLY=("$selected")
+ return 0
+ fi
+}
+
complete -F _fzf_opts_completion fzf
# Directory
@@ -141,7 +160,6 @@ done
complete -F _fzf_kill_completion -o nospace -o default -o bashdefault kill
# Host completion
-for cmd in "ssh telnet"; do
- complete -F _fzf_host_completion -o default -o bashdefault $cmd
-done
+complete -F _fzf_ssh_completion -o default -o bashdefault ssh
+complete -F _fzf_telnet_completion -o default -o bashdefault telnet