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

Re: PATCH 3/5: _imagemagick: complete all files if image files didn't match



On Wed, Aug 12, 2015 at 7:20 PM, Oliver Kiddle <okiddle@xxxxxxxxxxx> wrote:
> Mikael Magnusson wrote:
>> -  _files "$@" -g "*.(#i)(${~formats//:/|})(-.)"
>> +  _files "$@" -g "*.(#i)(${~formats//:/|})(-.)" || _files "$@"
>
> _files already does this internally, configurable via the file-patterns
> style. From zsh -f or in my full setup, this already works for me. This
> same change might equally be applicable to every use of _files with -g
> that we have.
>
> You might want to instead check your file-patterns styles to see what
> you've configured that broke this.

You're right that it works in zsh -f, however, I don't have any
file-patterns styles set and it still doesn't work in my setup.

This is the line that breaks the desired behaviour,
zstyle ':completion:*' list-dirs-first true

Which I find to be somewhat unexpected.

This seems to fix it, and brings the l-d-f case in line with the
default case below it.

diff --git i/Completion/Unix/Command/_imagemagick
w/Completion/Unix/Command/_imagemagick
index c43086c..115cb01 100644
--- i/Completion/Unix/Command/_imagemagick
+++ w/Completion/Unix/Command/_imagemagick
@@ -14,7 +14,7 @@ typeset -A opt_args
 formats=jpg:jpeg:jp2:j2k:jpc:jpx:jpf:tiff:miff:ras:bmp:cgm:dcx:ps:eps:fig:fits:fpx:gif:mpeg:p

 if (( $# )); then
-  _files "$@" -g "*.(#i)(${~formats//:/|})(-.)" || _files "$@"
+  _files "$@" -g "*.(#i)(${~formats//:/|})(-.)"
   return
 fi

diff --git i/Completion/Unix/Type/_files w/Completion/Unix/Type/_files
index f4a8fc2..13f4871 100644
--- i/Completion/Unix/Type/_files
+++ w/Completion/Unix/Type/_files
@@ -72,7 +72,7 @@ elif zstyle -t ":completion:${curcontext}:"
list-dirs-first; then
       glob="$glob(#q^-/)"
     fi

-    pats=( " *(-/):directories:directories ${glob//:/\\:}:globbed-files" )
+    pats=( " *(-/):directories:directories
${glob//:/\\:}:globbed-files" '*:all-files' )
   elif [[ "$type" = */* ]] then
     pats=( '*(-/):directories ' '*:all-files ' )
   else

[extra context for reference]
    pats=( '*(-/):directories:directories *(^-/):other-files ' )
  fi
else
  if [[ "$type" = *g* ]]; then

  # People prefer to have directories shown on first try as default.
  # Even if the calling function didn't use -/.
  #
  # if [[ "$type" = */* ]]; then

    pats=( " ${glob//:/\\:}:globbed-files *(-/):directories" '*:all-files '

-- 
Mikael Magnusson



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