diff -r 193327cabbbc Lib/idlelib/ClassBrowser.py --- a/Lib/idlelib/ClassBrowser.py Mon Nov 02 09:15:47 2015 -0800 +++ b/Lib/idlelib/ClassBrowser.py Wed Nov 04 04:15:42 2015 -0500 @@ -56,7 +56,7 @@ self.settitle() top.focus_set() # create scrolled canvas - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() background = idleConf.GetHighlight(theme, 'normal')['background'] sc = ScrolledCanvas(top, bg=background, highlightthickness=0, takefocus=1) sc.frame.pack(expand=1, fill="both") diff -r 193327cabbbc Lib/idlelib/ColorDelegator.py --- a/Lib/idlelib/ColorDelegator.py Mon Nov 02 09:15:47 2015 -0800 +++ b/Lib/idlelib/ColorDelegator.py Wed Nov 04 04:15:42 2015 -0500 @@ -60,7 +60,7 @@ self.tag_raise('sel') def LoadTagDefs(self): - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() self.tagdefs = { "COMMENT": idleConf.GetHighlight(theme, "comment"), "KEYWORD": idleConf.GetHighlight(theme, "keyword"), diff -r 193327cabbbc Lib/idlelib/EditorWindow.py --- a/Lib/idlelib/EditorWindow.py Mon Nov 02 09:15:47 2015 -0800 +++ b/Lib/idlelib/EditorWindow.py Wed Nov 04 04:15:42 2015 -0500 @@ -739,7 +739,7 @@ # Called from self.filename_change_hook and from configDialog.py self._rmcolorizer() self._addcolorizer() - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() normal_colors = idleConf.GetHighlight(theme, 'normal') cursor_color = idleConf.GetHighlight(theme, 'cursor', fgBg='fg') select_colors = idleConf.GetHighlight(theme, 'hilite') diff -r 193327cabbbc Lib/idlelib/PyShell.py --- a/Lib/idlelib/PyShell.py Mon Nov 02 09:15:47 2015 -0800 +++ b/Lib/idlelib/PyShell.py Wed Nov 04 04:15:42 2015 -0500 @@ -152,7 +152,7 @@ # possible due to update in restore_file_breaks return if color: - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() cfg = idleConf.GetHighlight(theme, "break") else: cfg = {'foreground': '', 'background': ''} @@ -338,7 +338,7 @@ def LoadTagDefs(self): ColorDelegator.LoadTagDefs(self) - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() self.tagdefs.update({ "stdin": {'background':None,'foreground':None}, "stdout": idleConf.GetHighlight(theme, "stdout"), @@ -621,7 +621,7 @@ item = RemoteObjectBrowser.StubObjectTreeItem(self.rpcclt, oid) from idlelib.TreeWidget import ScrolledCanvas, TreeNode top = Toplevel(self.tkconsole.root) - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() background = idleConf.GetHighlight(theme, 'normal')['background'] sc = ScrolledCanvas(top, bg=background, highlightthickness=0) sc.frame.pack(expand=1, fill="both") diff -r 193327cabbbc Lib/idlelib/TreeWidget.py --- a/Lib/idlelib/TreeWidget.py Mon Nov 02 09:15:47 2015 -0800 +++ b/Lib/idlelib/TreeWidget.py Wed Nov 04 04:15:42 2015 -0500 @@ -249,7 +249,7 @@ except AttributeError: # padding carefully selected (on Windows) to match Entry widget: self.label = Label(self.canvas, text=text, bd=0, padx=2, pady=2) - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() if self.selected: self.label.configure(idleConf.GetHighlight(theme, 'hilite')) else: diff -r 193327cabbbc Lib/idlelib/config-main.def --- a/Lib/idlelib/config-main.def Mon Nov 02 09:15:47 2015 -0800 +++ b/Lib/idlelib/config-main.def Wed Nov 04 04:15:42 2015 -0500 @@ -65,6 +65,8 @@ [Theme] default= 1 name= IDLE Classic +name2= +# name2 set in user main.cfg for default themes added after 2015 Oct 1 [Keys] default= 1 diff -r 193327cabbbc Lib/idlelib/configDialog.py --- a/Lib/idlelib/configDialog.py Mon Nov 02 09:15:47 2015 -0800 +++ b/Lib/idlelib/configDialog.py Wed Nov 04 04:15:42 2015 -0500 @@ -263,6 +263,7 @@ self.buttonDeleteCustomTheme=Button( frameTheme, text='Delete Custom Theme', command=self.DeleteCustomTheme) + self.new_custom_theme = Label(frameTheme, bd=2) ##widget packing #body @@ -286,6 +287,7 @@ self.optMenuThemeBuiltin.pack(side=TOP, fill=X, padx=5, pady=5) self.optMenuThemeCustom.pack(side=TOP, fill=X, anchor=W, padx=5, pady=5) self.buttonDeleteCustomTheme.pack(side=TOP, fill=X, padx=5, pady=5) + self.new_custom_theme.pack(side=TOP, fill=X, pady=5) return frame def CreatePageKeys(self): @@ -503,20 +505,14 @@ def VarChanged_builtinTheme(self, *params): value = self.builtinTheme.get() if value == 'IDLE Dark': - tkMessageBox.showwarning( - title="The 'IDLE Dark' Text Color Theme", - message="IDLE Dark is new in October, 2015. Trying to " - "run earlier versions of IDLE with it selected " - "will disable colorizing, or worse.\n\n" - "If you might ever run an earlier release of IDLE, " - "then before exiting this version, " - "either switch to another theme or " - "hit the 'Save as New Custom Theme' button. " - "The latter requires a new name, such as " - "'Custom Dark', but the custom theme will work " - "with any IDLE release, and can be modified.", - parent=self) - self.AddChangedItem('main', 'Theme', 'name', value) + self.AddChangedItem('main', 'Theme', 'name', 'IDLE Classic') + self.AddChangedItem('main', 'Theme', 'name2', value) + self.new_custom_theme.config(text='New theme, see Help', + fg='#500000') + else: + self.AddChangedItem('main', 'Theme', 'name', value) + self.AddChangedItem('main', 'Theme', 'name2', '') + self.new_custom_theme.config(text='', fg='black') self.PaintThemeSample() def VarChanged_customTheme(self, *params): @@ -1350,14 +1346,14 @@ When you click either the Apply or Ok buttons, settings in this dialog that are different from IDLE's default are saved in a .idlerc directory in your home directory. Except as noted, -hese changes apply to all versions of IDLE installed on this +these changes apply to all versions of IDLE installed on this machine. Some do not take affect until IDLE is restarted. [Cancel] only cancels changes made since the last save. ''' help_pages = { 'Highlighting':''' Highlighting: -The IDLE Dark color theme is new in Octover 2015. It can only +The IDLE Dark color theme is new in October 2015. It can only be used with older IDLE releases if it is saved as a custom theme, with a different name. ''' diff -r 193327cabbbc Lib/idlelib/configHandler.py --- a/Lib/idlelib/configHandler.py Mon Nov 02 09:15:47 2015 -0800 +++ b/Lib/idlelib/configHandler.py Wed Nov 04 04:15:42 2015 -0500 @@ -373,7 +373,16 @@ def CurrentTheme(self): "Return the name of the currently active theme." - return self.GetOption('main', 'Theme', 'name', default='') + default = self.GetOption('main', 'Theme', 'default', default=True) + if default: + theme = self.GetOption('main', 'Theme', 'name2', default='') + if default and not theme or not default: + theme = self.GetOption('main', 'Theme', 'name', default='') + source = self.defaultCfg if default else self.userCfg + if source['highlight'].has_section(theme): + return theme + else: + return "IDLE Classic" def CurrentKeys(self): "Return the name of the currently active key set."