[pyrepl-checkins]
pyrepl/pyrepl python_reader.py,1.15,1.16 reader.py,1.13,1.14
unix_console.py,1.12,1.13
mwh@codespeak.net
mwh@codespeak.net
Wed, 12 May 2004 18:21:40 +0200 (MEST)
Update of /cvs/pyrepl/pyrepl/pyrepl
In directory thoth.codespeak.net:/tmp/cvs-serv27716/pyrepl
Modified Files:
python_reader.py reader.py unix_console.py
Log Message:
Hackish twisted support.
Index: python_reader.py
===================================================================
RCS file: /cvs/pyrepl/pyrepl/pyrepl/python_reader.py,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** python_reader.py 11 May 2004 17:56:01 -0000 1.15
--- python_reader.py 12 May 2004 16:21:38 -0000 1.16
***************
*** 287,290 ****
--- 287,312 ----
break
+ def twistedinteract(self):
+ from twisted.internet import reactor
+ outerself = self
+ class Me(object):
+ def fileno(self):
+ """ We want to select on FD 0 """
+ return 0
+
+ def doRead(self):
+ """called when input is ready"""
+ outerself.handle1()
+
+ def logPrefix(self): return 'PyRepl'
+
+ reactor.addReader(Me())
+ self.prepare()
+ try:
+ reactor.run()
+ finally:
+ self.restore()
+
+
def cocoainteract(self, inputfilehandle=None, outputfilehandle=None):
# only call this when there's a run loop already going!
***************
*** 294,298 ****
! def main(use_pygame_console=0, interactmethod="interact"):
si, se, so = sys.stdin, sys.stderr, sys.stdout
try:
--- 316,320 ----
! def main(use_pygame_console=0, interactmethod="twistedinteract"):
si, se, so = sys.stdin, sys.stderr, sys.stdout
try:
Index: reader.py
===================================================================
RCS file: /cvs/pyrepl/pyrepl/pyrepl/reader.py,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** reader.py 11 May 2004 17:56:01 -0000 1.13
--- reader.py 12 May 2004 16:21:38 -0000 1.14
***************
*** 526,529 ****
--- 526,533 ----
self.do_cmd(cmd)
return 1
+
+ def push_char(self, char):
+ self.console.push_char(char)
+ self.handle1(0)
def readline(self):
Index: unix_console.py
===================================================================
RCS file: /cvs/pyrepl/pyrepl/pyrepl/unix_console.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** unix_console.py 11 May 2004 18:05:00 -0000 1.12
--- unix_console.py 12 May 2004 16:21:38 -0000 1.13
***************
*** 152,155 ****
--- 152,156 ----
self.event_queue = unix_eventqueue.EventQueue(self.input_fd)
+ self.partial_char = ''
def change_encoding(self, encoding):
***************
*** 377,398 ****
self.event_queue.insert(Event('resize', None))
def get_event(self, block=1):
while self.event_queue.empty():
while 1: # All hail Unix!
try:
! c = ''
! while 1:
! c += os.read(self.input_fd, 1)
! try:
! c = unicode(c, self.encoding)
! except UnicodeError, e:
! if len(e.args) > 4 and \
! e.args[4] == 'unexpected end of data':
! continue
! else:
! raise
! else:
! break
!
except IOError, err:
if err.errno == errno.EINTR:
--- 378,400 ----
self.event_queue.insert(Event('resize', None))
+ def push_char(self, char):
+ self.partial_char += char
+ try:
+ c = unicode(self.partial_char, self.encoding)
+ except UnicodeError, e:
+ if len(e.args) > 4 and \
+ e.args[4] == 'unexpected end of data':
+ pass
+ else:
+ raise
+ else:
+ self.partial_char = ''
+ self.event_queue.push(c)
+
def get_event(self, block=1):
while self.event_queue.empty():
while 1: # All hail Unix!
try:
! self.push_char(os.read(self.input_fd, 1))
except IOError, err:
if err.errno == errno.EINTR:
***************
*** 400,409 ****
return self.event_queue.get()
else:
! continue # be explicit
else:
raise
else:
break
- self.event_queue.push(c)
if not block:
break
--- 402,410 ----
return self.event_queue.get()
else:
! continue
else:
raise
else:
break
if not block:
break