Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1d46e40

Browse files
author
Steven M. Gava
committed
further work on new config system;
recent files menu
1 parent 03594bb commit 1d46e40

3 files changed

Lines changed: 79 additions & 8 deletions

File tree

Lib/idlelib/EditorWindow.py

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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()

Lib/idlelib/IOBinding.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,12 @@ def set_filename(self, filename):
7272
if self.filename_change_hook:
7373
self.filename_change_hook()
7474

75-
def open(self, event):
75+
def open(self, event=None, editFile=None):
7676
if self.editwin.flist:
77-
filename = self.askopenfile()
77+
if not editFile:
78+
filename = self.askopenfile()
79+
else:
80+
filename=editFile
7881
if filename:
7982
# if the current window has no filename and hasn't been
8083
# modified, we replace it's contents (no loss). Otherwise
@@ -93,7 +96,10 @@ def open(self, event):
9396
if reply == "cancel":
9497
self.text.focus_set()
9598
return "break"
96-
filename = self.askopenfile()
99+
if not editFile:
100+
filename = self.askopenfile()
101+
else:
102+
filename=editFile
97103
if filename:
98104
self.loadfile(filename)
99105
else:

Lib/idlelib/configDialog.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,12 +1072,9 @@ def SaveAllChangedConfigs(self):
10721072
"""
10731073
save all configuration changes to user config files.
10741074
"""
1075-
#if self.changedItems['main'].has_key('HelpFiles'):
10761075
#this section gets completely replaced
1077-
print idleConf.GetAllExtraHelpSourcesList()
10781076
idleConf.userCfg['main'].remove_section('HelpFiles')
10791077
idleConf.userCfg['main'].Save()
1080-
print idleConf.GetAllExtraHelpSourcesList()
10811078
for configType in self.changedItems.keys():
10821079
cfgTypeHasChanges=0
10831080
for section in self.changedItems[configType].keys():
@@ -1086,7 +1083,6 @@ def SaveAllChangedConfigs(self):
10861083
if self.SetUserValue(configType,section,item,value):
10871084
cfgTypeHasChanges=1
10881085
if cfgTypeHasChanges:
1089-
print configType,'- changed'
10901086
idleConf.userCfg[configType].Save()
10911087
self.ResetChangedItems() #clear the changed items dict
10921088

0 commit comments

Comments
 (0)