On Mon, Jul 02, 2001 at 03:09:09PM -0700, Tim Condit wrote:
> Someone was asking about this a few days ago.. I deleted the email, but
> went to the list archives and found it.
> 
> > However, it could also be useful to select an URL in the message
> > body and just bookmark it for later viewing, or print it using the
> > printing capabilities of the browser. I am thinking to some
> > macros that would use the "netscape remote control capabilities"
> > explained in:

FWIW - I'll repost a script I've found handy to bring up the entire
email in a browser with URLs converted to true hyperlinks.  This
allows you to use the built-in browser facilities to manage bookmarks,
history, etc.  To use it you need something like this to make a Ctrl-B
macro in .muttrc.

macro index \Cb "| python email2html.py > /tmp/urlview.htm; netscape /tmp/urlview.htm"

HTH - Regards,
Steve

-- 

                  \_O<  \_O<  \_O<
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Steve Cooper          Redmond, WA
#!/usr/bin/env python2

###############################################################
# Pipe filter to convert email to html
#
# STDIN=text email
# STDOUT=html-ized email
#
# Add something like the following to your .muttrc
# macro pager \Cb "| python email2html.py > /tmp/urlview.htm; netscape 
/tmp/urlview.htm"
#
# **USE AT YOUR OWN RISK**
#
# Enjoy!
# Steve Cooper
###############################################################

import sys
import re

#=== Globals

# Regular expression for isolating URLs
reURL = re.compile('(((http|https|ftp|gopher)|mailto)[.:][^ >"\t]*|www\.[-a-z0-9.]+)')

# Colors
bgColor    = "#ffffff"
labelColor = "#5050e0"
textColor  = "#000000"

#=== Fix line function

def FixLine(line):
    line = line.strip()
    line = line.replace('<','&lt;')
    line = line.replace('>','&gt;')
    return line

#=== Header list class

class HeaderList:

    def __init__(self):
        self.headers = {}
        # Specification for desired visible headers
        # TODO: Un-hardcode this!
        self.reHeaders = re.compile('^[ \t]*(From|To|Date|Subject):[ \t]*(.*)$', 
re.IGNORECASE)

    def ScanLine(self, line):
        matchHeader = self.reHeaders.search(line)
        if matchHeader is not None:
            self.headers[matchHeader.group(1).lower()] = matchHeader.group(2)

    def OutputLine(self, name, label, size = "+0"):
        if self.headers.has_key(name):
            print '<b><font color="%s" size="%s">%s: </font></b>' % (labelColor, size, 
label)
            print '<font color="%s" size="%s">%s</font><br>' % (textColor, size, 
self.headers[name])

    def Output(self):
        # TODO: Un-hardcode this!
        self.OutputLine('from',    'From')
        self.OutputLine('to',      'To',      '-1')
        self.OutputLine('date',    'Date',    '-1')
        self.OutputLine('subject', 'Subject', '+1')
        print '<hr><br>'

print '<html>'

print '<head>'
print '<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">'
print '<title>Mutt Email</title>'
print '</head>'

print '<body bgcolor="%s">' % bgColor

#=== Scan headers

headers = HeaderList()

line = sys.stdin.readline()

while line:
    line = FixLine(line)
    # Assume first empty line is the end of the headers
    if not line:
        break
    headers.ScanLine(line)
    line = sys.stdin.readline()

#=== Format header lines

headers.Output()

#=== Scan and display body

print '<PRE>'
nLine = 0

line = sys.stdin.readline()

while line:

    line = FixLine(line)

    nLine = nLine + 1

    match = reURL.search(line)
    while match is not None:
        sub   = '<a href="%s">%s</a>' % (match.group(1), match.group(1))
        line  = line[:match.start(1)] + sub + line[match.end():]
        skip  = match.start() + len(sub)
        match = reURL.search(line, skip)

    print '%s' % line

    line = sys.stdin.readline()

print '</PRE>'
print '</body>'
print '</html>'

Reply via email to