]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Override the Undo delegator to forbid any changes before the I/O mark.
authorGuido van Rossum <guido@python.org>
Tue, 7 Mar 2000 18:51:49 +0000 (18:51 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 7 Mar 2000 18:51:49 +0000 (18:51 +0000)
It beeps if you try to insert or delete before the "iomark" mark.
This makes the shell less confusing for newbies.

Tools/idle/PyShell.py

index 6e2673833ac789408778b5ed85dbd9cf1ada9152..cbd7d66bee2ebbaeade05cda127d5158ef3c2142 100644 (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[:]