]> granicus.if.org Git - python/commitdiff
Make the return key do what I mean more often.
authorGuido van Rossum <guido@python.org>
Tue, 13 Oct 1998 14:41:27 +0000 (14:41 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 13 Oct 1998 14:41:27 +0000 (14:41 +0000)
Tools/idle/PyShell.py

index ff70bf21fdbf9db2f168fb3ff56ada28e357c6ab..d8c3dc161eac4fd4b381abc178b37dd1c6921a38 100644 (file)
@@ -368,18 +368,20 @@ class PyShell(PyShellEditorWindow):
         if self.executing and not self.reading:
             return # Let the default binding (insert '\n') take over
         # If some text is selected, recall the selection
+        # (but only if this before the I/O mark)
         try:
             sel = self.text.get("sel.first", "sel.last")
             if sel:
-                self.recall(sel)
-                return "break"
+                if self.text.compare("self.last", "<=", "iomark"):
+                    self.recall(sel)
+                    return "break"
         except:
             pass
         # If we're strictly before the line containing iomark, recall
         # the current line, less a leading prompt, less leading or
         # trailing whitespace
         if self.text.compare("insert", "<", "iomark linestart"):
-            # Check if there's a relevant stdin mark -- if so, use it
+            # Check if there's a relevant stdin range -- if so, use it
             prev = self.text.tag_prevrange("stdin", "insert")
             if prev and self.text.compare("insert", "<", prev[1]):
                 self.recall(self.text.get(prev[0], prev[1]))
@@ -391,13 +393,13 @@ class PyShell(PyShellEditorWindow):
             # No stdin mark -- just get the current line
             self.recall(self.text.get("insert linestart", "insert lineend"))
             return "break"
-        # If we're anywhere in the current input (including in the
-        # prompt) but not at the very end, move the cursor to the end.
-        if self.text.compare("insert", "<", "end-1c"):
-            self.text.mark_set("insert", "end-1c")
-            self.text.see("insert")
+        # If we're in the current input before its last line,
+        # insert a newline right at the insert point
+        if self.text.compare("insert", "<", "end-1c linestart"):
+            self.auto.autoindent(event)
             return "break"
-        # OK, we're already at the end -- insert a newline and run it.
+        # We're in the last line; append a newline and submit it
+        self.text.mark_set("insert", "end-1c")
         if self.reading:
             self.text.insert("insert", "\n")
             self.text.see("insert")