zsh-workers
 help / color / mirror / code / Atom feed
* Re: PATCH: use of _arguments for hash
@ 2000-05-12 14:33 Sven Wischnowsky
  2000-05-12 14:49 ` Bart Schaefer
  2000-05-14 23:24 ` Oliver Kiddle
  0 siblings, 2 replies; 5+ messages in thread
From: Sven Wischnowsky @ 2000-05-12 14:33 UTC (permalink / raw)
  To: zsh-workers


Oliver Kiddle wrote:

> This adds _arguments based completion for the hash (and rehash)
> builtins. Why does rehash accept the -v option when as far as I can
> tell, it can never do anything? Would it be useful to add a -L option
> to hash similar to alias -L?

Seems reasonable, but personally I don't care much...

> I'm getting one problem with this completion: when I type hash -r<tab>,
> it is completed to 'hash -d '. I would expect it to complete to
> 'hash -rd '.

Yes, a bit of confusion over the options that still could be
completed. The next step, completing `-rd<TAB>' wasn't correct either, 
for similar reasons.

> I also get 'no more arguments' duplicated after
> 'hash -d -v<tab>'.

Oops. That was `caused' by _approximate defining `compadd' which used
a different group.

Bye
 Sven

Index: Completion/Base/_arguments
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Base/_arguments,v
retrieving revision 1.16
diff -u -r1.16 _arguments
--- Completion/Base/_arguments	2000/05/11 11:27:40	1.16
+++ Completion/Base/_arguments	2000/05/12 14:33:08
@@ -184,12 +184,16 @@
     else
       noargs='no arguments'
     fi
-    if ! comparguments -O next direct odirect equal; then
+    if comparguments -O next direct odirect equal; then
+      opts=yes
+      _tags options
+    elif [[ $? -eq 2 ]]; then
+        compadd -Q - "${PREFIX}${SUFFIX}"
+        return 0
+    else
       _message "$noargs"
       return 1
     fi
-    opts=yes
-    _tags options
   fi
 
   context=()
Index: Completion/Core/_message
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Core/_message,v
retrieving revision 1.3
diff -u -r1.3 _message
--- Completion/Core/_message	2000/05/05 11:21:50	1.3
+++ Completion/Core/_message	2000/05/12 14:33:08
@@ -15,6 +15,6 @@
 
 if [[ -n "$format$raw" ]]; then
   [[ -z "$raw" ]] && zformat -f format "$format" "d:$1" "${(@)argv[2,-1]}"
-  compadd -x "$format"
+  builtin compadd -x "$format"
   _comp_mesg=yes
 fi
Index: Src/Zle/computil.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/computil.c,v
retrieving revision 1.20
diff -u -r1.20 computil.c
--- Src/Zle/computil.c	2000/05/11 11:27:40	1.20
+++ Src/Zle/computil.c	2000/05/12 14:33:12
@@ -1124,7 +1124,7 @@
     Cadef d;
     int nopts;
     Caarg def, ddef;
-    Caopt curopt;
+    Caopt curopt, dopt;
     int opt, arg, argbeg, optbeg, nargbeg, restbeg, curpos, argend;
     int inopt, inrest, inarg, nth, doff, singles, oopt, actopts;
     LinkList args;
@@ -1140,7 +1140,7 @@
 ca_parse_line(Cadef d, int multi)
 {
     Caarg adef, ddef;
-    Caopt ptr, wasopt;
+    Caopt ptr, wasopt, dopt;
     struct castate state;
     char *line, *pe, **argxor = NULL;
     int cur, doff, argend;
@@ -1174,7 +1174,7 @@
     state.d = d;
     state.nopts = d->nopts;
     state.def = state.ddef = NULL;
-    state.curopt = NULL;
+    state.curopt = state.dopt = NULL;
     state.argbeg = state.optbeg = state.nargbeg = state.restbeg = state.actopts =
 	state.nth = state.inopt = state.inarg = state.opt = state.arg = 1;
     state.argend = argend = arrlen(compwords) - 1;
@@ -1198,6 +1198,7 @@
     for (line = compwords[1], cur = 2, state.curopt = NULL, state.def = NULL;
 	 line; line = compwords[cur++]) {
 	ddef = adef = NULL;
+	dopt = NULL;
 	doff = state.singles = 0;
 
 	if (ca_inactive(d, argxor, cur, 0) ||
@@ -1251,9 +1252,11 @@
 	     (state.curopt->type == CAO_EQUAL ?
 	      (pe[-1] == '=' || !pe[0]) : 1))) {
 
-	    ddef = state.def = ((state.curopt->type != CAO_EQUAL ||
-				 pe[-1] == '=') ?
-				state.curopt->args : NULL);
+	    if ((ddef = state.def = ((state.curopt->type != CAO_EQUAL ||
+				      pe[-1] == '=') ?
+				     state.curopt->args : NULL)))
+		dopt = state.curopt;
+
 	    doff = pe - line;
 	    state.optbeg = state.argbeg = state.inopt = cur;
 	    state.argend = argend;
@@ -1296,6 +1299,7 @@
 	    Caopt tmpopt;
 
 	    ddef = state.def = state.curopt->args;
+	    dopt = state.curopt;
 	    doff = pe - line;
 	    state.optbeg = state.argbeg = state.inopt = cur;
 	    state.argend = argend;
@@ -1355,6 +1359,7 @@
 
 		memcpy(&ca_laststate, &state, sizeof(state));
 		ca_laststate.ddef = NULL;
+		ca_laststate.dopt = NULL;
 		ca_laststate.doff = 0;
 		break;
 	    }
@@ -1389,6 +1394,7 @@
 		    zaddlinknode(l, ztrdup(line));
 
 		ca_laststate.ddef = NULL;
+		ca_laststate.dopt = NULL;
 		ca_laststate.doff = 0;
 		break;
 	    }
