also sprach Antonio Radici <anto...@dyne.org> [2009.02.07.1442 +0100]:
> the URL you posted is not available anymore, can you
> please fix it?

shame on me. The script is attached.

-- 
 .''`.   martin f. krafft <madd...@d.o>      Related projects:
: :'  :  proud Debian developer               http://debiansystem.info
`. `'`   http://people.debian.org/~madduck    http://vcs-pkg.org
  `-  Debian - when you have better things to do than fixing systems
#!/bin/sh
#
# mailto-mutt -- wrapper to be able to use mutt as mailto handler from firefox
#
# To use, surf to Firefox's about:config page and configure the following
# three values:
#   network.protocol-handler.external.mailto boolean true
#   network.protocol-handler.app.mailto string '/path/to/handler'
#   network.protocol-handler.warn-external.mailto boolean false
#
# Copyright © martin f. krafft <madd...@madduck.net>
# Released under the terms of the Artistic Licence 2.0
# 
# Revision: $Id: mailto-mutt 498 2007-05-12 12:02:10Z madduck $
# 
set -eu

case "${1:-}" in
  -d) debug=1; shift;;
  '') exit 0;;
  *) :;;
esac

url_unescape()
{
  perl -e 'use URI::Escape; while(<>) { print uri_unescape($_); }'
}

MAILTO="$...@%%\?*}"
ARGS="$...@#*\?}"
[ "$ARGS" = "$MAILTO" ] && unset ARGS
MAILTO="$(echo "${MAILTO#mailto:}"; | url_unescape)"

subject=
cc=
bcc=
body=
mutt_commands=

IFS_store="$IFS"
IFS='&'

for arg in ${ARGS:-}; do
  value="$(echo "${arg#*=}" | url_unescape | sed -e "s,',\',")"

  case "${arg%%=*}" in
    subject|Subject|SUBJECT) subject="$value";;
    cc|Cc|CC) cc="$value";;
    bcc|Bcc|BCC) bcc="$value";;
    body|Body|BODY) body="$value";;
    *)
      mutt_commands="${mutt_commands:+${mutt_commands}
        }-e\"my_hdr ${arg%%=*}: $value\""
      ;;
  esac
done

IFS="$IFS_store"

break_at_commas()
{
  local atom
  for i; do
    atom="${atom:+$atom }$i"
    case "${atom:-}" in
      *,) echo "${atom%,}"; unset atom;;
    esac
  done
  [ -n "${atom:-}" ] && echo "${atom%,}"
}

get_addr_args()
{
  local type
  case "$1" in
    -*) type="$1"; shift;;
    *) unset type;;
  esac

  break_at_commas "$@" | while read addr; do
    echo -n "${type:-}\"$addr\" "
  done
}

if [ -n "$mutt_commands" ]; then
  mutt_args="${mutt_args:+$mutt_args }$mutt_commands"
fi

if [ -n "$subject" ]; then
  mutt_args="${mutt_args:+$mutt_args }-s\"$subject\""
fi

mutt_args="${mutt_args:+$mutt_args }$(get_addr_args -c $cc)"
mutt_args="${mutt_args:+$mutt_args }$(get_addr_args -b $bcc)"
mutt_args="${mutt_args:+$mutt_args }$(get_addr_args $MAILTO)"

run()
{
  if [ ${debug:-0} -eq 1 ]; then
    echo "$@"
  else
    eval "$@"
  fi
}

if [ -n "$body" ]; then
  TMPFILE="$(tempfile -p mailto -d /tmp)"
  echo "$body" > $TMPFILE
  trap "rm -f $TMPFILE" 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  run x-terminal-emulator -e mutt${mutt_args:+ $mutt_args} -i $TMPFILE
  ret=$?
  rm -f $TMPFILE
  trap - 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  exit $ret
else
  run exec x-terminal-emulator -e mutt${mutt_args:+ $mutt_args}
fi

Attachment: digital_signature_gpg.asc
Description: Digital signature (see http://martin-krafft.net/gpg/)

Reply via email to