Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9de9883

Browse files
committed
Override the Undo delegator to forbid any changes before the I/O mark.
It beeps if you try to insert or delete before the "iomark" mark. This makes the shell less confusing for newbies.
1 parent 6fbd1f8 commit 9de9883

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

Tools/idle/PyShell.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from EditorWindow import EditorWindow, fixwordbreaks
1616
from FileList import FileList
1717
from ColorDelegator import ColorDelegator
18+
from UndoDelegator import UndoDelegator
1819
from OutputWindow import OutputWindow
1920
from IdleConf import idleconf
2021
import idlever
@@ -127,6 +128,28 @@ def recolorize_main(self):
127128
})
128129

129130

131+
class ModifiedUndoDelegator(UndoDelegator):
132+
133+
# Forbid insert/delete before the I/O mark
134+
135+
def insert(self, index, chars, tags=None):
136+
try:
137+
if self.delegate.compare(index, "<", "iomark"):
138+
self.delegate.bell()
139+
return
140+
except TclError:
141+
pass
142+
UndoDelegator.insert(self, index, chars, tags)
143+
144+
def delete(self, index1, index2=None):
145+
try:
146+
if self.delegate.compare(index1, "<", "iomark"):
147+
self.delegate.bell()
148+
return
149+
except TclError:
150+
pass
151+
UndoDelegator.delete(self, index1, index2)
152+
130153
class ModifiedInterpreter(InteractiveInterpreter):
131154

132155
def __init__(self, tkconsole):
@@ -264,6 +287,7 @@ class PyShell(OutputWindow):
264287

265288
# Override classes
266289
ColorDelegator = ModifiedColorDelegator
290+
UndoDelegator = ModifiedUndoDelegator
267291

268292
# Override menu bar specs
269293
menu_specs = PyShellEditorWindow.menu_specs[:]

0 commit comments

Comments
 (0)