@@ -1402,12 +1408,14 @@
 	if (cur + 1 == compcurrent) {
 	    memcpy(&ca_laststate, &state, sizeof(state));
 	    ca_laststate.ddef = NULL;
+	    ca_laststate.dopt = NULL;
 	    ca_laststate.doff = 0;
 	} else if (cur == compcurrent && !ca_laststate.def) {
 	    if ((ca_laststate.def = ddef)) {
 		ca_laststate.singles = state.singles;
 		if (state.curopt && state.curopt->type == CAO_NEXT) {
 		    ca_laststate.ddef = ddef;
+		    ca_laststate.dopt = dopt;
 		    ca_laststate.def = NULL;
 		    ca_laststate.opt = 1;
 		    state.curopt->active = 1;
@@ -1418,6 +1426,7 @@
 	    } else {
 		ca_laststate.def = adef;
 		ca_laststate.ddef = NULL;
+		ca_laststate.dopt = NULL;
 		ca_laststate.optbeg = state.nargbeg;
 		ca_laststate.argbeg = state.restbeg;
 		ca_laststate.argend = state.argend;
@@ -1705,7 +1714,7 @@
 
 	    return 0;
 	}
-	return 1;
+	return (ca_laststate.singles ? 2 : 1);
     case 'L':
 	{
 	    Caopt opt = ca_get_opt(ca_laststate.d, args[1], 1, NULL);
@@ -1719,13 +1728,13 @@
 	}
     case 's':
 	if (ca_laststate.d->single && ca_laststate.singles &&
-	    ca_laststate.actopts > 1 && ca_laststate.opt) {
+	    ca_laststate.actopts && ca_laststate.opt) {
 	    setsparam(args[1],
-		      ztrdup(ca_laststate.ddef ?
-			     (ca_laststate.ddef->type == CAO_DIRECT ?
+		      ztrdup((ca_laststate.ddef && ca_laststate.dopt) ?
+			     (ca_laststate.dopt->type == CAO_DIRECT ?
 			      "direct" :
-			      ((ca_laststate.ddef->type == CAO_OEQUAL ||
-				ca_laststate.ddef->type == CAO_EQUAL) ?
+			      ((ca_laststate.dopt->type == CAO_OEQUAL ||
+				ca_laststate.dopt->type == CAO_EQUAL) ?
 			       "equal" : "next")) : ""));
 	    return 0;
 	}

--
Sven Wischnowsky                         wischnow@informatik.hu-berlin.de


^ permalink raw reply	[flat|nested] 5+ messages in thread
* PATCH: use of _arguments for hash
@ 2000-05-12 13:10 Oliver Kiddle
  0 siblings, 0 replies; 5+ messages in thread
From: Oliver Kiddle @ 2000-05-12 13:10 UTC (permalink / raw)
  To: Zsh workers

This adds _arguments based completion for the hash (and rehash)
builtins. Why does rehash accept the -v option when as far as I can
tell, it can never do anything? Would it be useful to add a -L option
to hash similar to alias -L?

I'm getting one problem with this completion: when I type hash -r<tab>,
it is completed to 'hash -d '. I would expect it to complete to
'hash -rd '. I also get 'no more arguments' duplicated after
'hash -d -v<tab>'.

I've also added the + options in _vars_eq for typeset now that the bug
with them is fixed (thanks Sven).

Oliver

Index: Completion/Builtins/_hash
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Builtins/_hash,v
retrieving revision 1.3
diff -u -r1.3 _hash
--- _hash       2000/05/02 08:23:31     1.3
+++ _hash       2000/05/12 13:05:53
@@ -1,16 +1,37 @@
-#compdef hash
+#compdef hash rehash

-local expl
+local state line expl common_args curcontext="$curcontext"
+typeset -A opt_args

-if [[ "$words[2]" = -*d* ]]; then
-  if compset -P 1 '*='; then
-    _wanted -C -d-value files expl directories _path_files -/
+common_args=( \
+  '-d[use named directory hash table]' \
+  '(-r -m -v)-f[rebuild hash table]' )
+
+case ${words[1]} in
+  hash)
+    _arguments -C -s \
+      '(-f -m -v)-r[empty hash table]' \
+      '(-f -r)-m[treat arguments as patterns]' \
+      '(-f -r -m)-v[list entires as they are added]' \
+      "${common_args[@]}" \
+      '(-d -f -r -m -v)*:hash:->hashval' && return 0
+  ;;
+  rehash)
+    _arguments -C -s ${common_args[@]} && return 0
+  ;;
+esac
+
+if [[ $state = hashval ]]; then
+  if (( $+opt_args[-d] )); then
+    if compset -P 1 '*='; then
+      _wanted -C value files expl directories _path_files -/
+    else
+      _wanted -C name named-directories expl 'named directory' \
+          compadd -q -S '=' - "${(@k)nameddirs}"
+    fi
+  elif compset -P 1 '*='; then
+    _wanted -C value values expl 'executable file' _files -g '*(-*)'
   else
-    _wanted -C -d named-directories expl 'named directory' \
-        compadd -q -S '=' - "${(@k)nameddirs}"
+    _wanted -C name commands expl command compadd -q -S '=' - "${(@k)commands}"
   fi
-elif compset -P 1 '*='; then
-  _wanted -C value values expl 'executable file' _files -g '*(-*)'
-else
-  _wanted -C name commands expl command compadd -q -S '=' - "${(@k)commands}"
 fi
Index: Completion/Builtins/_vars_eq
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Builtins/_vars_eq,v
retrieving revision 1.4
diff -u -r1.4 _vars_eq
--- _vars_eq    2000/05/09 16:53:34     1.4
+++ _vars_eq    2000/05/12 13:05:53
@@ -17,19 +17,19 @@
   Z '(-A -E -F -f -i)-Z+[right justify and fill with leading zeros]:width' \
   a '(-A -E -F -T -f -i)-a[specify that arguments refer to arrays]' \
   f '(-A -E -F -L -R -T -Z -a -g -h -i -l -r -x)-f[specify that arguments refer to functions]' \
-  g '(-T -f)-g[do not restrict parameter to local scope]' \
-  h '(-T -f)-h[hide parameter]' \
-  i '(-A -E -F -T -f)-i[represent internally as an integer]' \
+  g '(-T -f)-+g[do not restrict parameter to local scope]' \
+  h '(-T -f)-+h[hide parameter]' \
+  i '(-A -E -F -T -f)-+i[represent internally as an integer]' \
   l '(-T -f)-l[convert the value to lowercase]' \
   m '(-A -E -F -T -i)-m[treat arguments as patterns]' \
-  r '(-f)-r[mark parameters as readonly]' \
-  t '(-T)-t[tag parameters and turn on execution tracing for functions]' \
-  tf '(-T)-t[turn on execution tracing for functions]' \
-  tp '(-T)-t[tag parameters]' \
+  r '(-f)-+r[mark parameters as readonly]' \
+  t '(-T)-+t[tag parameters and turn on execution tracing for functions]' \
+  tf '(-T)-+t[turn on execution tracing for functions]' \
+  tp '(-T)-+t[tag parameters]' \
   u '-u[convert the value to uppercase or mark function for autoloading]' \
   uf '-u[mark function for autoloadling]' \
   up '-u[convert the value to uppercase]' \
-  x '(-f)-x[export parameter]' )
+  x '(-f)-+x[export parameter]' )

 use="AEFLRTUZafghilmrtux"


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2000-05-15  7:12 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-05-12 14:33 PATCH: use of _arguments for hash Sven Wischnowsky
2000-05-12 14:49 ` Bart Schaefer
2000-05-12 17:46   ` Peter Stephenson
2000-05-14 23:24 ` Oliver Kiddle
  -- strict thread matches above, loose matches on Subject: below --
2000-05-12 13:10 Oliver Kiddle

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).