8000 bpo-29910: IDLE no longer deletes a character after commenting out a … · python/cpython@213ce12 · GitHub
[go: up one dir, main page]

Skip to content

Commit 213ce12

Browse files
serhiy-storchakaterryjreedy
authored andcommitted
bpo-29910: IDLE no longer deletes a character after commenting out a region (#825)
This happened because shortcut has a class binding and 'break' was not returned. Fix other potential conflicts between IDLE and default key bindings. * Add news item * Update NEWS
1 parent 9a02ae3 commit 213ce12

File tree

11 files changed

+48
-16
lines changed

11 files changed

+48
-16
lines changed

Lib/idlelib/autocomplete.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ def force_open_completions_event(self, event):
6060
if a function call is needed.
6161
"""
6262
self.open_completions(True, False, True)
63+
return "break"
6364

6465
def try_open_completions_event(self, event):
6566
"""Happens when it would be nice to open a completion list, but not

Lib/idlelib/calltip_w.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,24 +89,27 @@ def checkhide_event(self, event=None):
8989
# If the event was triggered by the same event that unbinded
9090
# this function, the function will be called nevertheless,
9191
# so do nothing in this case.
92-
return
92+
return None
9393
curline, curcol = map(int, self.widget.index("insert").split('.'))
9494
if curline < self.parenline or \
9595
(curline == self.parenline and curcol <= self.parencol) or \
9696
self.widget.compare("insert", ">", MARK_RIGHT):
9797
self.hidetip()
98+
return "break"
9899
else:
99100
self.position_window()
100101
if self.checkhide_after_id is not None:
101102
self.widget.after_cancel(self.checkhide_after_id)
102103
self.checkhide_after_id = \
103104
self.widget.after(CHECKHIDE_TIME, self.checkhide_event)
105+
return None
104106

105107
def hide_event(self, event):
106108
if not self.tipwindow:
107109
# See the explanation in checkhide_event.
108-
return
110+
return None
109111
self.hidetip()
112+
return "break"
110113

111114
def hidetip(self):
112115
if not self.tipwindow:

Lib/idlelib/calltips.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def _remove_calltip_window(self, event=None):
4747
def force_open_calltip_event(self, event):
4848
"The user selected the menu entry or hotkey, open the tip."
4949
self.open_calltip(True)
50+
return "break"
5051

5152
def try_open_calltip_event(self, event):
5253
"""Happens when it would be nice to open a CallTip, but not really

Lib/idlelib/codecontext.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ def toggle_code_context_event(self, event=None):
8989
idleConf.SetOption("extensions", "CodeContext", "visible",
9090
str(self.label is not None))
9191
idleConf.SaveUserCfgFiles()
92+
return "break"
9293

9394
def get_line_info(self, linenum):
9495
"""Get the line indent value, text, and any block start keyword

Lib/idlelib/editor.py

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import importlib
21
import importlib.abc
32
import importlib.util
43
import os
@@ -147,7 +146,7 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
147146
text.bind("<<python-docs>>", self.python_docs)
148147
text.bind("<<about-idle>>", self.about_dialog)
149148
text.bind("<<open-config-dialog>>", self.config_dialog)
150-
text.bind("<<open-module>>", self.open_module)
149+
text.bind("<<open-module>>", self.open_module_event)
151150
text.bind("<<do-nothing>>", lambda event: "break")
152151
text.bind("<<select-all>>", self.select_all)
153152
text.bind("<<remove-selection>>", self.remove_selection)
@@ -294,7 +293,7 @@ def new_callback(self, event):
294293
def home_callback(self, event):
295294
if (event.state & 4) != 0 and event.keysym == "Home":
296295
# state&4==Control. If <Control-Home>, use the Tk binding.
297-
return
296+
return None
298297
if self.text.index("iomark") and \
299298
self.text.compare("iomark", "<=", "insert lineend") and \
300299
self.text.compare("insert linestart", "<=", "iomark"):
@@ -423,6 +422,7 @@ def right_menu_event(self, event):
423422
rmenu.tk_popup(event.x_root, event.y_root)
424423
if iswin:
425424
self.text.config(cursor="ibeam")
425+
return "break"
426426

427427
rmenu_specs = [
428428
# ("Label", "<<virtual-event>>", "statefuncname"), ...
@@ -464,11 +464,13 @@ def about_dialog(self, event=None):
464464
"Handle Help 'About IDLE' event."
465465
# Synchronize with macosx.overrideRootMenu.about_dialog.
466466
help_about.AboutDialog(self.top)
467+
return "break"
467468

468469
def config_dialog(self, event=None):
469470
"Handle Options 'Configure IDLE' event."
470471
# Synchronize with macosx.overrideRootMenu.config_dialog.
471472
configdialog.ConfigDialog(self.top,'Settings')
473+
return "break"
472474

473475
def help_dialog(self, event=None):
474476
"Handle Help 'IDLE Help' event."
@@ -478,6 +480,7 @@ def help_dialog(self, event=None):
478480
else:
479481
parent = self.top
480482
help.show_idlehelp(parent)
483+
return "break"
481484

482485
def python_docs(self, event=None):
483486
if sys.platform[:3] == 'win':
@@ -497,7 +500,7 @@ def cut(self,event):
497500
def copy(self,event):
498501
if not self.text.tag_ranges("sel"):
499502
# There is no selection, so do nothing and maybe interrupt.
500-
return
503+
return None
501504
self.text.event_generate("<<Copy>>")
502505
return "break"
503506

@@ -515,6 +518,7 @@ def select_all(self, event=None):
515518
def remove_selection(self, event=None):
516519
self.text.tag_remove("sel", "1.0", "end")
517520
self.text.see("insert")
521+
return "break"
518522

519523
def move_at_edge_if_selection(self, edge_index):
520524
"""Cursor move begins at start or end of selection
@@ -575,8 +579,9 @@ def goto_line_event(self, event):
575579
return "break"
576580
text.mark_set("insert", "%d.0" % lineno)
577581
text.see("insert")
582+
return "break"
578583

579-
def open_module(self, event=None):
584+
def open_module(self):
580585
"""Get module name from user and open it.
581586
582587
Return module path or None for calls by open_class_browser
@@ -600,21 +605,27 @@ def open_module(self, event=None):
600605
self.io.loadfile(file_path)
601606
return file_path
602607

608+
def open_module_event(self, event):
609+
self.open_module()
610+
return "break"
611+
603612
def open_class_browser(self, event=None):
604613
filename = self.io.filename
605614
if not (self.__class__.__name__ == 'PyShellEditorWindow'
606615
and filename):
607616
filename = self.open_module()
608617
if filename is None:
609-
return
618+
return "break"
610619
head, tail = os.path.split(filename)
611620
base, ext = os.path.splitext(tail)
612621
from idlelib import browser
613622
browser.ClassBrowser(self.flist, base, [head])
623+
return "break"
614624

615625
def open_path_browser(self, event=None):
616626
from idlelib import pathbrowser
617627
pathbrowser.PathBrowser(self.flist)
628+
return "break"
618629

619630
def open_turtle_demo(self, event = None):
620631
import subprocess
@@ -623,6 +634,7 @@ def open_turtle_demo(self, event = None):
623634
'-c',
624635
'from turtledemo.__main__ import main; main()']
625636
subprocess.Popen(cmd, shell=False)
637+
return "break"
626638

627639
def gotoline(self, lineno):
628640
if lineno is not None and lineno > 0:
@@ -879,6 +891,7 @@ def long_title(self):
879891

880892
def center_insert_event(self, event):
881893
self.center()
894+
return "break"
882895

883896
def center(self, mark="insert"):
884897
text = self.text
@@ -910,6 +923,7 @@ def get_geometry(self):
910923

911924
def close_event(self, event):
912925
self.close()
926+
return "break"
913927

914928
def maybesave(self):
915929
if self.io:
@@ -1357,6 +1371,7 @@ def comment_region_event(self, event):
13571371
line = lines[pos]
13581372
lines[pos] = '##' + line
13591373
self.set_region(head, tail, chars, lines)
1374+
return "break"
13601375

13611376
def uncomment_region_event(self, event):
13621377
head, tail, chars, lines = self.get_region()
@@ -1370,6 +1385,7 @@ def uncomment_region_event(self, event):
13701385
line = line[1:]
13711386
lines[pos] = line
13721387
self.set_region(head, tail, chars, lines)
1388+
return "break"
13731389

13741390
def tabify_region_event(self, event):
13751391
head, tail, chars, lines = self.get_region()
@@ -1382,6 +1398,7 @@ def tabify_region_event(self, event):
13821398
ntabs, nspaces = divmod(effective, tabwidth)
13831399
lines[pos] = '\t' * ntabs + ' ' * nspaces + line[raw:]
13841400
self.set_region(head, tail, chars, lines)
1401+
return "break"
13851402

13861403
def untabify_region_event(self, event):
13871404
head, tail, chars, lines = self.get_region()
@@ -1390,6 +1407,7 @@ def untabify_region_event(self, event):
13901407
for pos in range(len(lines)):
13911408
lines[pos] = lines[pos].expandtabs(tabwidth)
13921409
self.set_region(head, tail, chars, lines)
1410+
return "break"
13931411

13941412
def toggle_tabs_event(self, event):
13951413
if self.askyesno(

Lib/idlelib/idle_test/test_parenmatch.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,14 @@ def test_paren_corner(self):
9595
pm = self.get_parenmatch()
9696

9797
text.insert('insert', '# this is a commen)')
98-
self.assertIsNone(pm.paren_closed_event('event'))
98+
pm.paren_closed_event('event')
9999

100100
text.insert('insert', '\ndef')
101-
self.assertIsNone(pm.flash_paren_event('event'))
102-
self.assertIsNone(pm.paren_closed_event('event'))
101+
pm.flash_paren_event('event')
102+
pm.paren_closed_event('event')
103103

104104
text.insert('insert', ' a, *arg)')
105-
self.assertIsNone(pm.paren_closed_event('event'))
105+
pm.paren_closed_event('event')
106106

107107
def test_handle_restore_timer(self):
108108
pm = self.get_parenmatch()

Lib/idlelib/parenmatch.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,26 +94,28 @@ def flash_paren_event(self, event):
9494
.get_surrounding_brackets())
9595
if indices is None:
9696
self.bell()
97-
return
97+
return "break"
9898
self.activate_restore()
9999
self.create_tag(indices)
100100
self.set_timeout_last()
101+
return "break"
101102

102103
def paren_closed_event(self, event):
103104
# If it was a shortcut and not really a closing paren, quit.
104105
closer = self.text.get("insert-1c")
105106
if closer not in _openers:
106-
return
107+
return "break"
107108
hp = HyperParser(self.editwin, "insert-1c")
108109
if not hp.is_in_code():
109-
return
110+
return "break"
110111
indices = hp.get_surrounding_brackets(_openers[closer], True)
111112
if indices is None:
112113
self.bell()
113-
return
114+
return "break"
114115
self.activate_restore()
115116
self.create_tag(indices)
116117
self.set_timeout()
118+
return "break"
117119

118120
def restore_event(self, event=None):
119121
self.text.tag_delete("paren")

Lib/idlelib/runscript.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ def check_module_event(self, event):
6363
return 'break'
6464
if not self.tabnanny(filename):
6565
return 'break'
66+
return "break"
6667

6768
def tabnanny(self, filename):
6869
# XXX: tabnanny should work on binary files as well

Lib/idlelib/scrolledlist.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ def popup_event(self, event):
7676
index = self.listbox.index("active")
7777
self.select(index)
7878
menu.tk_popup(event.x_root, event.y_root)
79+
return "break"
7980

8081
def make_menu(self):
8182
menu = Menu(self.listbox, tearoff=0)

Lib/idlelib/zoomheight.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ def __init__(self, editwin):
2020
def zoom_height_event(self, event):
2121
top = self.editwin.top
2222
zoom_height(top)
23+
return "break"
2324

2425

2526
def zoom_height(top):
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
IDLE no longer deletes a character after commenting out a region by a key
2+
shortcut. Add ``return 'break'`` for this and other potential conflicts
3+
between IDLE and default key bindings.

0 commit comments

Comments
 (0)
0