Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Lib/idlelib/NEWS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ Released on 2019-10-20?
======================================


bpo-36396: Remove fgBg param of idlelib.config.GetHighlight().
This param was only used twice and changed the return type.

bpo-23216: IDLE: Add docstrings to search modules.

bpo-36176: Fix IDLE autocomplete & calltip popup colors.
Prevent conflicts with Linux dark themes
(and slightly darken calltip background).
Expand Down
2 changes: 1 addition & 1 deletion Lib/idlelib/colorizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def color_config(text):
# Not automatic because ColorDelegator does not know 'text'.
theme = idleConf.CurrentTheme()
normal_colors = idleConf.GetHighlight(theme, 'normal')
cursor_color = idleConf.GetHighlight(theme, 'cursor', fgBg='fg')
cursor_color = idleConf.GetHighlight(theme, 'cursor')['foreground']
select_colors = idleConf.GetHighlight(theme, 'hilite')
text.config(
foreground=normal_colors['foreground'],
Expand Down
39 changes: 12 additions & 27 deletions Lib/idlelib/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@

class InvalidConfigType(Exception): pass
class InvalidConfigSet(Exception): pass
class InvalidFgBg(Exception): pass
class InvalidTheme(Exception): pass

class IdleConfParser(ConfigParser):
Expand Down Expand Up @@ -283,34 +282,20 @@ def GetSectionList(self, configSet, configType):
raise InvalidConfigSet('Invalid configSet specified')
return cfgParser.sections()

def GetHighlight(self, theme, element, fgBg=None):
"""Return individual theme element highlight color(s).
def GetHighlight(self, theme, element):
"""Return dict of theme element highlight colors.

fgBg - string ('fg' or 'bg') or None.
If None, return a dictionary containing fg and bg colors with
keys 'foreground' and 'background'. Otherwise, only return
fg or bg color, as specified. Colors are intended to be
appropriate for passing to Tkinter in, e.g., a tag_config call).
The keys are 'foreground' and 'background'. The values are
tkinter color strings for configuring backgrounds and tags.
"""
if self.defaultCfg['highlight'].has_section(theme):
themeDict = self.GetThemeDict('default', theme)
else:
themeDict = self.GetThemeDict('user', theme)
fore = themeDict[element + '-foreground']
if element == 'cursor': # There is no config value for cursor bg
back = themeDict['normal-background']
else:
back = themeDict[element + '-background']
highlight = {"foreground": fore, "background": back}
if not fgBg: # Return dict of both colors
return highlight
else: # Return specified color only
if fgBg == 'fg':
return highlight["foreground"]
if fgBg == 'bg':
return highlight["background"]
else:
raise InvalidFgBg('Invalid fgBg specified')
Comment thread
terryjreedy marked this conversation as resolved.
cfg = ('default' if self.defaultCfg['highlight'].has_section(theme)
else 'user')
theme_dict = self.GetThemeDict(cfg, theme)
fore = theme_dict[element + '-foreground']
if element == 'cursor':
element = 'normal'
back = theme_dict[element + '-background']
return {"foreground": fore, "background": back}

def GetThemeDict(self, type, themeName):
"""Return {option:value} dict for elements in themeName.
Expand Down
2 changes: 1 addition & 1 deletion Lib/idlelib/configdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -1252,7 +1252,7 @@ def paint_theme_sample(self):
colors = idleConf.GetHighlight(theme, element)
if element == 'cursor': # Cursor sample needs special painting.
colors['background'] = idleConf.GetHighlight(
theme, 'normal', fgBg='bg')
theme, 'normal')['background']
# Handle any unsaved changes to this theme.
if theme in changes['highlight']:
theme_dict = changes['highlight'][theme]
Expand Down
4 changes: 0 additions & 4 deletions Lib/idlelib/idle_test/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,10 +373,6 @@ def test_get_highlight(self):
eq = self.assertEqual
eq(conf.GetHighlight('IDLE Classic', 'normal'), {'foreground': '#000000',
'background': '#ffffff'})
eq(conf.GetHighlight('IDLE Classic', 'normal', 'fg'), '#000000')
eq(conf.GetHighlight('IDLE Classic', 'normal', 'bg'), '#ffffff')
with self.assertRaises(config.InvalidFgBg):
conf.GetHighlight('IDLE Classic', 'normal', 'fb')

# Test cursor (this background should be normal-background)
eq(conf.GetHighlight('IDLE Classic', 'cursor'), {'foreground': 'black',
Expand Down
45 changes: 20 additions & 25 deletions Lib/idlelib/idle_test/test_configdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -606,40 +606,35 @@ def test_set_color_sample(self):

def test_paint_theme_sample(self):
eq = self.assertEqual
d = self.page
del d.paint_theme_sample
hs_tag = d.highlight_sample.tag_cget
page = self.page
del page.paint_theme_sample # Delete masking mock.
hs_tag = page.highlight_sample.tag_cget
gh = idleConf.GetHighlight
fg = 'foreground'
bg = 'background'

# Create custom theme based on IDLE Dark.
d.theme_source.set(True)
d.builtin_name.set('IDLE Dark')
page.theme_source.set(True)
page.builtin_name.set('IDLE Dark')
theme = 'IDLE Test'
d.create_new(theme)
d.set_color_sample.called = 0
page.create_new(theme)
page.set_color_sample.called = 0

# Base theme with nothing in `changes`.
d.paint_theme_sample()
eq(hs_tag('break', fg), gh(theme, 'break', fgBg='fg'))
eq(hs_tag('cursor', bg), gh(theme, 'normal', fgBg='bg'))
self.assertNotEqual(hs_tag('console', fg), 'blue')
self.assertNotEqual(hs_tag('console', bg), 'yellow')
eq(d.set_color_sample.called, 1)
page.paint_theme_sample()
new_console = {'foreground': 'blue',
'background': 'yellow',}
for key, value in new_console.items():
self.assertNotEqual(hs_tag('console', key), value)
eq(page.set_color_sample.called, 1)

# Apply changes.
changes.add_option('highlight', theme, 'console-foreground', 'blue')
changes.add_option('highlight', theme, 'console-background', 'yellow')
d.paint_theme_sample()

eq(hs_tag('break', fg), gh(theme, 'break', fgBg='fg'))
eq(hs_tag('cursor', bg), gh(theme, 'normal', fgBg='bg'))
eq(hs_tag('console', fg), 'blue')
eq(hs_tag('console', bg), 'yellow')
eq(d.set_color_sample.called, 2)
for key, value in new_console.items():
changes.add_option('highlight', theme, 'console-'+key, value)
page.paint_theme_sample()
for key, value in new_console.items():
eq(hs_tag('console', key), value)
eq(page.set_color_sample.called, 2)

d.paint_theme_sample = Func()
page.paint_theme_sample = Func()

def test_delete_custom(self):
eq = self.assertEqual
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Remove fgBg param of idlelib.config.GetHighlight(). This param was only used
twice and changed the return type.