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
8 changes: 8 additions & 0 deletions Lib/idlelib/configdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,14 @@
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):
Expand Down Expand Up @@ -220,6 +226,8 @@ def activate_config_changes(self):
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.
Expand Down
2 changes: 1 addition & 1 deletion Lib/idlelib/idle_test/test_parenmatch.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ def test_paren_styles(self):
('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')
Expand Down
43 changes: 19 additions & 24 deletions Lib/idlelib/parenmatch.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,8 @@ def __init__(self, editwin):
# 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):
Expand All @@ -75,27 +73,11 @@ def deactivate_restore(self):
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):
Expand All @@ -108,13 +90,19 @@ def paren_closed_event(self, event):
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."
Expand Down Expand Up @@ -152,6 +140,13 @@ def create_tag_expression(self, indices):
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

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
IDLE - Update non-key options in former extension classes. When applying
configdialog changes, call .reload for each feature class. Change ParenMatch
so updated options affect existing instances attached to existing editor
windows.