# dict(1) completion -*- shell-script -*- proc _dictdata { dict $host $port $1 2>/dev/null | sed -ne \ 's/^['$'\t '']\{1,\}\([^ '$'\t'']*\).*$/\1/p' } proc _dict { local cur prev words cword _init_completion || return local host port db i for (( i=1; i < cword; i++ )); do case ${words[i]} in -h|--host) host=${words[i+1]} [[ -n $host ]] && host="-h $host" i=$((++i)) ;; -p|--port) port=${words[i+1]} [[ -n $port ]] && port="-p $port" i=$((++i)) ;; -d|--database) db=${words[i+1]} [[ -n $db ]] && host="-d $db" i=$((++i)) ;; *) ;; esac done if [[ "$cur" == -* ]] { setvar COMPREPLY = ''( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) ) return 0 } case (prev) { -d|--database|-i|-info { setvar COMPREPLY = ''( $( compgen -W '$( _dictdata -D )' -- "$cur" ) ) return 0 } -s|--strategy { setvar COMPREPLY = ''( $( compgen -W '$( _dictdata -S )' -- "$cur" ) ) return 0 } * { } } local dictfile=/usr/share/dict/words if [[ -r $dictfile ]] { # Dictfile may be too large for practical compgen -W usage, so narrow # it down with grep if $cur looks like something that's safe to embed # in a pattern instead. if [[ $cur == +([-A-Za-z0-9/.]) ]] { setvar COMPREPLY = ''( $( compgen -W \ '$( command grep "^${cur//./\\.}" $dictfile )' -- "$cur" ) ) } else { setvar COMPREPLY = ''( $( compgen -W '$( cat $dictfile )' -- "$cur" ) ) } } } && complete -F _dict -o default dict rdict # ex: ts=4 sw=4 et filetype=sh