parent
27dc2bb89f
commit
6f64fedd7f
67
mode/mbox.py
67
mode/mbox.py
|
@ -1,10 +1,26 @@
|
||||||
import commands, dirutil, grp, mailbox, method, mode, os.path, pwd, re
|
import commands, dirutil, grp, mailbox, method, mode, os.path, pwd, re
|
||||||
import buffer, default, window
|
import buffer, default, window
|
||||||
|
from mode.mutt import MuttGrammar
|
||||||
from lex import Grammar, PatternRule, RegionRule, PatternGroupRule
|
from lex import Grammar, PatternRule, RegionRule, PatternGroupRule
|
||||||
from point import Point
|
from point import Point
|
||||||
from buffer import Buffer
|
from buffer import Buffer
|
||||||
from method import Method, Argument, arg
|
from method import Method, Argument, arg
|
||||||
|
|
||||||
|
class LineGrammar(Grammar):
|
||||||
|
rules = [PatternRule(name=r'data', pattern=r'^.*\n$')]
|
||||||
|
|
||||||
|
class MailMsgGrammar(Grammar):
|
||||||
|
rules = [
|
||||||
|
PatternRule(name=r'mail_pgp', pattern=r'^-----BEGIN PGP SIGNED MESSAGE-----\n$'),
|
||||||
|
RegionRule(r'mail_signature', r'^-----BEGIN PGP SIGNATURE-----\n$', LineGrammar, r'^-----END PGP SIGNATURE-----\n$'),
|
||||||
|
PatternRule(name=r'mail_header', pattern=r'^(?:From|To|Cc|Bcc|Subject|Reply-To|In-Reply-To|Delivered-To|Date):'),
|
||||||
|
PatternRule(name=r'mail_quoteb', pattern=r'^ *(?:(?: *>){3})*(?: *>){2}.*$'),
|
||||||
|
PatternRule(name=r'mail_quotea', pattern=r'^ *(?:(?: *>){3})*(?: *>){1}.*$'),
|
||||||
|
PatternRule(name=r'mail_quotec', pattern=r'^ *(?:(?: *>){3})*(?: *>){3}.*$'),
|
||||||
|
PatternRule(name=r'mail_email', pattern=r'(?:^|(?<=[ :]))<?[^<>@\n ]+@(?:[^<>@\.\n ]+\.)*[^<>@\.\n ]+>?'),
|
||||||
|
PatternRule(name=r'mail_url', pattern=r'(?:^|(?<= ))(?:http|https|ftp|sftp|file|smtp|smtps|torrent|news|jabber|irc|telnet)://(?:[^\.\n ]+\.)*[^\.\n ]+'),
|
||||||
|
]
|
||||||
|
|
||||||
class MboxMsgBuffer(Buffer):
|
class MboxMsgBuffer(Buffer):
|
||||||
btype = 'mboxmsg'
|
btype = 'mboxmsg'
|
||||||
def __init__(self, path, lineno, msg):
|
def __init__(self, path, lineno, msg):
|
||||||
|
@ -21,7 +37,16 @@ class MboxMsgBuffer(Buffer):
|
||||||
def save_as(self, path): raise Exception, "can't save an mbox message"
|
def save_as(self, path): raise Exception, "can't save an mbox message"
|
||||||
def name(self): return 'mbox:%s:%s' % (self.base, self.lineno)
|
def name(self): return 'mbox:%s:%s' % (self.base, self.lineno)
|
||||||
def _get_lines(self):
|
def _get_lines(self):
|
||||||
return ['to', 'from', 'headers', 'subject', 'body']
|
lines = [
|
||||||
|
'Delivered-To: ' + self.msg.get('delivered-to'),
|
||||||
|
'To: ' + self.msg.get('to'),
|
||||||
|
'From: ' + self.msg.get('from'),
|
||||||
|
'Subject: ' + self.msg.get('subject'),
|
||||||
|
'Date: ' + self.msg.get('date'),
|
||||||
|
'',
|
||||||
|
]
|
||||||
|
lines.extend(self.msg.get_payload().split('\n'))
|
||||||
|
return lines
|
||||||
def open(self):
|
def open(self):
|
||||||
self.lines = self._get_lines()
|
self.lines = self._get_lines()
|
||||||
def reload(self):
|
def reload(self):
|
||||||
|
@ -78,7 +103,13 @@ class MboxRefresh(Method):
|
||||||
w.buffer.reload()
|
w.buffer.reload()
|
||||||
class MboxOpenMsg(Method):
|
class MboxOpenMsg(Method):
|
||||||
def _execute(self, w, **vargs):
|
def _execute(self, w, **vargs):
|
||||||
w.set_error('your implementation here')
|
b = w.buffer
|
||||||
|
b = MboxMsgBuffer(b.path, w.cursor.y, b.mbox[w.cursor.y])
|
||||||
|
b.open()
|
||||||
|
window.Window(b, w.application, height=0, width=0, mode_name='mboxmsg')
|
||||||
|
w.application.add_buffer(b)
|
||||||
|
w.application.switch_buffer(b)
|
||||||
|
|
||||||
class MboxOpenPath(Method):
|
class MboxOpenPath(Method):
|
||||||
args = [arg('mbox', dt="path", p="Open Mbox: ", dv=default.path_dirname,
|
args = [arg('mbox', dt="path", p="Open Mbox: ", dv=default.path_dirname,
|
||||||
ld=True, h="mbox to open")]
|
ld=True, h="mbox to open")]
|
||||||
|
@ -89,20 +120,34 @@ class MboxOpenPath(Method):
|
||||||
w.application.add_buffer(b)
|
w.application.add_buffer(b)
|
||||||
w.application.switch_buffer(b)
|
w.application.switch_buffer(b)
|
||||||
|
|
||||||
|
class MboxMsg(mode.Fundamental):
|
||||||
|
modename = 'MboxMsg'
|
||||||
|
colors = {
|
||||||
|
'mail_pgp': ('red', 'default', 'bold'),
|
||||||
|
'mail_signature.start': ('red', 'default', 'bold'),
|
||||||
|
'mail_signature.data': ('red', 'default', 'bold'),
|
||||||
|
'mail_signature.null': ('red', 'default', 'bold'),
|
||||||
|
'mail_signature.end': ('red', 'default', 'bold'),
|
||||||
|
'mail_header': ('green', 'default', 'bold'),
|
||||||
|
'mail_email': ('cyan', 'default', 'bold'),
|
||||||
|
'mail_url': ('cyan', 'default', 'bold'),
|
||||||
|
'mail_quotea': ('yellow', 'default', 'bold'),
|
||||||
|
'mail_quoteb': ('cyan', 'default', 'bold'),
|
||||||
|
'mail_quotec': ('magenta', 'default', 'bold'),
|
||||||
|
}
|
||||||
|
actions = []
|
||||||
|
grammar = MailMsgGrammar
|
||||||
|
def __init__(self, w):
|
||||||
|
mode.Fundamental.__init__(self, w)
|
||||||
|
|
||||||
class Mbox(mode.Fundamental):
|
class Mbox(mode.Fundamental):
|
||||||
modename = 'Mbox'
|
modename = 'Mbox'
|
||||||
colors = {}
|
|
||||||
actions = [MboxRefresh, MboxOpenPath, MboxOpenMsg]
|
actions = [MboxRefresh, MboxOpenPath, MboxOpenMsg]
|
||||||
def __init__(self, w):
|
def __init__(self, w):
|
||||||
mode.Fundamental.__init__(self, w)
|
mode.Fundamental.__init__(self, w)
|
||||||
self.add_bindings('mbox-refresh', ('C-c r',))
|
self.add_bindings('mbox-refresh', ('C-c r',))
|
||||||
self.add_bindings('mbox-open-msg', ('RETURN',))
|
self.add_bindings('mbox-open-msg', ('RETURN',))
|
||||||
#self.add_bindings('open-path', ('RETURN',))
|
|
||||||
#self.add_bindings('dir-grep', ('C-c G',))
|
|
||||||
#self.add_bindings('chmod', ('C-c m',))
|
|
||||||
#self.add_bindings('chown', ('C-c o',))
|
|
||||||
#self.add_bindings('chgrp', ('C-c g',))
|
|
||||||
#self.add_bindings('touch-path', ('C-c t',))
|
|
||||||
#self.add_bindings('remove-path', ('DELETE', 'BACKSPACE', 'C-d'))
|
|
||||||
|
|
||||||
install = Mbox.install
|
def install(*args):
|
||||||
|
Mbox.install(*args)
|
||||||
|
MboxMsg.install(*args)
|
||||||
|
|
Loading…
Reference in New Issue