From dc1e70987f49aa23bf1d07f32c476edeba0cec30 Mon Sep 17 00:00:00 2001
From: "Kurt B. Kaiser" <kbk@shore.net>
Date: Thu, 11 Jul 2002 04:33:41 +0000
Subject: [PATCH] 1. Prevent Undo before IOmark in PyShell.PyShell 2.
 Consolidate Undo code in EditorWindow.EditorWindow 3. Remove Formatting and
 Run menus from PyShell

---
 Lib/idlelib/EditorWindow.py | 22 ++++++++++++----------
 Lib/idlelib/PyShell.py      | 13 ++++++++++---
 2 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index a7aa185c85..c8b0d412ec 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -151,10 +151,8 @@ class EditorWindow:
             text.bind("<<open-path-browser>>", self.open_path_browser)
 
         self.set_status_bar()
-        
         vbar['command'] = text.yview
         vbar.pack(side=RIGHT, fill=Y)
-
         text['yscrollcommand'] = vbar.set
         fontWeight='normal'
         if idleConf.GetOption('main','EditorWindow','font-bold',type='bool'):
@@ -168,30 +166,34 @@ class EditorWindow:
 
         self.per = per = self.Percolator(text)
         if self.ispythonsource(filename):
-            self.color = color = self.ColorDelegator(); per.insertfilter(color)
+            self.color = color = self.ColorDelegator()
+            per.insertfilter(color)
             ##print "Initial colorizer"
         else:
             ##print "No initial colorizer"
             self.color = None
-        self.undo = undo = self.UndoDelegator(); per.insertfilter(undo)
+
+        self.undo = undo = self.UndoDelegator()
+        per.insertfilter(undo)
+        text.undo_block_start = undo.undo_block_start
+        text.undo_block_stop = undo.undo_block_stop
+        undo.set_saved_change_hook(self.saved_change_hook)
+
+        # IOBinding implements file I/O and printing functionality
         self.io = io = self.IOBinding(self)
+        io.set_filename_change_hook(self.filename_change_hook)
+
         #create the Recent Files submenu
         self.menuRecentFiles=Menu(self.menubar)
         self.menudict['file'].insert_cascade(3,label='Recent Files',
                 underline=0,menu=self.menuRecentFiles)
         self.UpdateRecentFilesList()
 
-        text.undo_block_start = undo.undo_block_start
-        text.undo_block_stop = undo.undo_block_stop
-        undo.set_saved_change_hook(self.saved_change_hook)
-        io.set_filename_change_hook(self.filename_change_hook)
-
         if filename:
             if os.path.exists(filename):
                 io.loadfile(filename)
             else:
                 io.set_filename(filename)
-
         self.saved_change_hook()
 
         self.load_extensions()
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 4771d2e3a2..f2ac36d468 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -450,9 +450,15 @@ class PyShell(OutputWindow):
     ColorDelegator = ModifiedColorDelegator
     UndoDelegator = ModifiedUndoDelegator
 
-    # Override menu bar specs
-    menu_specs = PyShellEditorWindow.menu_specs[:]
-    menu_specs.insert(len(menu_specs)-3, ("debug", "_Debug"))
+    # Override menus: Run and Format not desired in shell; add Debug
+    menu_specs = [
+        ("file", "_File"),
+        ("edit", "_Edit"),
+        ("debug", "_Debug"),
+        ("settings", "_Settings"),
+        ("windows", "_Windows"),
+        ("help", "_Help"),
+    ]
 
     # New classes
     from IdleHistory import History
@@ -825,6 +831,7 @@ class PyShell(OutputWindow):
         self.console.write(s)
         self.text.mark_set("insert", "end-1c")
         self.set_line_and_column()
+        self.io.reset_undo()
 
     def resetoutput(self):
         source = self.text.get("iomark", "end-1c")
-- 
2.40.0