Author: Ronny Pfannschmidt <[email protected]>
Branch: py3ksupport
Changeset: r153:61d643893b64
Date: 2011-10-28 11:57 +0200
http://bitbucket.org/pypy/pyrepl/changeset/61d643893b64/

Log:    use lines of unicode_escaped strings for history - its multi-python
        safe and more readable

diff --git a/pyrepl/python_reader.py b/pyrepl/python_reader.py
--- a/pyrepl/python_reader.py
+++ b/pyrepl/python_reader.py
@@ -21,6 +21,7 @@
 
 # one impressive collections of imports:
 from __future__ import print_function
+from __future__ import unicode_literals
 from pyrepl.completing_reader import CompletingReader
 from pyrepl.historical_reader import HistoricalReader
 from pyrepl import completing_reader, reader
@@ -75,7 +76,7 @@
         text = r.get_unicode()
         try:
             # ooh, look at the hack:
-            code = r.compiler("#coding:utf-8\n"+text)
+            code = r.compiler(text)
         except (OverflowError, SyntaxError, ValueError):
             self.finish = 1
         else:
@@ -89,16 +90,14 @@
 import_line_prog = re.compile(
     "^(?:import|from)\s+(?P<mod>[A-Za-z_.0-9]*)\s*$")
 
-def mk_saver(reader):
-    def saver(reader=reader):
-        try:
-            file = open(os.path.expanduser("~/.pythoni.hist"), "w")
-        except IOError:
-            pass
-        else:
-            pickle.dump(reader.history, file)
-            file.close()
-    return saver
+def saver(reader=reader):
+    try:
+        with open(os.path.expanduser("~/.pythoni.hist"), "wb") as fp:
+            fp.write(b'\n'.join(item.encode('unicode_escape')
+                                for item in reader.history))
+    except IOError as e:
+        print(e)
+        pass
 
 class PythonicReader(CompletingReader, HistoricalReader):
     def collect_keymap(self):
@@ -119,17 +118,18 @@
         else:
             self.compiler = compiler
         try:
-            file = open(os.path.expanduser("~/.pythoni.hist"))
+            file = open(os.path.expanduser("~/.pythoni.hist"), 'rb')
         except IOError:
-            pass
+            self.history = []
         else:
             try:
-                self.history = pickle.load(file)
+                lines = file.readlines()
+                self.history = [ x.rstrip(b'\n').decode('unicode_escape') for 
x in lines]
             except:
                 self.history = []
             self.historyi = len(self.history)
             file.close()
-        atexit.register(mk_saver(self))
+        atexit.register(lambda: saver(self))
         for c in [maybe_accept]:
             self.commands[c.__name__] = c
             self.commands[c.__name__.replace('_', '-')] = c        
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to