Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
_files: -/ causes caller's _alternative to be disregarded
- X-seq: zsh-workers 39154
- From: Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: _files: -/ causes caller's _alternative to be disregarded
- Date: Fri, 2 Sep 2016 04:32:02 +0000
- Dkim-signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= daniel.shahaf.name; h=content-transfer-encoding:content-type :date:from:message-id:mime-version:subject:to:x-sasl-enc :x-sasl-enc; s=mesmtp; bh=JBLiFrLSlmeOPRwR6iZ6807Likg=; b=FMhIHU mvYLs85aNyAeB5/KGnMhXZ+42MFY/7DoL43RSMRSofy1hUItAq8wFOcgD6tlveY/ sckNGIG4F7d0Z/Ru89SB5SoV0q5AC7LtOwKtKRfyJitmXGJ24bQOJFoINwI07rts 6WRb90RFYNKJ1DRpRDEg/pz1OIaOZmFX4r/bE=
- Dkim-signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:content-type :date:from:message-id:mime-version:subject:to:x-sasl-enc :x-sasl-enc; s=smtpout; bh=JBLiFrLSlmeOPRwR6iZ6807Likg=; b=f6wWC ynLZ6u5ZfJ6UkdecrhQf2NG/Gup7qXG4lwRLu5HXn1rTvoO/BKbC4dI1GiYrKdy+ Y2KWJ/NJJUOFLr5Jsx5yjsi2qviASt0hvSpyBpoThB+9FenB7takg3N+JlaJvjaO Ga+x/foPxZ4kB7XfPu2oj+Gxk8HX6VMWdGDeGI=
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
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.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author