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.
This commit is contained in:
Guido van Rossum 2000-03-07 18:51:49 +00:00
parent 6fbd1f85d9
commit 9de988315a
1 changed files with 24 additions and 0 deletions

View File

@ -15,6 +15,7 @@ import tkMessageBox
from EditorWindow import EditorWindow, fixwordbreaks
from FileList import FileList
from ColorDelegator import ColorDelegator
from UndoDelegator import UndoDelegator
from OutputWindow import OutputWindow
from IdleConf import idleconf
import idlever
@ -127,6 +128,28 @@ class ModifiedColorDelegator(ColorDelegator):
})
class ModifiedUndoDelegator(UndoDelegator):
# Forbid insert/delete before the I/O mark
def insert(self, index, chars, tags=None):
try:
if self.delegate.compare(index, "<", "iomark"):
self.delegate.bell()
return
except TclError:
pass
UndoDelegator.insert(self, index, chars, tags)
def delete(self, index1, index2=None):
try:
if self.delegate.compare(index1, "<", "iomark"):
self.delegate.bell()
return
except TclError:
pass
UndoDelegator.delete(self, index1, index2)
class ModifiedInterpreter(InteractiveInterpreter):
def __init__(self, tkconsole):
@ -264,6 +287,7 @@ class PyShell(OutputWindow):
# Override classes
ColorDelegator = ModifiedColorDelegator
UndoDelegator = ModifiedUndoDelegator
# Override menu bar specs
menu_specs = PyShellEditorWindow.menu_specs[:]