X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=.profile.d%2Fcompletion.bashrc;h=782cb699d0c81087ab9dcde005134342598b3576;hb=fcd45e190b92e5f5f25df29df408b31038c94816;hp=ae18697cbf6fd7d40931ecb121d60fd122cc028c;hpb=4fedd438b177cc8adf227da193642b139a1ee5f4;p=profile.git diff --git a/.profile.d/completion.bashrc b/.profile.d/completion.bashrc index ae18697..782cb69 100644 --- a/.profile.d/completion.bashrc +++ b/.profile.d/completion.bashrc @@ -1,9 +1,11 @@ -# $Id$ +# Old bash doesn't have completion support. +if ! builtin complete 2>&1 | grep 'not a shell builtin' >/dev/null; then + # Helper! -export COMPLETION_DIR_SSH=~/.ssh/hosts -export COMPLETION_DIR_TELNET=~/.telnet/hosts -export COMPLETION_DIR_RDP=~/.ssh/hosts -export COMPLETION_DIR_PING="$COMPLETION_DIR_SSH $COMPLETION_DIR_TELNET $COMPLETION_DIR_RDP" +COMPLETION_DIR_SSH=${PROFILE_HOME:-~}/.ssh/hosts +COMPLETION_DIR_TELNET=${PROFILE_HOME:-~}/.telnet/hosts +COMPLETION_DIR_RDP=${PROFILE_HOME:-~}/.rdp/hosts +COMPLETION_DIR_PING="$COMPLETION_DIR_SSH $COMPLETION_DIR_TELNET $COMPLETION_DIR_RDP" function _generic_completion() { COMPLETION_DIR=${1+"$@"} @@ -36,6 +38,27 @@ function _known_hosts() { return 0 } +# Host completion from dsh groups. +function _dshgroup() { + cur=${COMP_WORDS[COMP_CWORD]} + + HOSTS=$(grep -rh '^[A-Za-z0-9]' ~/.dsh/group) + + COMPREPLY=($(compgen -W "$HOSTS" -- "$cur")) + return 0 +} + +function _omnissh() { + cur=${COMP_WORDS[COMP_CWORD]} + + HOSTS="$(grep -rh '^[A-Za-z0-9]' ~/.dsh/group) +$(sed 's/[ ].*//;s/,/\n/' ~/.ssh/known_hosts) +$(find $COMPLETION_DIR_SSH -type f -perm -100 2>/dev/null | sed 's@.*/@@')" + + COMPREPLY=($(compgen -W "$HOSTS" -- "$cur")) + return 0 +} + # Process completion for kill, strace etc. function _pid() { cur=${COMP_WORDS[COMP_CWORD]} @@ -112,9 +135,9 @@ function _global() { return 0 } -complete -F _ssh rollout -complete -F _ssh ssh -complete -F _ssh sshterm +complete -F _omnissh rollout +complete -F _omnissh ssh +complete -F _omnissh sshterm complete -F _ping telnet complete -F _telnet telnetterm complete -F _rdp rdesktop @@ -127,11 +150,9 @@ complete -F _pid kill complete -F _pid strace complete -F _known_hosts kill_known_host complete -F _known_hosts knh +complete -F _omnissh knh complete -F _modprobe modprobe complete -F _rmmod rmmod complete -F _global global -unset COMPLETION_DIR_PING -unset COMPLETION_DIR_RDP -unset COMPLETION_DIR_SSH -unset COMPLETION_DIR_TELNET +fi