diff options
author | Kurt B. Kaiser <kbk@shore.net> | 2006-08-10 17:11:09 (GMT) |
---|---|---|
committer | Kurt B. Kaiser <kbk@shore.net> | 2006-08-10 17:11:09 (GMT) |
commit | cd3d8bee022cda55c43c2130122d092f5059d115 (patch) | |
tree | f7639935ca0a65550ac70118dca4e1ababe70861 | |
parent | b2dd1a3906d6ad0cbd4a136f2c93580b48212975 (diff) | |
download | cpython-cd3d8bee022cda55c43c2130122d092f5059d115.zip cpython-cd3d8bee022cda55c43c2130122d092f5059d115.tar.gz cpython-cd3d8bee022cda55c43c2130122d092f5059d115.tar.bz2 |
Retrieval of previous shell command was not always preserving indentation
since 1.2a1) Patch 1528468 Tal Einat.
-rw-r--r-- | Lib/idlelib/NEWS.txt | 3 | ||||
-rw-r--r-- | Lib/idlelib/PyShell.py | 24 |
2 files changed, 18 insertions, 9 deletions
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index 235963e..5982396 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -3,6 +3,9 @@ What's New in IDLE 1.2c1? *Release date: XX-AUG-2006* +- Retrieval of previous shell command was not always preserving indentation + (since 1.2a1) Patch 1528468 Tal Einat. + - Changing tokenize (39046) to detect dedent broke tabnanny check (since 1.2a1) - ToggleTab dialog was setting indent to 8 even if cancelled (since 1.2a1). diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py index c0bd5d0..12a45a4 100644 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -593,7 +593,7 @@ class ModifiedInterpreter(InteractiveInterpreter): source = source.encode(IOBinding.encoding) except UnicodeError: self.tkconsole.resetoutput() - self.write("Unsupported characters in input") + self.write("Unsupported characters in input\n") return try: # InteractiveInterpreter.runsource() calls its runcode() method, @@ -1138,21 +1138,27 @@ class PyShell(OutputWindow): return "break" def recall(self, s, event): + # remove leading and trailing empty or whitespace lines + s = re.sub(r'^\s*\n', '' , s) + s = re.sub(r'\n\s*$', '', s) + lines = s.split('\n') 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') - prefix = self.text.get("insert linestart","insert").rstrip() - if prefix and prefix[-1]==':': + prefix = self.text.get("insert linestart", "insert") + if prefix.rstrip().endswith(':'): self.newline_and_indent_event(event) - self.text.insert("insert",lines[0].strip()) + prefix = self.text.get("insert linestart", "insert") + self.text.insert("insert", lines[0].strip()) if len(lines) > 1: - self.newline_and_indent_event(event) + orig_base_indent = re.search(r'^([ \t]*)', lines[0]).group(0) + new_base_indent = re.search(r'^([ \t]*)', prefix).group(0) for line in lines[1:]: - self.text.insert("insert", line.strip()) - self.newline_and_indent_event(event) + if line.startswith(orig_base_indent): + # replace orig base indentation with new indentation + line = new_base_indent + line[len(orig_base_indent):] + self.text.insert('insert', '\n'+line.rstrip()) finally: self.text.see("insert") self.text.undo_block_stop() |