summaryrefslogtreecommitdiffstats
path: root/completions/dict
diff options
context:
space:
mode:
Diffstat (limited to 'completions/dict')
-rw-r--r--completions/dict64
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