[Python-checkins] cpython (3.4): Issue #25313: Change the handling of new built-in text color themes to better

terry.reedy python-checkins at python.org
Thu Nov 12 15:25:29 EST 2015


https://hg.python.org/cpython/rev/6185c5603eed
changeset: 99089:6185c5603eed
branch: 3.4
parent: 99084:4461613ffe78
user: Terry Jan Reedy <tjreedy at udel.edu>
date: Thu Nov 12 15:02:57 2015 -0500
summary:
 Issue #25313: Change the handling of new built-in text color themes to better
address the compatibility problem introduced by the addition of IDLE Dark.
Consistently use the revised idleConf.CurrentTheme everywhere in idlelib.
files:
 Lib/idlelib/ClassBrowser.py | 2 +-
 Lib/idlelib/ColorDelegator.py | 2 +-
 Lib/idlelib/EditorWindow.py | 2 +-
 Lib/idlelib/PyShell.py | 6 ++--
 Lib/idlelib/TreeWidget.py | 2 +-
 Lib/idlelib/config-main.def | 2 +
 Lib/idlelib/configDialog.py | 29 ++++++++++------------
 Lib/idlelib/configHandler.py | 28 ++++++++++++++++++++-
 8 files changed, 48 insertions(+), 25 deletions(-)
diff --git a/Lib/idlelib/ClassBrowser.py b/Lib/idlelib/ClassBrowser.py
--- a/Lib/idlelib/ClassBrowser.py
+++ b/Lib/idlelib/ClassBrowser.py
@@ -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 --git a/Lib/idlelib/ColorDelegator.py b/Lib/idlelib/ColorDelegator.py
--- a/Lib/idlelib/ColorDelegator.py
+++ b/Lib/idlelib/ColorDelegator.py
@@ -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 --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -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 --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -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 --git a/Lib/idlelib/TreeWidget.py b/Lib/idlelib/TreeWidget.py
--- a/Lib/idlelib/TreeWidget.py
+++ b/Lib/idlelib/TreeWidget.py
@@ -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 --git a/Lib/idlelib/config-main.def b/Lib/idlelib/config-main.def
--- a/Lib/idlelib/config-main.def
+++ b/Lib/idlelib/config-main.def
@@ -65,6 +65,8 @@
 [Theme]
 default= 1
 name= IDLE Classic
+name2=
+# name2 set in user config-main.cfg for themes added after 2015 Oct 1
 
 [Keys]
 default= 1
diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py
--- a/Lib/idlelib/configDialog.py
+++ b/Lib/idlelib/configDialog.py
@@ -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,15 @@
 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)
+ if idleConf.GetOption('main', 'Theme', 'name') != 'IDLE New':
+ 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 +1347,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 --git a/Lib/idlelib/configHandler.py b/Lib/idlelib/configHandler.py
--- a/Lib/idlelib/configHandler.py
+++ b/Lib/idlelib/configHandler.py
@@ -372,8 +372,32 @@
 return theme
 
 def CurrentTheme(self):
- "Return the name of the currently active theme."
- return self.GetOption('main', 'Theme', 'name', default='')
+ """Return the name of the currently active text color theme.
+
+ idlelib.config-main.def includes this section
+ [Theme]
+ default= 1
+ name= IDLE Classic
+ name2=
+ # name2 set in user config-main.cfg for themes added after 2015 Oct 1
+
+ Item name2 is needed because setting name to a new builtin
+ causes older IDLEs to display multiple error messages or quit.
+ See https://bugs.python.org/issue25313.
+ When default = True, name2 takes precedence over name,
+ while older IDLEs will just use name.
+ """
+ default = self.GetOption('main', 'Theme', 'default',
+ type='bool', 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."
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /