[Python-checkins] r51189 - python/trunk/Lib/idlelib/NEWS.txt python/trunk/Lib/idlelib/PyShell.py

kurt.kaiser python-checkins at python.org
Thu Aug 10 19:11:09 CEST 2006


Author: kurt.kaiser
Date: Thu Aug 10 19:11:09 2006
New Revision: 51189
Modified:
 python/trunk/Lib/idlelib/NEWS.txt
 python/trunk/Lib/idlelib/PyShell.py
Log:
Retrieval of previous shell command was not always preserving indentation
since 1.2a1) Patch 1528468 Tal Einat.
Modified: python/trunk/Lib/idlelib/NEWS.txt
==============================================================================
--- python/trunk/Lib/idlelib/NEWS.txt	(original)
+++ python/trunk/Lib/idlelib/NEWS.txt	Thu Aug 10 19:11:09 2006
@@ -3,6 +3,9 @@
 
 *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).
Modified: python/trunk/Lib/idlelib/PyShell.py
==============================================================================
--- python/trunk/Lib/idlelib/PyShell.py	(original)
+++ python/trunk/Lib/idlelib/PyShell.py	Thu Aug 10 19:11:09 2006
@@ -593,7 +593,7 @@
 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 @@
 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()


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /