zsh-workers
 help / color / mirror / code / Atom feed
* A couple of completion problems
@ 2000-02-04  8:39 Oliver Kiddle
  0 siblings, 0 replies; 4+ messages in thread
From: Oliver Kiddle @ 2000-02-04  8:39 UTC (permalink / raw)
  To: Zsh workers

When establishing if a file is executable, symbolic links are not being
followed:

:>test1
chmod 755 test1
ln -s test1 test2
./t<tab>

This will just complete to test1 - test2 is ignored. This is in
3.1.6-dev-17; it works in 3.0.6.

The second problem occurs when completing configure:

cd /usr/local/src/zsh-3.1.6-dev-17
./configure --enable-fndir --<tab>

Here, nothing is completed.

Basically, completion doesn't work after a --enable-fndir which isn't
followed by '=' and a value. It may nolonger be the case but I think
that I have --enable-fndir in my usual zsh configure because it is
needed for functions to be installed; giving it a value would just
override the default directory. Anyway, it is certainly generally
possible for the parameters to arguments to be optional so completion
should work after them.

Oliver Kiddle


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

* Re: A couple of completion problems
@ 2000-02-04 11:50 Sven Wischnowsky
  0 siblings, 0 replies; 4+ messages in thread
From: Sven Wischnowsky @ 2000-02-04 11:50 UTC (permalink / raw)
  To: zsh-workers


Oliver Kiddle wrote:

> Sven Wischnowsky wrote:
> 
> > So, what do you all think: should we make all automatically found
> > options take their argument as being optional? Should we leave it to
> > the calling functions? Or should we add a style that can be used to
> > give a set of patterns and all options with matching names have their
> > argument turned into an optional one?
> 
> So how would _arguments behave differently if the argument to the long
> option is optional? My thinking is that the behaviour should be the same
> anyway:
> 
> command --foo<tab>   should insert an '=' which is auto-removed by a
> further space
> command --foo=<tab>  should complete the arguments to the foo option
> command --foo <tab>  the space (and lack of '=') surely means that we
> have moved on from the foo option and should be completing other
> options. If the argument to --foo is mandatory, then that's the user's
> problem for not specifying it. By continuing to try to complete
> arguments to --foo, zsh is going to achieve nothing.
> 
> I've probably missed the point somewhere though.

For _arguments a -foo= option means: argument directly following in
the the same word or in the next word. So, in your third case the
difference between an optional and a non-optional argument is that the 
at `bar -foo <TAB>' you can or cannot complete names of other options.

In earlier versions the -foo= didn't accept the argument in the next
word but Tanaka noticed that GNU commands work that way, so it was
changed. Of course in the old version we would have got normal
arguments and options as possible completions in the third case.

Bye
 Sven


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


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

* Re: A couple of completion problems
  2000-02-04 10:55 Sven Wischnowsky
@ 2000-02-04 11:18 ` Oliver Kiddle
  0 siblings, 0 replies; 4+ messages in thread
From: Oliver Kiddle @ 2000-02-04 11:18 UTC (permalink / raw)
  To: Zsh workers

Sven Wischnowsky wrote:

> So, what do you all think: should we make all automatically found
> options take their argument as being optional? Should we leave it to
> the calling functions? Or should we add a style that can be used to
> give a set of patterns and all options with matching names have their
> argument turned into an optional one?

So how would _arguments behave differently if the argument to the long
option is optional? My thinking is that the behaviour should be the same
anyway:

command --foo<tab>   should insert an '=' which is auto-removed by a
further space
command --foo=<tab>  should complete the arguments to the foo option
command --foo <tab>  the space (and lack of '=') surely means that we
have moved on from the foo option and should be completing other
options. If the argument to --foo is mandatory, then that's the user's
problem for not specifying it. By continuing to try to complete
arguments to --foo, zsh is going to achieve nothing.

I've probably missed the point somewhere though.

Thanks

Oliver


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

* Re: A couple of completion problems
@ 2000-02-04 10:55 Sven Wischnowsky
  2000-02-04 11:18 ` Oliver Kiddle
  0 siblings, 1 reply; 4+ messages in thread
From: Sven Wischnowsky @ 2000-02-04 10:55 UTC (permalink / raw)
  To: zsh-workers


Oliver Kiddle wrote:

> When establishing if a file is executable, symbolic links are not being
> followed:
> 
> :>test1
> chmod 755 test1
> ln -s test1 test2
> ./t<tab>
> 
> This will just complete to test1 - test2 is ignored. This is in
> 3.1.6-dev-17; it works in 3.0.6.

This is part of a more general problem: we weren't using the `-' in
the glob qualifiers in several places. This should fix it for all
executable files. There are some cases of `*(/)' in some of the User
functions. Since I don't know anything about the programs using them,
I'll leave it to someone else to decide if they should be changed to
`*(-/)'.

> The second problem occurs when completing configure:
> 
> cd /usr/local/src/zsh-3.1.6-dev-17
> ./configure --enable-fndir --<tab>
> 
> Here, nothing is completed.
> 
> Basically, completion doesn't work after a --enable-fndir which isn't
> followed by '=' and a value. It may nolonger be the case but I think
> that I have --enable-fndir in my usual zsh configure because it is
> needed for functions to be installed; giving it a value would just
> override the default directory. Anyway, it is certainly generally
> possible for the parameters to arguments to be optional so completion
> should work after them.

1) There was a buglet in computil that kept options from being
completed in positions of optional arguments.

2) Do you really think we should *always* allow option completion
after long options? I think the --help output should list such options 
as -foo[=bar] then (and if it does, _arguments makes the argument
optional). Or the caller function should have a pattern that says that 
-foo= options should take their argument as being optional (the hunk
in _arguments below should make that work, too).

So, what do you all think: should we make all automatically found
options take their argument as being optional? Should we leave it to
the calling functions? Or should we add a style that can be used to
give a set of patterns and all options with matching names have their
argument turned into an optional one?

Bye
 Sven

diff -ru ../z.old/Completion/Base/_arg_compile Completion/Base/_arg_compile
--- ../z.old/Completion/Base/_arg_compile	Fri Feb  4 11:00:11 2000
+++ Completion/Base/_arg_compile	Fri Feb  4 11:24:27 2000
@@ -71,7 +71,7 @@
 #              option -d follow close means "debug level" \
 #              option -k means "function names" action '->pair' \
 #              option -m means "minimum execution count" \
-#              argument means executable action '_files -g \*\(\*\)' \
+#              argument means executable action '_files -g \*\(-\*\)' \
 #              argument means "profile file" action '_files -g gmon.\*' \
 #              help '*=name*' means "function name" action '->funcs' \
 #              help '*=dirs*' means "directory" action _dir_list
diff -ru ../z.old/Completion/Base/_arguments Completion/Base/_arguments
--- ../z.old/Completion/Base/_arguments	Fri Feb  4 11:00:11 2000
+++ Completion/Base/_arguments	Fri Feb  4 11:54:04 2000
@@ -134,11 +134,7 @@
         tmp=("${(@)tmp:#*\=*}")
         tmpo=("${(@)${(@)tmpo%%\=*}//[^a-z0-9-]}")
 
-        if [[ "$descr" = ::* ]]; then
-	  cache=( "$cache[@]" "${(@)^tmpo}=${descr[2,-1]}" )
-        else
-	  cache=( "$cache[@]" "${(@)^tmpo}=${descr}" )
-        fi
+	cache=( "$cache[@]" "${(@)^tmpo}=${descr}" )
       fi
 
       # Everything else is just added as a option without arguments.
diff -ru ../z.old/Completion/Base/_command_names Completion/Base/_command_names
--- ../z.old/Completion/Base/_command_names	Fri Feb  4 11:00:11 2000
+++ Completion/Base/_command_names	Fri Feb  4 11:20:19 2000
@@ -8,7 +8,7 @@
 
 defs=(
   'commands:external command:compadd - ${(@k)commands}'
-  'executables:executable file or directory:_path_files -/g \*\(\*\)'
+  'executables:executable file or directory:_path_files -/g \*\(-\*\)'
 )
 
 if [[ "$1" = -e ]]; then
diff -ru ../z.old/Completion/Builtins/_hash Completion/Builtins/_hash
--- ../z.old/Completion/Builtins/_hash	Fri Feb  4 11:00:14 2000
+++ Completion/Builtins/_hash	Fri Feb  4 11:22:38 2000
@@ -11,7 +11,7 @@
   fi
 elif compset -P 1 '*='; then
   _wanted -C value values expl 'executable file' &&
-      _files "$expl[@]" -g '*(*)'
+      _files "$expl[@]" -g '*(-*)'
 else
   _wanted -C name commands expl command &&
       compadd "$expl[@]" -q -S '=' - "${(@k)commands}"
diff -ru ../z.old/Completion/User/_gdb Completion/User/_gdb
--- ../z.old/Completion/User/_gdb	Fri Feb  4 11:00:24 2000
+++ Completion/User/_gdb	Fri Feb  4 11:24:55 2000
@@ -4,7 +4,7 @@
 
 [[ "$PREFIX" = --* ]] &&
     _arguments -- '*=(CORE|SYM)FILE:core file:_files' \
-		  '*=EXECFILE:executable:_files \*\(\*\)' \
+		  '*=EXECFILE:executable:_files \*\(-\*\)' \
 		  '*=TTY:terminal device:compadd /dev/tty\*' && return 0
 
 if compset -P '-(cd|directory)='; then
@@ -13,7 +13,7 @@
   _wanted devices expl 'terminal device' && compadd "$expl[@]" - /dev/tty*
 elif compset -P '-(exec|se)='; then
   _description files expl executable
-  _files "$expl[@]" -g '*(*)'
+  _files "$expl[@]" -g '*(-*)'
 elif compset -P '-(symbols|core|command)='; then
   _files
 elif [[ "$PREFIX" = -* ]]; then
