Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: dict completion
- X-seq: zsh-workers 18449
- From: Oliver Kiddle <okiddle@xxxxxxxxxxx>
- To: Zsh workers <zsh-workers@xxxxxxxxxx>
- Subject: PATCH: dict completion
- Date: Fri, 18 Apr 2003 10:29:20 +0200
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
This patch updates _dict and includes a near complete rewrite of
_dict_words. Suffixes are now handled better and it accepts the
separate-sections style (with the words tag) to separate words from
different databases.
Oliver
Index: Completion/Unix/Command/_dict
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_dict,v
retrieving revision 1.3
diff -u -r1.3 _dict
--- Completion/Unix/Command/_dict 6 Aug 2001 14:42:04 -0000 1.3
+++ Completion/Unix/Command/_dict 18 Apr 2003 08:26:40 -0000
@@ -1,28 +1,42 @@
#compdef dict
-_arguments \
- '(--host -h)'{--host,-h}'[host]:dict server:_hosts' \
- '(--port -p)'{--port,-p}'[port]:service:' \
- '(--database -d)'{--database,-d}'[database]:db name:' \
- '(--match -m)'{--match,-m}'[match]' \
- '(--strategy -s)'{--strategy,-s}'[strategy]:strategy:' \
- '(--nocorrect -C)'{--nocorrect,-C}'[nocorrect]' \
- '(--config -c)'{--config,-c}'[config]:config file:_files' \
- '(--dbs -D)'{--dbs,-D}'[list dbs]' \
- '(--strats -S)'{--strats,-S}'[strats]' \
- '(--serverhelp -H)'{--serverhelp,-H}'[server help]' \
- '(--info -i)'{--info,-i}'[db info]:db name:' \
+local strategy database state line curcontext="$curcontext"
+typeset -A opt_args
+
+_arguments -C -S \
+ '(--host -h)'{--host=,-h+}'[specify hostname of dict server]:dict server:_hosts' \
+ '(--port -p)'{--port=,-p+}'[specify port for dict server]:service:_ports' \
+ '(--database -d)'{--database=,-d+}'[database]:db name:->database' \
+ '(--match -m)'{--match,-m}'[perform matching]' \
+ '(--strategy -s)'{--strategy=,-s+}'[specify matching strategy]:strategy:->strategy' \
+ '(--nocorrect -C)'{--nocorrect,-C}'[disable spelling correction]' \
+ '(--config -c)'{--config=,-c+}'[specify config file]:config file:_files' \
+ '(--dbs -D)'{--dbs,-D}'[list available databases]' \
+ '(--strats -S)'{--strats,-S}'[list available search strategies]' \
+ '(--serverhelp -H)'{--serverhelp,-H}'[query server for help info it provides]' \
+ '(--info -i)'{--info=,-i+}'[get info on specified database]:db name:->database' \
+ '(--serverinfo -I)'{--serverinfo,-I}'[display info about server]' \
'(--noauth -a)'{--noauth,-a}'[disable authentication]' \
- '(--user -u)'{--user,-u}'[user]:user name:' \
- '(--key -k)'{--key,-k}'[key]:shared secret:' \
- '(--version -V)'{--version,-V}'[display version]' \
- '(--license -L)'{--license,-L}'[display license]' \
- '--help' \
- '(--verbose -v)'{--verbose,-v}'[be verbose]' \
+ '(--user -u)'{--user=,-u+}'[specify username for authentication]:user name:' \
+ '(--key -k)'{--key=,-k+}'[specify key for authentication]:shared secret:' \
+ '(-)'{--version,-V}'[display program version]' \
+ '(-)'{--license,-L}'[display program license]' \
+ '(-)--help[display usage info]' \
+ '(--verbose -v)'{--verbose,-v}'[verbose output]' \
'(--raw -r)'{--raw,-r}'[be very verbose]' \
- '(--pager -P)'{--pager,-P}'[pager]:program:_command_names -e' \
- '--html' \
- '--pipesize:buffer size:' \
- '--client:client text:' \
- '--debug:debug flag:(verbose raw scan parse pipe serial time)' \
- ':word:_dict_words'
+ '(--pager -P)'{--pager=,-P+}'[specify pager]:program:_command_names -e' \
+ '--pipesize=[specify buffer size for pipelining commands]:buffer size:' \
+ '--client=[specify additional text to send to server]:client text' \
+ '--debug=[set a debug flag]:debug flag:(verbose raw scan parse pipe serial time)' \
+ ':word:_dict_words' && return
+
+case "$state" in
+ strategy)
+ strategy=( ${${${(f)"$(_call_program strategy dict -S 2>/dev/null)"}[2,-1]#?}/ ##/:} )
+ _describe -t strategy strategy strategy && return
+ ;;
+ database)
+ database=( ${${${(f)"$(_call_program database dict --dbs 2>/dev/null)"}[2,-1]#?}/ ##/:} )
+ _describe -t database database database && return
+ ;;
+esac
Index: Completion/Unix/Type/_dict_words
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Type/_dict_words,v
retrieving revision 1.2
diff -u -r1.2 _dict_words
--- Completion/Unix/Type/_dict_words 8 Feb 2002 08:30:11 -0000 1.2
+++ Completion/Unix/Type/_dict_words 18 Apr 2003 08:26:41 -0000
@@ -1,17 +1,43 @@
#autoload
-local dict dictresult dictwords j expl
+local begin end ret=1
+local -a args dict dicts dictwords expl
-[[ -z $words[CURRENT] ]] && return 1
+if [[ $service = dict ]]; then
+ args=( ${(kv)opt_args[(I)-([hpdauk]|-(host|port|database|noauth|user|key))]} )
+fi
-dictresults=(${${(f)${"$(dict -m -s prefix $words[CURRENT])":gs/
- / /}}:#[0-9]*matches found})
+if [[ -z $words[CURRENT] ]]; then
+ _message -e dict 'dictionary word'
+ return 1
+elif [[ -z $SUFFIX ]]; then
+ dictwords=( ${(z)${(f)"$(_call_program words dict $args -m -s prefix $PREFIX 2>/dev/null)"}} )
+elif [[ -z $PREFIX ]]; then
+ dictwords=( ${(z)${(f)"$(_call_program words dict $args -m -s suffix $SUFFIX 2>/dev/null)"}} )
+else
+ dictwords=( ${(z)${(f)"$(_call_program words dict $args -m -s regexp $PREFIX.\*$SUFFIX 2>/dev/null)"}} )
+fi
-for j in ${dictresults}
-do
- dict=${j%%:*}
- dictwords=(${(z)j#*:})
+dictwords=( ${${dictwords#\"}%\"} )
+dicts=( ${${(M)dictwords:#*:}%:} )
- _wanted $dict expl "words from $dict" \
- compadd -M 'm:{a-zA-Z}={A-Za-z} r:|=*' -a "$@" - dictwords
-done
+if zstyle -t ":completion:${curcontext}:words" separate-sections; then
+ _tags words.$^dicts
+ while _tags; do
+ for dict in $dicts; do
+ if _requested words.$dict expl "word from $dict"; then
+ (( begin=${dictwords[(i)$dict:]} + 1 ))
+ end=${dictwords[(ib.begin.)*:]}
+ [[ $end = 1 ]] && end=$#dictwords
+ compadd "$expl[@]" "$@" -M 'm:{a-zA-Z}={A-Za-z} r:|=*' -a - \
+ 'dictwords[begin,end]' && ret=0
+ fi
+ done
+ (( ret )) || break
+ done
+
+ return 1
+else
+ _wanted words expl word compadd -M 'm:{a-zA-Z}={A-Za-z} r:|=*' "$@" - \
+ ${dictwords:#*:}
+fi
Messages sorted by:
Reverse Date,
Date,
Thread,
Author