diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2017-09-16 06:14:34 (GMT) |
---|---|---|
committer | Terry Jan Reedy <tjreedy@udel.edu> | 2017-09-16 06:14:34 (GMT) |
commit | 77b52e463ab9f8bea7703ff9c03c06b3ec889db7 (patch) | |
tree | f6ca50707a5db39b72beffe8d8dad9c189c2cd17 /Lib/idlelib | |
parent | 2c1c2ca2548f943d6323859f17612aa5a4a19165 (diff) | |
download | cpython-77b52e463ab9f8bea7703ff9c03c06b3ec889db7.zip cpython-77b52e463ab9f8bea7703ff9c03c06b3ec889db7.tar.gz cpython-77b52e463ab9f8bea7703ff9c03c06b3ec889db7.tar.bz2 |
[3.6] bpo-31488: IDLE - update former extensions when options change. (GH-3612) (#3613)
When apply ConfigDialog changes, call .reload on each class with non-key options.
Change ParenMatch so that updates affect current instances.
(cherry picked from commit 5777ecc438790f3d324d52f2ccdad56e667e0cb3)
Diffstat (limited to 'Lib/idlelib')
-rw-r--r-- | Lib/idlelib/configdialog.py | 8 | ||||
-rw-r--r-- | Lib/idlelib/idle_test/test_parenmatch.py | 2 | ||||
-rw-r--r-- | Lib/idlelib/parenmatch.py | 43 |
3 files changed, 28 insertions, 25 deletions
diff --git a/Lib/idlelib/configdialog.py b/Lib/idlelib/configdialog.py index 683c36e..7feae5d 100644 --- a/Lib/idlelib/configdialog.py +++ b/Lib/idlelib/configdialog.py @@ -27,8 +27,14 @@ from idlelib import macosx from idlelib.query import SectionName, HelpSource from idlelib.tabbedpages import TabbedPageSet from idlelib.textview import view_text +from idlelib.autocomplete import AutoComplete +from idlelib.codecontext import CodeContext +from idlelib.parenmatch import ParenMatch +from idlelib.paragraph import FormatParagraph changes = ConfigChanges() +# Reload changed options in the following classes. +reloadables = (AutoComplete, CodeContext, ParenMatch, FormatParagraph) class ConfigDialog(Toplevel): @@ -220,6 +226,8 @@ class ConfigDialog(Toplevel): instance.set_notabs_indentwidth() instance.ApplyKeybindings() instance.reset_help_menu_entries() + for klass in reloadables: + klass.reload() def create_page_extensions(self): """Part of the config dialog used for configuring IDLE extensions. diff --git a/Lib/idlelib/idle_test/test_parenmatch.py b/Lib/idlelib/idle_test/test_parenmatch.py index 6943a70..3caa275 100644 --- a/Lib/idlelib/idle_test/test_parenmatch.py +++ b/Lib/idlelib/idle_test/test_parenmatch.py @@ -58,7 +58,7 @@ class ParenMatchTest(unittest.TestCase): ('expression', ('1.10', '1.15'), ('1.10', '1.16'))): with self.subTest(style=style): text.delete('1.0', 'end') - pm.set_style(style) + pm.STYLE = style text.insert('insert', 'def foobar(a, b') pm.flash_paren_event('event') diff --git a/Lib/idlelib/parenmatch.py b/Lib/idlelib/parenmatch.py index 1221215..983ca20 100644 --- a/Lib/idlelib/parenmatch.py +++ b/Lib/idlelib/parenmatch.py @@ -45,10 +45,8 @@ class ParenMatch: # and deactivate_restore (which calls event_delete). editwin.text.bind(self.RESTORE_VIRTUAL_EVENT_NAME, self.restore_event) - self.bell = self.text.bell if self.BELL else lambda: None self.counter = 0 self.is_restore_active = 0 - self.set_style(self.STYLE) @classmethod def reload(cls): @@ -75,27 +73,11 @@ class ParenMatch: self.text.event_delete(self.RESTORE_VIRTUAL_EVENT_NAME, seq) self.is_restore_active = False - def set_style(self, style): - "Set tag and timeout functions." - self.STYLE = style - self.create_tag = ( - self.create_tag_opener if style in {"opener", "default"} else - self.create_tag_parens if style == "parens" else - self.create_tag_expression) # "expression" or unknown - - self.set_timeout = (self.set_timeout_last if self.FLASH_DELAY else - self.set_timeout_none) - def flash_paren_event(self, event): "Handle editor 'show surrounding parens' event (menu or shortcut)." indices = (HyperParser(self.editwin, "insert") .get_surrounding_brackets()) - if indices is None: - self.bell() - return "break" - self.activate_restore() - self.create_tag(indices) - self.set_timeout() + self.finish_paren_event(indices) return "break" def paren_closed_event(self, event): @@ -108,13 +90,19 @@ class ParenMatch: if not hp.is_in_code(): return indices = hp.get_surrounding_brackets(_openers[closer], True) - if indices is None: - self.bell() + self.finish_paren_event(indices) + return # Allow calltips to see ')' + + def finish_paren_event(self, indices): + if indices is None and self.BELL: + self.text.bell() return self.activate_restore() - self.create_tag(indices) - self.set_timeout() - return + # self.create_tag(indices) + self.tagfuncs.get(self.STYLE, self.create_tag_expression)(self, indices) + # self.set_timeout() + (self.set_timeout_last if self.FLASH_DELAY else + self.set_timeout_none)() def restore_event(self, event=None): "Remove effect of doing match." @@ -152,6 +140,13 @@ class ParenMatch: self.text.tag_add("paren", indices[0], rightindex) self.text.tag_config("paren", self.HILITE_CONFIG) + tagfuncs = { + 'opener': create_tag_opener, + 'default': create_tag_opener, + 'parens': create_tag_parens, + 'expression': create_tag_expression, + } + # any one of the set_timeout_XXX methods can be used depending on # the style |