From: Peter Stephenson <p.w.stephenson@ntlworld.com>
To: Zsh Hackers' List <zsh-workers@zsh.org>
Subject: PATCH: execute-never style for MIME handler
Date: Sun, 8 Sep 2013 19:24:20 +0100 [thread overview]
Message-ID: <20130908192420.2b52f0e5@pws-pc.ntlworld.com> (raw)
This helps with problems with trying to resolve between executable files
and MIME types in the function-based MIME handler. If the file is
executable it's usually useful to execute it, since that's what would
happen if the MIME handler weren't installed. However, this isn't a
good idea on a file system from an alien OS or a mounted external
medium, and the problem is particularly acute for FATS-based file
systems where everything looks executable. Now you can tell the handler
about such file systems.
I suppose you could even tell it to use wine with .exe files...
diff --git a/Doc/Zsh/contrib.yo b/Doc/Zsh/contrib.yo
index 48c5105..9d3fc75 100644
--- a/Doc/Zsh/contrib.yo
+++ b/Doc/Zsh/contrib.yo
@@ -2881,6 +2881,28 @@ hence executable files are executed directly and not passed to a
handler, and the option tt(AUTO_CD) may be used to change to directories
that happen to have MIME suffixes.
)
+kindex(execute-never, MIME style)
+item(tt(execute-never))(
+This style is useful in combination with tt(execute-as-is). It is
+set to an array of patterns corresponding to full paths to files that
+should never be treated as executable, even if the file passed to
+the MIME handler matches tt(execute-as-is). This is useful for file
+systems that don't handle execute permission or that contain executables
+from another operating system. For example, if tt(/mnt/windows) is a
+Windows mount, then
+
+example(zstyle ':mime:*' execute-never '/mnt/windows/*')
+
+will ensure that any files found in that area will be executed as MIME
+types even if they are executable. As this example shows, the complete
+file name is matched against the pattern, regardless of how the file
+was passed to the handler. The file is resolved to a full path using
+the tt(:A) modifier described in
+ifzman(the subsection Modifers in zmanref(zshexpn))\
+ifnzman(noderef(Modifiers)));
+this means that symbolic links are resolved where possible, so that
+links into other file systems behave in the correct fashion.
+)
kindex(file-path, MIME style)
item(tt(file-path))(
Used if the style tt(find-file-in-path) is true for the same context.
diff --git a/Functions/MIME/zsh-mime-handler b/Functions/MIME/zsh-mime-handler
index 7245c20..b9f76c6 100644
--- a/Functions/MIME/zsh-mime-handler
+++ b/Functions/MIME/zsh-mime-handler
@@ -76,13 +76,14 @@ suffix=${suffix#*.}
local handler flags no_sh no_bg arg bg_flag="&"
integer i
-local -a exec_asis hand_nonex
+local -a exec_asis hand_nonex exec_never
# Set to a list of patterns which are ignored and executed as they are,
# despite being called for interpretation by the mime handler.
# Defaults to executable files, which ensures that they are executed as
# they are, even if they have a suffix.
zsh-mime-contexts -a $suffix execute-as-is exec_asis || exec_asis=('*(*)' '*(/)')
+zsh-mime-contexts -a $suffix execute-never exec_never
# Set to a list of patterns for which the handler will be used even
# if the file doesn't exist on the disk.
@@ -125,6 +126,9 @@ fi
for pattern in $exec_asis; do
files=(${dirpref}${~pattern})
if [[ -n ${files[(r)$1]} ]]; then
+ for pattern in $exec_never; do
+ [[ ${1:A} = ${~pattern} ]] && break 2
+ done
if (( list )); then
for (( i = 1; i <= $#; i++ )); do
(( i == 1 )) || print -n " "
--
Peter Stephenson <p.w.stephenson@ntlworld.com>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/
reply other threads:[~2013-09-08 18:24 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130908192420.2b52f0e5@pws-pc.ntlworld.com \
--to=p.w.stephenson@ntlworld.com \
--cc=zsh-workers@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).