From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Wed, 5 Apr 2006 11:14:28 +0100 From: Peter Stephenson To: zsh-workers@sunsite.dk, 339635-forwarded@bugs.debian.org Subject: Re: [ramk@cse.iitm.ernet.in: Bug#339635: zsh: zsh-mime-handler used even in the case of executable files] Message-Id: <20060405111428.2902ee9f.pws@csr.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Seq: zsh-workers 22403 Clint Adams wrote: > From: "R.Ramkumar" > > Some scripts end with a .sh (a common example being autogen.sh). For > such scripts, zsh-mime-handler ends up executing the mime action for > the suffix sh, which sometimes happens to be to just display the > file. This, I guess is due to alias -s, which blindly maps in case > the suffix matches. To counter this, it would be good if > zsh-mime-handler uses a style to take a set of patterns that would > be executed as-is, despite having a suffix found in the mime > configuration. I am enclosing a patch for the same. I have made the > set of executable files as the default for this style, I hope this > deviation from the original behaviour is acceptable. The change from the original behaviour seems sensible. I'll commit this with the following documentation. I've also turned $@ into "$@" in zsh-mime-handler. Index: Doc/Zsh/contrib.yo =================================================================== RCS file: /cvsroot/zsh/zsh/Doc/Zsh/contrib.yo,v retrieving revision 1.55 diff -u -r1.55 contrib.yo --- Doc/Zsh/contrib.yo 20 Mar 2006 11:06:25 -0000 1.55 +++ Doc/Zsh/contrib.yo 5 Apr 2006 10:12:20 -0000 @@ -1391,6 +1391,15 @@ tt(sh) process. This is more efficient, but may not work in the occasional cases where the mailcap handler uses strict POSIX syntax. ) +item(tt(execute-as-is))( +This style gives a list of patterns to be matched against files +passed for execution with a handler program. If the file matches +the pattern, the entire command line is executed in its current form, +with no handler. This is useful for files which might have suffixes +but nonetheless be executable in their own right. If the style +is not set, the pattern tt(*+LPAR()*+RPAR()) is used; hence executable +files are executed directly and not passed to a handler. +) item(tt(flags))( Defines flags to go with a handler; the context is as for the tt(handler) style, and the format is as for the flags in tt(mailcap). Index: Functions/MIME/zsh-mime-handler =================================================================== RCS file: /cvsroot/zsh/zsh/Functions/MIME/zsh-mime-handler,v retrieving revision 1.4 diff -u -r1.4 zsh-mime-handler --- Functions/MIME/zsh-mime-handler 28 Feb 2006 11:57:20 -0000 1.4 +++ Functions/MIME/zsh-mime-handler 5 Apr 2006 10:12:20 -0000 @@ -45,6 +45,22 @@ context=":mime:.${suffix}:" local handler flags no_sh no_bg +local -a exec_asis + +# 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. +zstyle -a $context execute-as-is exec_asis || exec_asis=('*(*)') + +local pattern + +for pattern in $exec_asis; do + if [[ $1 = ${~pattern} ]]; then + "$@" + return 0 + fi +done zstyle -s $context handler handler || handler="${zsh_mime_handlers[$suffix]}" -- Peter Stephenson Software Engineer CSR PLC, Churchill House, Cambridge Business Park, Cowley Road Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070 To access the latest news from CSR copy this link into a web browser: http://www.csr.com/email_sig.php