Commit 9de98831 authored by Guido van Rossum's avatar Guido van Rossum

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.
parent 6fbd1f85
...@@ -15,6 +15,7 @@ import tkMessageBox ...@@ -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): ...@@ -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): ...@@ -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[:]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment