@@ -105,6 +105,8 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
105105 #self.top.instanceDict makes flist.inversedict avalable to
106106 #configDialog.py so it can access all EditorWindow instaces
107107 self .top .instanceDict = flist .inversedict
108+ self .recentFilesPath = os .path .join (idleConf .GetUserCfgDir (),
109+ 'recent-files.lst' )
108110 self .vbar = vbar = Scrollbar (top , name = 'vbar' )
109111 self .text_frame = text_frame = Frame (top )
110112 self .text = text = Text (text_frame , name = 'text' , padx = 5 , wrap = None ,
@@ -178,6 +180,11 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
178180 self .color = None
179181 self .undo = undo = self .UndoDelegator (); per .insertfilter (undo )
180182 self .io = io = self .IOBinding (self )
183+ #create the Recent Files submenu
184+ self .menuRecentFiles = Menu (self .menubar )
185+ self .menudict ['file' ].insert_cascade (3 ,label = 'Recent Files' ,
186+ underline = 0 ,menu = self .menuRecentFiles )
187+ self .UpdateRecentFilesList ()
181188
182189 text .undo_block_start = undo .undo_block_start
183190 text .undo_block_stop = undo .undo_block_stop
@@ -253,6 +260,7 @@ def createmenubar(self):
253260 menudict [name ] = menu = Menu (mbar , name = name )
254261 mbar .add_cascade (label = label , menu = menu , underline = underline )
255262 self .fill_menus ()
263+ #create the ExtraHelp menu, if required
256264 self .ResetExtraHelpMenu ()
257265
258266 def postwindowsmenu (self ):
@@ -542,12 +550,69 @@ def ResetExtraHelpMenu(self):
542550 self .menuExtraHelp .delete (1 ,END )
543551 for menuItem in menuList :
544552 self .menuExtraHelp .add_command (label = menuItem [0 ],
545- command = lambda : self .display_docs (menuItem [1 ]))
553+ command = self .__DisplayExtraHelpCallback (menuItem [1 ]))
546554 else : #no extra help items
547555 if hasattr (self ,'menuExtraHelp' ):
548556 helpMenu .delete (cascadeIndex - 1 )
549557 del (self .menuExtraHelp )
558+
559+ def __DisplayExtraHelpCallback (self ,helpFile ):
560+ def DisplayExtraHelp (helpFile = helpFile ):
561+ self .display_docs (helpFile )
562+ return DisplayExtraHelp
550563
564+ def UpdateRecentFilesList (self ,newFile = None ):
565+ #load or update the recent files list, and menu if required
566+ rfList = []
567+ if os .path .exists (self .recentFilesPath ):
568+ RFfile = open (self .recentFilesPath ,'r' )
569+ try :
570+ rfList = RFfile .readlines ()
571+ finally :
572+ RFfile .close ()
573+ if newFile :
574+ newFile = os .path .abspath (newFile )+ '\n '
575+ if newFile in rfList :
576+ rfList .remove (newFile )
577+ rfList .insert (0 ,newFile )
578+ rfList = self .__CleanRecentFiles (rfList )
579+ print self .top .instanceDict
580+ print self
581+ if rfList :
582+ for instance in self .top .instanceDict .keys ():
583+ instance .menuRecentFiles .delete (1 ,END )
584+ for file in rfList :
585+ fileName = file [0 :- 1 ]
586+ instance .menuRecentFiles .add_command (label = fileName ,
587+ command = instance .__RecentFileCallback (fileName ))
588+
589+ def __CleanRecentFiles (self ,rfList ):
590+ origRfList = rfList [:]
591+ count = 0
592+ nonFiles = []
593+ for path in rfList :
594+ if not os .path .exists (path [0 :- 1 ]):
595+ nonFiles .append (count )
596+ count = count + 1
597+ if nonFiles :
598+ nonFiles .reverse ()
599+ for index in nonFiles :
600+ del (rfList [index ])
601+ if len (rfList )> 19 :
602+ rfList = rfList [0 :19 ]
603+ #if rfList != origRfList:
604+ RFfile = open (self .recentFilesPath ,'w' )
605+ try :
606+ RFfile .writelines (rfList )
607+ finally :
608+ RFfile .close ()
609+ return rfList
610+
611+ def __RecentFileCallback (self ,fileName ):
612+ def OpenRecentFile (fileName = fileName ):
613+ self .io .open (editFile = fileName )
614+ return OpenRecentFile
615+
551616 def saved_change_hook (self ):
552617 short = self .short_title ()
553618 long = self .long_title ()
@@ -628,6 +693,10 @@ def close(self):
628693 return reply
629694
630695 def _close (self ):
696+ print self .io .filename
697+ if self .io .filename :
698+ self .UpdateRecentFilesList (newFile = self .io .filename )
699+
631700 WindowList .unregister_callback (self .postwindowsmenu )
632701 if self .close_hook :
633702 self .close_hook ()
0 commit comments