From b7f74bc9771f6d58f412117d8a47181fcd022735 Mon Sep 17 00:00:00 2001 From: Ryan Kavanagh Date: Mon, 14 Jan 2013 10:34:56 -0500 Subject: Switch to mutt_bgrun for opening pdffiles --- .mailcap | 2 +- bin/mutt_bgrun | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 1 deletion(-) create mode 100755 bin/mutt_bgrun diff --git a/.mailcap b/.mailcap index a8b171f..de2d977 100644 --- a/.mailcap +++ b/.mailcap @@ -1,6 +1,6 @@ text/html; w3m %s; nametemplate=%s.html text/html; w3m -dump %s; nametemplate=%s.html; copiousoutput -application/pdf; evince '%s'; nametemplate=%s.pdf; test=test "$DISPLAY" != ""; description=Portable Document Format +application/pdf; mutt_bgrun evince '%s'; nametemplate=%s.pdf; test=test "$DISPLAY" != ""; description=Portable Document Format application/x-pdf; evince '%s'; nametemplate=%s.pdf; test=test "$DISPLAY" != ""; description=Portable Document Format application/x-gzpdf; evince '%s'; nametemplate=%s.pdf.gz; test=test "$DISPLAY" != ""; description=Portable Document Format application/x-bzpdf; evince '%s'; nametemplate=%s.pdf.bz2; test=test "$DISPLAY" != ""; description=Portable Document Format diff --git a/bin/mutt_bgrun b/bin/mutt_bgrun new file mode 100755 index 0000000..7f03b67 --- /dev/null +++ b/bin/mutt_bgrun @@ -0,0 +1,114 @@ +#!/bin/sh +# @(#) mutt_bgrun $Revision: 1.4 $ + +# mutt_bgrun - run an attachment viewer from mutt in the background +# Copyright (C) 1999-2002 Gary A. Johnson +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# SYNOPSIS +# mutt_bgrun viewer [viewer options] file +# +# DESCRIPTION +# Mutt invokes external attachment viewers by writing the +# attachment to a temporary file, executing the pipeline specified +# for that attachment type in the mailcap file, waiting for the +# pipeline to terminate, writing nulls over the temporary file, +# then deleting it. This causes problems when using graphical +# viewers such as qvpview and acroread to view attachments. +# +# If qvpview, for example, is executed in the foreground, the mutt +# user interface is hung until qvpview exits, so the user can't do +# anything else with mutt until he or she finishes reading the +# attachment and exits qvpview. This is especially annoying when +# a message contains several MS Office attachments--one would like +# to have them all open at once. +# +# If qvpview is executed in the background, it must be given +# enough time to completely read the file before returning control +# to mutt, since mutt will then obliterate the file. Qvpview is +# so slow that this time can exceed 20 seconds, and the bound is +# unknown. So this is again annoying. +# +# The solution provided here is to invoke the specified viewer +# from this script after first copying mutt's temporary file to +# another temporary file. This script can then quickly return +# control to mutt while the viewer can take as much time as it +# needs to read and render the attachment. +# +# EXAMPLE +# To use qvpview to view MS Office attachments from mutt, add the +# following lines to mutt's mailcap file. +# +# application/msword; mutt_bgrun qvpview %s +# application/vnd.ms-excel; mutt_bgrun qvpview %s +# application/vnd.ms-powerpoint; mutt_bgrun qvpview %s +# +# AUTHOR +# Gary A. Johnson +# +# +# ACKNOWLEDGEMENTS +# My thanks to the people who have commented on this script and +# offered solutions to shortcomings and bugs, especially Edmund +# GRIMLEY EVANS and Andreas Somogyi +# . + +prog=${0##*/} + +# Check the arguments first. + +if [ "$#" -lt "2" ] +then + echo "usage: $prog viewer [viewer options] file" >&2 + exit 1 +fi + +# Separate the arguments. Assume the first is the viewer, the last is +# the file, and all in between are options to the viewer. + +viewer="$1" +shift + +while [ "$#" -gt "1" ] +do + options="$options $1" + shift +done + +file=$1 + +# Create a temporary directory for our copy of the temporary file. +# +# This is more secure than creating a temporary file in an existing +# directory. + +tmpdir=/tmp/$LOGNAME$$ +umask 077 +mkdir "$tmpdir" || exit 1 +tmpfile="$tmpdir/${file##*/}" + +# Copy mutt's temporary file to our temporary directory so that we can +# let mutt overwrite and delete it when we exit. + +cp "$file" "$tmpfile" + +# Run the viewer in the background and delete the temporary files when done. + +( + "$viewer" $options "$tmpfile" + rm -f "$tmpfile" + rmdir "$tmpdir" +) & -- cgit v1.2.3