Skip to content

Instantly share code, notes, and snippets.

@xxx
Created June 16, 2012 23:35
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xxx/2942855 to your computer and use it in GitHub Desktop.
Save xxx/2942855 to your computer and use it in GitHub Desktop.
view_attachment.sh file for mutt on OSX. Tweaked from others available on the net to handle filenames with multiple dots in them, as well as correctly parsing the output of `file -bi` when a type is not specified.
#!/bin/bash
#
# Author: Eric Gebhart
#
# Purpose: To be called by mutt as indicated by .mailcap to handle mail attachments.
#
# Function: Copy the given file to a temporary directory so mutt
# Won't delete it before it is read by the application.
#
# Along the way, discern the file type or use the type
# That is given.
#
# Finally use 'open' or 'open -a' if the third argument is
# given.
#
#
# Arguments:
#
# $1 is the file
# $2 is the type - for those times when file magic isn't enough.
# I frequently get html mail that has no extension
# and file can't figure out what it is.
#
# Set to '-' if you don't want the type to be discerned.
# Many applications can sniff out the type on their own.
# And they do a better job of it too.
#
# Open Office and MS Office for example.
#
# $3 is open with. as in open -a 'open with this .app' foo.xls
#
# Examples: These are typical .mailcap entries which use this program.
#
# Image/JPEG; /Users/vdanen/.mutt/view_attachment %s
# Image/PNG; /Users/vdanen/.mutt/view_attachment %s
# Image/GIF; /Users/vdanen/.mutt/view_attachment %s
#
# Application/PDF; /Users/vdanen/.mutt/view_attachment %s
#
# #This HTML example passes the type because file doesn't always work and
# #there aren't always extensions.
#
# text/html; /Users/vdanen/.mutt/view_attachment %s html
#
# # If your Start OpenOffice.org.app is spelled with a space like this one, <--
# # then you'll need to precede the space with a \ . I found that too painful
# # and renamed it with an _.
#
# Application/vnd.ms-excel; /Users/vdanen/.mutt/view_attachment %s "-" '/Applications/OpenOffice.org1.1.2/Start_OpenOffice.org.app'
# Application/msword; /Users/vdanen/.mutt/view_attachment %s "-" '/Applications/OpenOffice.org1.1.2/Start_OpenOffice.org.app'
#
#
# Debugging: If you have problems set debug to 'yes'. That will cause a debug file
# be written to /tmp/mutt_attach/debug so you can see what is going on.
#
# See Also: The man pages for open, file, basename
#
# the tmp directory to use.
tmpdir="$HOME/.mutt/tmp/mutt_attach"
# the name of the debug file if debugging is turned on.
debug_file=$tmpdir/debug
# debug. yes or no.
#debug="no"
debug="yes"
type=$2
open_with=$3
# make sure the tmpdir exists.
mkdir -p $tmpdir
# clean it out. Remove this if you want the directory
# to accumulate attachment files.
rm -rf $tmpdir/*
# Mutt puts everything in /tmp by default.
# This gets the basic filename from the full pathname.
filename=`basename $1`
# get rid of the extenson and save the name for later.
#file=`echo $filename | cut -d"." -f1`
file=`echo $filename | sed 's/\.[^.]*$//'`
if [ $debug = "yes" ]; then
echo "1:" $1 " 2:" $2 " 3:" $3 > $debug_file
echo "Filename:"$filename >> $debug_file
echo "File:"$file >> $debug_file
echo "===========================" >> $debug_file
fi
# if the type is empty then try to figure it out.
if [ -z $type ]; then
#type=`file -bi $1 | cut -d"/" -f2`
type=`file -bi $1 | sed -e 's/^[^\/]*\///' -e 's/;.*$//'`
fi
# if the type is '-' then we don't want to mess with type.
# Otherwise we are rebuilding the name. Either from the
# type that was passed in or from the type we discerned.
if [ $type = "-" ]; then
newfile=$filename
else
newfile=$file.$type
fi
newfile=$tmpdir/$newfile
# Copy the file to our new spot so mutt can't delete it
# before the app has a chance to view it.
cp $1 $newfile
if [ $debug = "yes" ]; then
echo "File:" $file "TYPE:" $type >> $debug_file
echo "Newfile:" $newfile >> $debug_file
echo "Open With:" $open_with >> $debug_file
fi
# If there's no 'open with' then we can let preview do it's thing.
# Otherwise we've been told what to use. So do an open -a.
if [ -z $open_with ]; then
open $newfile
else
open -a "$open_with" $newfile
fi
@xxx
Copy link
Author

xxx commented Jun 16, 2012

Originally linked from http://linsec.ca/Using_mutt_on_OS_X , and the file itself at http://linsec.ca/files/c/c9/View_attachment.sh . Gist description silently cuts off after an unspecified length or this would be there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment