Add comments where .keys() is needed.
Leave debugger usages along because situation is unclear as indicated in expanded comment.
Most testing is manual.
problem getting any core binding there will be an 'ultimate last
resort fallback' to the CUA-ish bindings defined here.
"""
+ # TODO: = dict(sorted([(v-event, keys), ...]))?
keyBindings={
+ # vitual-event: list of key events.
'<<copy>>': ['<Control-c>', '<Control-C>'],
'<<cut>>': ['<Control-x>', '<Control-X>'],
'<<paste>>': ['<Control-v>', '<Control-V>'],
line, crc = 0, 0
def sprint(obj):
- global line, crc
+ nonlocal line, crc
txt = str(obj)
line += 1
crc = crc32(txt.encode(encoding='utf-8'), crc)
def dumpCfg(cfg):
print('\n', cfg, '\n') # Cfg has variable '0xnnnnnnnn' address.
- for key in sorted(cfg.keys()):
+ for key in sorted(cfg):
sections = cfg[key].sections()
sprint(key)
sprint(sections)
from unittest import main
main('idlelib.idle_test.test_config', verbosity=2, exit=False)
- # Run revised _dump() as htest?
+ _dump()
+ # Run revised _dump() (700+ lines) as htest? More sorting.
+ # Perhaps as window with tabs for textviews, making it config viewer.
contents=help_common+help_pages.get(page, ''))
def deactivate_current_config(self):
- """Remove current key bindings.
- Iterate over window instances defined in parent and remove
- the keybindings.
- """
- # Before a config is saved, some cleanup of current
- # config must be done - remove the previous keybindings.
- win_instances = self.parent.instance_dict.keys()
- for instance in win_instances:
+ """Remove current key bindings in current windows."""
+ for instance in self.parent.instance_dict:
instance.RemoveKeybindings()
def activate_config_changes(self):
Dynamically update the current parent window instances
with some of the configuration changes.
"""
- win_instances = self.parent.instance_dict.keys()
- for instance in win_instances:
+ for instance in self.parent.instance_dict:
instance.ResetColorizer()
instance.ResetFont()
instance.set_notabs_indentwidth()
(*)theme_message: Label
"""
self.theme_elements = {
+ # Display_name: ('internal_name, sort_number').
+ # TODO: remove sort_number unneeded with dict ordering.
'Normal Code or Text': ('normal', '00'),
'Code Context': ('context', '01'),
'Python Keywords': ('keyword', '02'),
self.builtinlist.SetMenu(item_list, item_list[0])
self.set_theme_type()
# Load theme element option menu.
- theme_names = list(self.theme_elements.keys())
+ theme_names = list(self.theme_elements)
theme_names.sort(key=lambda x: self.theme_elements[x][1])
self.targetlist.SetMenu(theme_names, theme_names[0])
self.paint_theme_sample()
reselect = True
list_index = self.bindingslist.index(ANCHOR)
keyset = idleConf.GetKeySet(keyset_name)
- bind_names = list(keyset.keys())
+ # 'set' is dict mapping virtual event to list of key events.
+ bind_names = list(keyset)
bind_names.sort()
self.bindingslist.delete(0, END)
for bind_name in bind_names:
key = ' '.join(keyset[bind_name])
- bind_name = bind_name[2:-2] # Trim off the angle brackets.
+ bind_name = bind_name[2:-2] # Trim double angle brackets.
if keyset_name in changes['keys']:
# Handle any unsaved changes to this key set.
if bind_name in changes['keys'][keyset_name]:
# There is also an obscure bug in sorted(dict) where the
# interpreter gets into a loop requesting non-existing dict[0],
# dict[1], dict[2], etc from the debugger_r.DictProxy.
- ###
+ # TODO recheck above; see debugger_r 159ff, debugobj 60.
keys_list = dict.keys()
names = sorted(keys_list)
###
class DictTreeItem(SequenceTreeItem):
def keys(self):
- keys = list(self.object.keys())
+ # TODO return sorted(self.object)
+ keys = list(self.object)
try:
keys.sort()
except:
conf.CreateConfigHandlers()
# Check keys are equal
- self.assertCountEqual(conf.defaultCfg.keys(), conf.config_types)
- self.assertCountEqual(conf.userCfg.keys(), conf.config_types)
+ self.assertCountEqual(conf.defaultCfg, conf.config_types)
+ self.assertCountEqual(conf.userCfg, conf.config_types)
# Check conf parser are correct type
for default_parser in conf.defaultCfg.values():
def test_keys(self):
ti = debugobj.SequenceTreeItem('label', 'abc')
- self.assertEqual(list(ti.keys()), [0, 1, 2])
+ self.assertEqual(list(ti.keys()), [0, 1, 2]) # keys() is a range.
class DictTreeItemTest(unittest.TestCase):
def test_keys(self):
ti = debugobj.DictTreeItem('label', {1:1, 0:0, 2:2})
- self.assertEqual(ti.keys(), [0, 1, 2])
+ self.assertEqual(ti.keys(), [0, 1, 2]) # keys() is a sorted list.
if __name__ == '__main__':
self.tkconsole.open_stack_viewer()
def checklinecache(self):
- c = linecache.cache
- for key in list(c.keys()):
+ "Remove keys other than '<pyshell#n>'."
+ cache = linecache.cache
+ for key in list(cache): # Iterate list because mutate cache.
if key[:1] + key[-1:] != "<>":
- del c[key]
+ del cache[key]
def runcommand(self, code):
"Run the code without invoking the debugger"
def GetSubList(self):
sublist = []
- for key in self.object.keys():
+ for key in self.object.keys(): # self.object not necessarily dict.
try:
value = self.object[key]
except KeyError: