diff options
Diffstat (limited to 'completions/dict')
-rw-r--r-- | completions/dict | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/completions/dict b/completions/dict new file mode 100644 index 0000000..f3426ff --- /dev/null +++ b/completions/dict @@ -0,0 +1,64 @@ +# dict(1) completion -*- shell-script -*- + +_dictdata() +{ + dict $host $port $1 2>/dev/null | command sed -ne \ + 's/^[[:blank:]]\{1,\}\([^[:blank:]]*\).*$/\1/p' +} + +_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 + --host | -!(-*)h) + host=${words[++i]} + [[ -n $host ]] && host="-h $host" + ;; + --port | -!(-*)p) + port=${words[++i]} + [[ -n $port ]] && port="-p $port" + ;; + --database | -!(-*)d) + db=${words[++i]} + [[ -n $db ]] && host="-d $db" + ;; + esac + done + + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + return + fi + + case $prev in + --database | -info | -!(-*)[di]) + COMPREPLY=($(compgen -W '$(_dictdata -D)' -- "$cur")) + return + ;; + --strategy | -!(-*)s) + COMPREPLY=($(compgen -W '$(_dictdata -S)' -- "$cur")) + return + ;; + esac + + local dictfile=/usr/share/dict/words + if [[ -r $dictfile ]]; then + # 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/.]) ]]; then + COMPREPLY=($(compgen -W \ + '$(command grep "^${cur//./\\.}" $dictfile)' -- "$cur")) + else + COMPREPLY=($(compgen -W '$(cat $dictfile)' -- "$cur")) + fi + fi +} && + complete -F _dict -o default dict rdict + +# ex: filetype=sh |