zsh-workers
 help / color / mirror / code / Atom feed
* _files: -/ causes caller's _alternative to be disregarded
@ 2016-09-02  4:32 Daniel Shahaf
  2016-09-02  5:03 ` Bart Schaefer
  0 siblings, 1 reply; 4+ messages in thread
From: Daniel Shahaf @ 2016-09-02  4:32 UTC (permalink / raw)
  To: zsh-workers

I ran into a problem, and found something that was wrong and fixed it
and that made the problem go away, but I don't fully understand why the
patch does in fact fix the problem.

Here's a minimal example:

[[[
% _g() { _files -/ "$@" }
% _f() { _alternative 'x:x:_g' 'y:y:_hosts' }
% compdef _f f 
% zstyle \* list-dirs-first true 
% f <TAB>
(shows just files, doesn't show hosts)
]]]

Tracing, _files takes this codepath:
.
    37	elif [[ $type = */* ]]; then
    38	  glob="*(-/)"
    ⋮
    66	elif zstyle -t ":completion:${curcontext}:" list-dirs-first; then
    67	  pats=( " *(-/):directories:directory ${${glob:-*}//:/\\:}(#q^-/):globbed-files" '*:all-files' )
                                               ^^^^^^^^^^^^^^^^^^^^
.
and «*(-/)(#q^-/)» is not a valid pattern.

Adding another #q fixes the symptom:

[[[
diff --git Completion/Unix/Type/_files Completion/Unix/Type/_files
index 6987824..2b0c558 100644
--- Completion/Unix/Type/_files
+++ Completion/Unix/Type/_files
@@ -35,7 +35,7 @@ if (( $tmp[(I)-g*] )); then
   [[ "$glob" = (#b)(*\()([^\|\~]##\)) && $match[2] != \#q* ]] &&
       glob="${match[1]}#q${match[2]}"
 elif [[ $type = */* ]]; then
-  glob="*(-/)"
+  glob="*(#q-/)"
 fi
 tmp=$opts[(I)-F]
 if (( tmp )); then
]]]

What I'm not clear about is why the invalid pattern for the
"globbed-files" tag caused the "y:y:_hosts" alternative to be skipped.

Cheers,

Daniel

P.S.  The non-minimal example was «git push <TAB>» not offering remotes.


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

end of thread, other threads:[~2016-09-02 18:30 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-02  4:32 _files: -/ causes caller's _alternative to be disregarded Daniel Shahaf
2016-09-02  5:03 ` Bart Schaefer
2016-09-02 18:20   ` Daniel Shahaf
2016-09-02 18:29   ` Daniel Shahaf

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