#!/usr/bin/perl # $Id: mutt2remember.pl,v 1.4 2008/09/27 11:15:04 friedel Exp $ # Variations on a theme given by Russell Adams http://lists.gnu.org/archive/html/emacs-orgmode/2008-09/msg00300.html my $terminal="xterm -e"; # Install: # ======== # 1.) put the following in your muttrc: my $muttrc_snippet = <t \"set pipe_decode=no;set wait_key=nomutt2remember.pl remember \$recordset wait_key=\$my_wait_key ;set pipe_decode=\$my_pipe_decode\" \"remember mail in emacs\"; \ macro index,pager n \"set pipe_decode=no;set wait_key=nomutt2remember.pl annotation \$recordset wait_key=\$my_wait_key ;set pipe_decode=\$my_pipe_decode\" \"copy url to mail in emacs\"; \ set record=\$my_record;" END # 2) put this file into your $HOME/bin and make it executable. # 3) make sure org-annotation-helper.el is loaded in your org config # 4) optionally: set $terminal above to something you prefer. # 5) press n in the pager or index to annotate a mail url, # press t to *remember* it # 6) follow the generated link in emacs to open the mail in mutt. use strict; use warnings; use URI::Escape qw/ uri_escape /; use File::Temp qw/ mkstemp /; my $action=$ARGV[0]; my $folder=$ARGV[1]; if ($action eq "remember" or $action eq "annotation") { my ( $Subject , $From , $MID ); while () { chomp; if (/^Subject: /) { ( $Subject ) = $_ =~ m/^Subject: (.*)$/; } if (/^From: /) { ( $From ) = $_ =~ m/^From: (.*)$/; } if (/^Message-ID:\s*/) { ( $MID ) = $_ =~ m/^Message-ID:\s*<(.*)>\s*$/; } if (/^$/) { last; # Header ends on first blank line } } $From = uri_escape($From); $Subject = uri_escape($Subject); $folder =~ tr/=/+/; my $uri = "shell:" . $terminal . " mutt2remember.pl open " . $folder . " " . $MID; $uri = uri_escape($uri); my $Link = $action . ":" . $uri . "::remember::Mail From $From: $Subject"; system ("emacsclient", "--eval", "(progn (bzg/org-annotation-helper \"$Link\") nil)"); } elsif ($action eq "open") { my $msgid=$ARGV[2]; my ($tmp, $tmpfile) = mkstemp(($ENV{TMP} or "/tmp") . "/mutt2rememberXXXXXXXX"); printf $tmp "push \"~i$msgid\""; system("mutt", "-f", $folder, "-e", "source $tmpfile"); close $tmp; unlink $tmpfile; }