summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib
diff options
context:
space:
mode:
authorKurt B. Kaiser <kbk@shore.net>2005-06-19 18:56:15 (GMT)
committerKurt B. Kaiser <kbk@shore.net>2005-06-19 18:56:15 (GMT)
commita7daba6866136d1c554ba6bf278e9ddaf52ecac6 (patch)
tree9d9fb6a21a24b3ee3e5eafd3809d4d4b82a1ff97 /Lib/idlelib
parentbff60aeb938fc6947823b3fdea9c74898057ce98 (diff)
downloadcpython-a7daba6866136d1c554ba6bf278e9ddaf52ecac6.zip
cpython-a7daba6866136d1c554ba6bf278e9ddaf52ecac6.tar.gz
cpython-a7daba6866136d1c554ba6bf278e9ddaf52ecac6.tar.bz2
<Enter> when cursor is on a previous command retrieves that command. Instead
of replacing the input line, the previous command is now appended to the input line. Indentation is preserved, and undo is enabled. Patch 1196917 Jeff Shute Modified Files: NEWS.txt PyShell.py
Diffstat (limited to 'Lib/idlelib')
-rw-r--r--Lib/idlelib/NEWS.txt5
-rw-r--r--Lib/idlelib/PyShell.py34
2 files changed, 32 insertions, 7 deletions
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 7799bf4..3442f40 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,11 @@ What's New in IDLE 1.2a0?
*Release date: XX-XXX-2005*
+- <Enter> when cursor is on a previous command retrieves that command. Instead
+ of replacing the input line, the previous command is now appended to the
+ input line. Indentation is preserved, and undo is enabled.
+ Patch 1196917 Jeff Shute
+
- Clarify "tab/space" Error Dialog and "Tab Width" Dialog associated with
the Untabify command.
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index fa348be..8115e63 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -1074,7 +1074,7 @@ class PyShell(OutputWindow):
sel = self.text.get("sel.first", "sel.last")
if sel:
if self.text.compare("sel.last", "<=", "iomark"):
- self.recall(sel)
+ self.recall(sel, event)
return "break"
except:
pass
@@ -1085,18 +1085,18 @@ class PyShell(OutputWindow):
# 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]))
+ self.recall(self.text.get(prev[0], prev[1]), event)
return "break"
next = self.text.tag_nextrange("stdin", "insert")
if next and self.text.compare("insert lineend", ">=", next[0]):
- self.recall(self.text.get(next[0], next[1]))
+ self.recall(self.text.get(next[0], next[1]), event)
return "break"
# No stdin mark -- just get the current line, less any prompt
line = self.text.get("insert linestart", "insert lineend")
last_line_of_prompt = sys.ps1.split('\n')[-1]
if line.startswith(last_line_of_prompt):
line = line[len(last_line_of_prompt):]
- self.recall(line)
+ self.recall(line, event)
return "break"
# If we're between the beginning of the line and the iomark, i.e.
# in the prompt area, move to the end of the prompt
@@ -1127,9 +1127,29 @@ class PyShell(OutputWindow):
self.runit()
return "break"
- def recall(self, s):
- if self.history:
- self.history.recall(s)
+ def recall(self, s, event):
+ self.text.undo_block_start()
+ try:
+ self.text.tag_remove("sel", "1.0", "end")
+ self.text.mark_set("insert", "end-1c")
+ s = s.strip()
+ lines = s.split('\n')
+ if lines:
+ prefix = self.text.get("insert linestart","insert").rstrip()
+ if prefix and prefix[-1]==':':
+ self.newline_and_indent_event(event)
+
+ self.text.insert("insert",lines[0].strip())
+ if len(lines) > 1:
+ self.newline_and_indent_event(event)
+ for line in lines[1:]:
+ self.text.insert("insert", line.strip())
+ self.newline_and_indent_event(event)
+ else:
+ self.text.insert("insert", s)
+ finally:
+ self.text.see("insert")
+ self.text.undo_block_stop()
def runit(self):
line = self.text.get("iomark", "end-1c")