Add mutt specific scripts here
authorJulien Valroff <julien@kirya.net>
Wed, 14 Sep 2011 18:52:21 +0000 (20:52 +0200)
committerJulien Valroff <julien@kirya.net>
Wed, 14 Sep 2011 18:52:21 +0000 (20:52 +0200)
mutt-bgrun [new file with mode: 0755]
mutt-check-attachment [new file with mode: 0755]
mutt-copy2dir [new file with mode: 0755]
mutt-killsig [new file with mode: 0755]

diff --git a/mutt-bgrun b/mutt-bgrun
new file mode 100755 (executable)
index 0000000..364c59b
--- /dev/null
@@ -0,0 +1,119 @@
+#!/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
+#      <garyjohn@spk.agilent.com>
+#
+# ACKNOWLEDGEMENTS
+#      My thanks to the people who have commented on this script and
+#      offered solutions to shortcomings and bugs, especially Edmund
+#      GRIMLEY EVANS <edmundo@rano.org> and Andreas Somogyi
+#      <aso@somogyi.nu>.
+#
+# LOCAL CHANGES
+#   2011-14-09 Julien Valroff <julien@kirya.net>: launch the viewer quietly
+#   by redirecting stder and stdout to /dev/null
+#
+
+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" > /dev/null 2>&1
+    rm -f "$tmpfile"
+    rmdir "$tmpdir"
+) &
diff --git a/mutt-check-attachment b/mutt-check-attachment
new file mode 100755 (executable)
index 0000000..9974978
--- /dev/null
@@ -0,0 +1,65 @@
+#!/bin/bash
+
+##
+## Script: /usr/local/bin/mutt_check_attachment_before_send.sh
+##
+## Original source: http://wiki.mutt.org/?ConfigTricks/CheckAttach
+##
+## This slightly amended version uses zenity if available and if called from a X sessions
+##
+## Edit muttrc to have this line:
+## set sendmail = "/path/to/check_attachment.sh"
+##
+
+## Attachment keywords that the message body will be searched for:
+KEYWORDS='attach|ci-joint|pi├Ęce jointe'
+
+## Save msg in file to re-use it for multiple tests.
+TMPFILE=`mktemp -t mutt_checkattach.XXXXXX` || exit 2
+cat > "$TMPFILE"
+
+## Define test for multipart message.
+function multipart {
+    grep -q '^Content-Type: multipart' "$TMPFILE"
+}
+
+## Define test for keyword search.
+function word-attach {
+    grep -v '^>' "$TMPFILE" | grep -E -i -q "$KEYWORDS"
+}
+
+## Header override.
+function header-override {
+    grep -i -E "^X-attached: *none *$" "$TMPFILE"
+}
+
+### Query function must return "true" to let the msg pass.
+function ask {
+    zenity --question --title 'mutt' --text 'Did you include the attachment (if you wanted to)?'
+}
+
+## FINAL DECISION:
+# Use zenity if possible
+if [ -n $DISPLAY ] && [ -x /usr/bin/zenity ] ; then
+    if multipart || ! word-attach || ask; then
+        /usr/lib/sendmail "$@" < $TMPFILE
+        EXIT_STATUS=$?
+    else
+        EXIT_STATUS=1
+    fi
+# or fallback to using an X-attached: none header
+else
+    if multipart || ! word-attach || header-override; then
+        /usr/lib/sendmail "$@" < $TMPFILE
+        EXIT_STATUS=$?
+    else
+        echo "No file was attached but a search of the message text suggests there should be one.  Add a header \"X-attached: none\" to override this check if no attachment is intended."
+        EXIT_STATUS=1
+    fi
+fi
+
+## Delete the temporary file.
+rm -f "$TMPFILE"
+
+## That's all folks.
+exit $EXIT_STATUS
diff --git a/mutt-copy2dir b/mutt-copy2dir
new file mode 100755 (executable)
index 0000000..8de6325
--- /dev/null
@@ -0,0 +1,74 @@
+#!/bin/sh
+#
+# Copyright (c) 2010 Mary Gardiner
+# 
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+# 
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+# 
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+## INFO
+# This is a very simple script designed to be used when using the email client
+# mutt remotely. It copies attachments to a web accessible folder and tells you
+# where to view them.
+#
+# More details are available at http://puzzling.org/logs/thoughts/2010/May/6/mutt-attachments
+
+# if you want to override OUTPUTDIR and VIEWINGDIR edit them here or create a
+# ~/.copy-to-dir # file that looks like:
+# OUTPUTDIR=someotherdir
+# VIEWINGDIR=someother URI
+
+OUTPUTDIR=$HOME/public_html/mutt
+VIEWINGDIR=http://example.com/~user/mutt
+
+CONFIGFILE=$HOME/.copy-to-dir
+if [ -e "$CONFIGFILE" ]
+then
+       . "$CONFIGFILE"
+fi
+
+if [ -n "$1" ]
+then
+       if [ ! -d "$OUTPUTDIR" ]
+       then
+               echo "ERROR: '$OUTPUTDIR' doesn't exist, or is not a directory"
+       else
+               cp "$1" "$OUTPUTDIR"
+               SHORTNAME=`basename "$1"`
+               DELETE="$OUTPUTDIR/$SHORTNAME"
+               chmod 644 "$DELETE"
+               echo "View attachment $SHORTNAME at $VIEWINGDIR/$SHORTNAME"
+       fi
+fi
+
+# From http://www.unix.com/unix-dummies-questions-answers/5961-wait-input.html
+
+if [ -n "$DELETE" ]
+then
+       echo "Press any key to continue, and delete viewable attachment\c"
+else
+       echo "No attachment specified, press any key to continue"
+fi
+oldstty=$(stty -g)
+stty -icanon -echo min 1 time 0
+dd bs=1 count=1 2>/dev/null
+stty "$oldstty"
+
+if [ -n "$DELETE" ]
+then
+       rm $DELETE
+fi
diff --git a/mutt-killsig b/mutt-killsig
new file mode 100755 (executable)
index 0000000..4b7d4f6
--- /dev/null
@@ -0,0 +1,22 @@
+#!/usr/bin/perl
+#
+# killsig: delete signature (also "oe-sigs") when quoting emails.
+#          known patterns: ">-- " , "> -- ", ">--", "> --".
+#
+# Michael Velten <michael@michnet.de>
+
+open(MAIL, "+<$ARGV[0]") || die "$0: Can't open $ARGV[0]: $!";
+while (<MAIL>) {
+       unless (/^> ?-- ?$/) {
+               push(@purged, $_);
+       }
+       else {
+               while (<MAIL>) {
+                       push(@purged, $_) unless /^>.+/;
+               }
+       }
+}
+truncate(MAIL, 0);
+seek(MAIL,0,0);
+print MAIL @purged;
+close(MAIL);