Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Unexpected behavior for completion funcion _remote_files()



Hi.

> Ideally, any extra options from before -- should be passed on.

I understood your intention well.

> Could you perhaps try the following?

Your patch works fine with 'docker exec ...'.

I also check '_remote_files -x foobar -- docker exec ..',
it works as expected.

Thank you so much.


2016-09-07 0:55 GMT+09:00 Oliver Kiddle <okiddle@xxxxxxxxxxx>:

> Yoshio Hanawa wrote:
> > When I tried Zsh completion funcion _remote_files with 'docker exec
> ...', I
> > found the command line options for _remote_files (in this case, 'exec
> ...')
> > are passed directly to compadd. I think it's unexpected behavior.
>
> Yes, _remote_files shouldn't pass options that come after -- to compadd.
> Thanks for the report.
>
> > "$@" in compadd arguments seems to be unnecessary, so should simply be
> > removed.
>
> Ideally, any extra options from before -- should be passed on.
> At the very least it should allow for them being there - currently, just
> using
> _wanted with _remote_files fails. Using this would allow docker
> completion to override the description given with the files if 'remote
> file' is not applicable.
>
> > The following patch works fine on my environment.
>
> Could you perhaps try the following? I don't have docker so have only
> tested this with ssh.
>
> Thanks
>
> Oliver
>
> diff --git a/Completion/Unix/Type/_remote_files b/Completion/Unix/Type/_
> remote_files
> index db33164..54bd438 100644
> --- a/Completion/Unix/Type/_remote_files
> +++ b/Completion/Unix/Type/_remote_files
> @@ -28,16 +28,19 @@
>
>
>  # There should be coloring based on all the different ls -F classifiers.
> -local expl rempat remfiles remdispf remdispd args cmd cmd_args suf ret=1
> +local expl rempat remfiles remdispf remdispd args cmd suf ret=1
> +local -a args cmd_args
>  local glob host
>
>  if zstyle -T ":completion:${curcontext}:files" remote-access; then
>
>    # Parse options to _remote_files. Stops at the first "--".
>    zparseopts -D -E -a args / g:=glob h:=host
> -  shift
>    (( $#host)) && shift host || host="${IPREFIX%:}"
>
> +  args=( ${argv[1,(I)--]} )
> +  shift ${#args}
> +  args[-1]=()
>    # Command to run on the remote system.
>    cmd="$1"
>    shift
> @@ -45,9 +48,9 @@ if zstyle -T ":completion:${curcontext}:files"
> remote-access; then
>    # Handle arguments to ssh.
>    if [[ $cmd == ssh ]]; then
>      zparseopts -D -E -a cmd_args p: 1 2 4 6 F:
> -    cmd_args="-o BatchMode=yes $cmd_args -a -x"
> +    cmd_args=( -o BatchMode=yes "$cmd_args[@]" -a -x )
>    else
> -    cmd_args="$@"
> +    cmd_args=( "$@" )
>    fi
>
>    if [[ -z $QIPREFIX ]]
> @@ -74,8 +77,8 @@ if zstyle -T ":completion:${curcontext}:files"
> remote-access; then
>    while _tags; do
>      while _next_label files expl ${suf:-remote directory}; do
>        [[ -n $suf ]] &&
> -          compadd "$@" "$expl[@]" -d remdispf ${(q)remdispf%[*=|]} &&
> ret=0
> -      compadd ${suf:+-S/} -r "/ \t\n\-" "$@" "$expl[@]" -d remdispd \
> +          compadd "$args[@]" "$expl[@]" -d remdispf ${(q)remdispf%[*=|]}
> && ret=0
> +      compadd ${suf:+-S/} -r "/ \t\n\-" "$args[@]" "$expl[@]" -d remdispd
> \
>         ${(q)remdispd%/} && ret=0
>      done
>      (( ret )) || return 0
>


Messages sorted by: Reverse Date, Date, Thread, Author