[ David Champion Wrote On Sun 18.Nov'12 at 16:32:32 GMT ]

 
> This is a quick hack and untested beyond the basics, but feel free to
> work from it.  It is, or should be, a complete reimplementation of
> Gary's script in Python.
> 
> #!/usr/bin/env python
> 
> import os
> import sys
> import time
> 
> try:
>       from parsedatetime.parsedatetime import Calendar
> except ImportError:
>       p = os.path.basename(sys.argv[0])
>       print >>sys.stderr, '%s: please install the parsedatetime module' % p
>       sys.exit(255)
> 
> 
> def fmtdate(spec):
>       '''Generate an rfc822 (GMT) time strong for a spec provided in
>       the arguments.
> 
>       parsedatetime doesn't know anything about timezones, so the
>       mktime and gmtime are just to adapt the struct_time value from
>       c.parse() from local time to GMT, so that the RFC822 address
>       can assume it.  This lets the script work for anyone, without
>       needing to calculate a zone offset for your locale.
>       '''
> 
>       rfc822gmt = '%a, %d %b %Y %H:%M:%S -0000'
>       c = Calendar()
>       st, flag = c.parse(spec)
>       t = time.mktime(st)
>       tm = time.gmtime(t)
>       return time.strftime(rfc822gmt, tm)
> 
> 
> def main(args):
>       defaultdate = 'today + 20 days'
>       sys.stdout.write('Expiry date ["%s", "never" to remove]: ' % 
> defaultdate)
>       response = sys.stdin.readline()
>       if response == '':
>               # eof, ctrl-D
>               return 10
> 
>       spec = response.strip()
>       if spec == '':
>               # use default
>               spec = defaultdate
> 
>       if spec.lower() == 'never':
>               # remove header
>               cmd = 'formail -i "Expires:"'
> 
>       else:
>               date = fmtdate(spec)
>               cmd = 'formail -i "Expires: %s"' % date
> 
>       if len(args):
>               # if filename given, read from filename
>               fp = open(args[0], 'r')
>               data = fp.read()
>       else:
>               # else stdin
>               data = sys.stdin.read()
> 
>       # write all data to pipe, read results back
>       cin, cout = os.popen2(cmd)
>       cin.write(data)
>       cin.close()
>       data = cout.read()
>       cout.close()
> 
>       if len(args):
>               # if filename given, read from filename
>               fp = open(args[0], 'w')
>               fp.write(data)
>               fp.close()
>       else:
>               # write to stdout
>               sys.stdout.write(data)
> 
>       return 0
> 
> if __name__ == '__main__':
>       sys.exit(main(sys.argv[1:]))

I was wondering if I could ask about this script, as I am having a few
problems but it may well be due to how i'm using it rather than the
script itself, such as with the macro i've set up. 

For example: this morning I set a message to expire on December 1st by
entering:

        "Dec 1" at the prompt but without the quotes.

Then, I tried to expire another message using exactly the same date but
it just hung. I stopped the script using ^Cc and tried again, this time
just pressing CR to use the default date "today + 20" and again the
script hung and I had to cancel it again. 

The macro i've got to run the script is this:

        macro index E "<enter-command>set
        editor=mutt_expiry_editor.py\n<edit><enter-command>set
        editor=$EDITOR<enter>" "Add Expires Header"

This is all one, unbroken line, but i've set my line wrapping to 72
columns so when I pasted it, it displays as 3 lines in the email. 

$EDITOR is set in the environment in ~/.profile = /usr/bin/vi 

Could someone kindly help and point out if and what I might be doing
wrong?

Best wishes, Jamie. 

Reply via email to