about summary refs log tree commit diff
path: root/Completion/Unix/Type/_have_glob_qual
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2009-03-13 09:59:58 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2009-03-13 09:59:58 +0000
commit1f37225708285c4e1f343c34c92064bbef68498a (patch)
tree2bd3ce7c52cc2c291412918a3f10857c36b5b4bc /Completion/Unix/Type/_have_glob_qual
parentb7f4c91597226b5f95f7f153618cf52c665c0b71 (diff)
downloadzsh-1f37225708285c4e1f343c34c92064bbef68498a.tar.gz
zsh-1f37225708285c4e1f343c34c92064bbef68498a.tar.xz
zsh-1f37225708285c4e1f343c34c92064bbef68498a.zip
26723: centralise test for matching glob qualifiers in file completion
Diffstat (limited to 'Completion/Unix/Type/_have_glob_qual')
-rw-r--r--Completion/Unix/Type/_have_glob_qual24
1 files changed, 24 insertions, 0 deletions
diff --git a/Completion/Unix/Type/_have_glob_qual b/Completion/Unix/Type/_have_glob_qual
new file mode 100644
index 000000000..d174406df
--- /dev/null
+++ b/Completion/Unix/Type/_have_glob_qual
@@ -0,0 +1,24 @@
+#autoload
+
+# Test if $1 has glob qualifiers.  This is partly magic, partly guesswork,
+# wholly flakey.
+#
+# If $2 is "complete" test if the qualifiers are complete (up to the ")"
+# at the end of the word), else that they are incomplete.
+# Sets match, mbegin, mend to reflect their location.
+# $match[1] is everything up to the start of the qualifiers themselves;
+#   this may therefore end in "(" or "(#q".
+# $match[2] is everything at the start not counting the "(" or "(#q".
+# $match[5] is the set of qualifiers themselves, not including a trailing
+#   parenthesis.
+local complete
+
+[[ $2 = complete ]] && complete=")"
+
+[[ -z $compstate[quote] &&
+  ( -o bareglobqual &&
+       $1 = (#b)(((*[^\\\$]|)(\\\\)#)\()([^\)\|\~]#)$complete &&
+       ${#match[1]} -gt 1 ||
+     -o extendedglob &&
+       $1 = (#b)(((*[^\\\$]|)(\\\\)#)"(#q")([^\)]#)$complete
+    ) ]]