21
21
22
22
# one impressive collections of imports:
23
23
from __future__ import print_function
24
+ from __future__ import unicode_literals
24
25
from pyrepl .completing_reader import CompletingReader
25
26
from pyrepl .historical_reader import HistoricalReader
26
27
from pyrepl import completing_reader , reader
@@ -75,7 +76,7 @@ def do(self):
75
76
text = r .get_unicode ()
76
77
try :
77
78
# ooh, look at the hack:
78
- code = r .compiler ("#coding:utf-8 \n " + text )
79
+ code = r .compiler (text )
79
80
except (OverflowError , SyntaxError , ValueError ):
80
81
self .finish = 1
81
82
else :
@@ -89,16 +90,14 @@ def do(self):
89
90
import_line_prog = re .compile (
90
91
"^(?:import|from)\s+(?P<mod>[A-Za-z_.0-9]*)\s*$" )
91
92
92
- def mk_saver (reader ):
93
- def saver (reader = reader ):
94
- try :
95
- file = open (os .path .expanduser ("~/.pythoni.hist" ), "w" )
96
- except IOError :
97
- pass
98
- else :
99
- pickle .dump (reader .history , file )
100
- file .close ()
101
- return saver
93
+ def saver (reader = reader ):
94
+ try :
95
+ with open (os .path .expanduser ("~/.pythoni.hist" ), "wb" ) as fp :
96
+ fp .write (b'\n ' .join (item .encode ('unicode_escape' )
97
+ for item in reader .history ))
98
+ except IOError as e :
99
+ print (e )
100
+ pass
102
101
103
102
class PythonicReader (CompletingReader , HistoricalReader ):
104
103
def collect_keymap (self ):
@@ -119,17 +118,18 @@ def __init__(self, console, locals,
119
118
else :
120
119
self .compiler = compiler
121
120
try :
122
- file = open (os .path .expanduser ("~/.pythoni.hist" ))
121
+ file = open (os .path .expanduser ("~/.pythoni.hist" ), 'rb' )
123
122
except IOError :
124
- pass
123
+ self . history = []
125
124
else :
126
125
try :
127
- self .history = pickle .load (file )
126
+ lines = file .readlines ()
127
+ self .history = [ x .rstrip (b'\n ' ).decode ('unicode_escape' ) for x in lines ]
128
128
except :
129
129
self .history = []
130
130
self .historyi = len (self .history )
131
131
file .close ()
132
- atexit .register (mk_saver (self ))
132
+ atexit .register (lambda : saver (self ))
133
133
for c in [maybe_accept ]:
134
134
self .commands [c .__name__ ] = c
135
135
self .commands [c .__name__ .replace ('_' , '-' )] = c
0 commit comments