summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Functions/MIME/zsh-mime-handler21
2 files changed, 22 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 03e6f79fb..155018ecb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-04-06 Peter Stephenson <pws@csr.com>
+
+ * 22405: Functions/MIME/zsh-mime-handler: pattern matching
+ in 22394 needed tweaking.
+
2006-04-05 Clint Adams <clint@zsh.org>
* 22404: Completion/Unix/Command/_cowsay:
diff --git a/Functions/MIME/zsh-mime-handler b/Functions/MIME/zsh-mime-handler
index ab0c27fb0..34082011e 100644
--- a/Functions/MIME/zsh-mime-handler
+++ b/Functions/MIME/zsh-mime-handler
@@ -54,12 +54,25 @@ local -a exec_asis
zstyle -a $context execute-as-is exec_asis || exec_asis=('*(*)')
local pattern
+local -a files
+
+# In case the pattern contains glob qualifiers, as it does by default,
+# we need to do real globbing, not just pattern matching.
+# The strategy is to glob the files in the directory using the
+# pattern and see if the one we've been passed is in the list.
+local dirpref=${1%/*}
+if [[ $dirpref = $1 ]]; then
+ dirpref=
+else
+ dirpref+=/
+fi
for pattern in $exec_asis; do
- if [[ $1 = ${~pattern} ]]; then
- "$@"
- return 0
- fi
+ files=(${dirpref}${~pattern})
+ if [[ -n ${files[(r)$1]} ]]; then
+ "$@"
+ return 0
+ fi
done
zstyle -s $context handler handler ||