Changeset 63ca54f8c7e93cd7200aa325197a73ce5c76a40d for mhi.py
- Timestamp:
- 05/08/08 00:34:18 (8 months ago)
- git-parent:
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
mhi.py
r6deed5d r63ca54f 6 6 # debug, refile, show, next, prev 7 7 # 8 # Commands to make work: sort, comp, repl, dist, forw, anno 8 # Commands to make work: sort, comp, repl, dist, forw, anno, mr 9 9 # 10 10 # * sort should just store a sort order to apply to output instead of … … 12 12 # anything that takes a msgset as well as scan, next, prev, and pick 13 13 # 14 # * scan/show/next/prev should run their output via $PAGER iff sys.stdout.isatty() 15 # via f = os.popen(os.environ['PAGER'], 'w'), then write to f 14 # * mr should do a 'mark all read' on the current (or specified) folder 15 # 16 # handy aliases: 17 # mailchk - folders with new messages - mhi folders |grep -v " 0$" 18 # nn - show new messages in a folder- mhi scan `mhi pick \Unseen` 16 19 # 17 20 # minor bits of code taken from http://www.w3.org/2000/04/maillog2rdf/imap_sort.py … … 24 27 import time 25 28 import string 29 import os.path 26 30 import imaplib 27 31 import StringIO 28 32 from configobj import ConfigObj 29 33 30 cfgdir =os.environ.get('HOME','')34 cfgdir = os.environ.get('HOME','') 31 35 config = ConfigObj(infile="%s/.mhirc" % cfgdir, create_empty=True) 32 36 state = ConfigObj(infile="%s/.mhistate" % cfgdir, create_empty=True) … … 191 195 if folder is None: 192 196 folder = default 197 else: 198 prefix = config.get('folder_prefix','') 199 folder = prefix + folder 193 200 return folder, outargs 194 201 … … 236 243 def _fixupMsgset(msgset): 237 244 # s/cur/$cur/, s/last/$last/, s/prev/$prev/, s/next/$next/ 238 msgset = msgset.replace('-', ':')239 msgset = msgset.replace(' ', ',')240 245 cur = state.get(state['folder']+'.cur', None) 241 246 if cur == 'None': cur = None … … 248 253 msgset = msgset.replace('prev', str(int(cur)-1)) 249 254 else: 250 msgset = msgset.replace('cur', '') 251 msgset = msgset.replace('next', '') 252 msgset = msgset.replace('prev', '') 255 requiresCur = False 256 for dep in ["cur", "prev", "next"]: 257 requiresCur = requiresCur or dep in msgset 258 if requiresCur: 259 print "No current message, so '%s' makes no sense." % msgset 260 sys.exit(1) 261 msgset = msgset.replace('-', ':') 262 msgset = msgset.replace(' ', ',') 253 263 msgset = msgset.replace('last', "*") 254 264 msgset = msgset.replace('$', "*") … … 359 369 return data 360 370 371 def folder_name(folder): 372 prefix = config.get('folder_prefix',None) 373 if prefix and folder.startswith(prefix): 374 return folder[len(prefix):] 375 return folder 376 361 377 def folder(args): 362 378 '''Usage: folder [+<foldername>] … … 374 390 # inbox+ has 64 messages (1-64); cur=63; (others). 375 391 cur = state.get(folder+'.cur', 'unset') 376 print "Folder %s has %s messages, cur is %s." % (folder , data[0], cur)392 print "Folder %s has %s messages, cur is %s." % (folder_name(folder), data[0], cur) 377 393 378 394 def folders(args): … … 404 420 messages, recent, unseen = foo[1], foo[3], foo[5] 405 421 cur = state.get(folder+'.cur', ['-', 'CUR'][ folder == HEADER ]) 406 print "%s%-20s %7s %7s %7s %7s" % (iscur, folder , cur, messages, recent, unseen)422 print "%s%-20s %7s %7s %7s %7s" % (iscur, folder_name(folder), cur, messages, recent, unseen) 407 423 if folder != HEADER: 408 424 totalmsgs += int(messages) … … 530 546 first = data[0].split()[0] 531 547 state[folder+'.cur'] = first 548 549 def mr(args): 550 '''Usage: mr [+folder] <messageset> 551 552 Mark the specified messages (or the current message if unspecified) 553 from the specified folder (or the current folder if unspecified) as read. 554 ''' 555 folder, arglist = _argFolder(args, state['folder']) 556 state['folder'] = folder 557 msgset = _fixupMsgset(' '.join(arglist)) 558 if not msgset: 559 try: 560 msgset = state[folder+'.cur'] 561 except KeyError: 562 print "Error: No current message selected." 563 raise UsageError() 564 _checkMsgset(msgset) 565 S = _connect() 566 do_or_die(S.select(folder), "Problem changing folders:") 567 data = do_or_die(S.search(None, msgset), "Problem with search:") 568 do_or_die(S.store(msgset, '+FLAGS', '\\Seen'), "Problem setting read flag: ") 569 S.close() 570 S.logout() 571 first = data[0].split()[0] 572 state[folder+'.cur'] = first 573 574 532 575 533 576 def _show(folder, msgset): … … 705 748 'repl': repl, 706 749 'help': help, 750 'mr': mr 707 751 } 708 752 … … 741 785 742 786 if __name__ == '__main__': 787 if sys.stdout.isatty(): 788 pager = os.environ.get('PAGER', None) 789 if pager is None: 790 for p in [ '/usr/bin/less', '/bin/more' ]: 791 if os.path.exists(p): 792 pager = p 793 break 794 if pager is not None: 795 sys.stdout = os.popen(pager, 'w') 743 796 try: 744 797 _dispatch(sys.argv)
