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 EditorWindow import EditorWindow, fixwordbreaks
from FileList import FileList from FileList import FileList
from ColorDelegator import ColorDelegator from ColorDelegator import ColorDelegator
from UndoDelegator import UndoDelegator
from OutputWindow import OutputWindow from OutputWindow import OutputWindow
from IdleConf import idleconf from IdleConf import idleconf
import idlever 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): class ModifiedInterpreter(InteractiveInterpreter):
def __init__(self, tkconsole): def __init__(self, tkconsole):
@ -264,6 +287,7 @@ class PyShell(OutputWindow):
# Override classes # Override classes
ColorDelegator = ModifiedColorDelegator ColorDelegator = ModifiedColorDelegator
UndoDelegator = ModifiedUndoDelegator
# Override menu bar specs # Override menu bar specs
menu_specs = PyShellEditorWindow.menu_specs[:] menu_specs = PyShellEditorWindow.menu_specs[:]