@@ -30,7 +30,7 @@
   (-d)     _files -/ && return 0 ;;
   (-[csx]) _files && return 0 ;;
   (-e)     _description files expl executable
-           _files "$expl[@]" -g '*(*)' && return 0 ;;
+           _files "$expl[@]" -g '*(-*)' && return 0 ;;
   (-b)     _wanted -V values expl 'baud rate' &&
                compadd "$expl[@]" 0 50 75 110 134 150 200 300 600 1200 1800 \
 			          2400 4800 9600 19200 38400 57600 115200 \
@@ -47,6 +47,6 @@
     _alternative 'files:: _files' "processes:: _pids -m ${w[1]:t}"
   else
     _description files expl executable
-    _files "$expl[@]" -g '*(*)'
+    _files "$expl[@]" -g '*(-*)'
   fi
 fi
diff -ru ../z.old/Completion/User/_ssh Completion/User/_ssh
--- ../z.old/Completion/User/_ssh	Fri Feb  4 11:00:27 2000
+++ Completion/User/_ssh	Fri Feb  4 11:25:26 2000
@@ -91,7 +91,7 @@
             ;;
           *(#i)xauthlocation*)
             _description files expl 'xauth program'
-            _files "$expl[@]" -g '*(*)' && ret=0
+            _files "$expl[@]" -g '*(-*)' && ret=0
             ;;
           esac
         else
@@ -155,7 +155,7 @@
       '-c[select encryption cipher]:encryption cipher:(idea des 3des blowfish arcfour tss none)' \
       '-P[specify port on remote host]:port number on remote host:' \
       '-i[select identity file]:SSH identity file:_files' \
-      '-S[specify path to ssh]:path to ssh:_files -g \*\(\*\)' \
+      '-S[specify path to ssh]:path to ssh:_files -g \*\(-\*\)' \
       '-o[give SSH options]:options:->options' \
       '-p[preserve modification times]' \
       '-r[recursively copy directories]' \
diff -ru ../z.old/Completion/User/_strip Completion/User/_strip
--- ../z.old/Completion/User/_strip	Fri Feb  4 11:00:27 2000
+++ Completion/User/_strip	Fri Feb  4 11:25:34 2000
@@ -3,4 +3,4 @@
 local expl
 
 _description files expl executable
-_files "$expl[@]" -g '*(*)'
+_files "$expl[@]" -g '*(-*)'
diff -ru ../z.old/Completion/X/_xrdb Completion/X/_xrdb
--- ../z.old/Completion/X/_xrdb	Fri Feb  4 11:00:31 2000
+++ Completion/X/_xrdb	Fri Feb  4 11:25:45 2000
@@ -3,7 +3,7 @@
 _arguments \
   -{help,all,global,screen,screens,n,quiet,nocpp,symbols,query,load,merge,remove,retain} \
   '-display:display:_x_display' \
-  '-cpp:preprocessor program:_files -g \*\(\*\)' \
+  '-cpp:preprocessor program:_files -g \*\(-\*\)' \
   '-edit:file to insert:_files' \
   '-backup:suffix for backup: ' \
   '*:defaults file:_files'
diff -ru ../z.old/Completion/X/_xutils Completion/X/_xutils
--- ../z.old/Completion/X/_xutils	Fri Feb  4 11:00:31 2000
+++ Completion/X/_xutils	Fri Feb  4 11:25:57 2000
@@ -138,7 +138,7 @@
     '(-global -all -screens)-screen' \
     '(-global -all -screen)-screens' \
     '-n[only display on stdout]' \
-    '(-nocpp)-cpp:preprocessor program:_files -g \*\(\*\)' \
+    '(-nocpp)-cpp:preprocessor program:_files -g \*\(-\*\)' \
     '(-cpp)-nocpp' \
     '(-load -override -merge -remove)-query' \
     '(-query -override -merge -remove)-load' \
diff -ru ../z.old/Src/Zle/computil.c Src/Zle/computil.c
--- ../z.old/Src/Zle/computil.c	Fri Feb  4 11:00:41 2000
+++ Src/Zle/computil.c	Fri Feb  4 11:39:48 2000
@@ -1406,7 +1406,8 @@
 	    return 1;
 	}
     case 'O':
-	if (ca_laststate.opt || (ca_laststate.doff && ca_laststate.def)) {
+	if (ca_laststate.opt || (ca_laststate.doff && ca_laststate.def) ||
+	    (ca_laststate.def && ca_laststate.def->type == CAA_OPT)) {
 	    LinkList next = newlinklist();
 	    LinkList direct = newlinklist();
 	    LinkList odirect = newlinklist();

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


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

end of thread, other threads:[~2000-02-04 11:50 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-02-04  8:39 A couple of completion problems Oliver Kiddle
2000-02-04 10:55 Sven Wischnowsky
2000-02-04 11:18 ` Oliver Kiddle
2000-02-04 11:50 Sven Wischnowsky

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).