summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEevee (Alex Munroe) <eevee.git@veekun.com>2014-05-11 17:03:45 -0700
committerEevee (Alex Munroe) <eevee.git@veekun.com>2014-05-11 21:29:49 -0700
commit52d94d1c9634095e408fa499f57558d232412ee5 (patch)
treea2138562d76c5fbe50a9c94fd371615cd8b3cc23
parentba5e8ae2724d5069f2f95193ab89310bc7eb4b35 (diff)
downloadurwid-52d94d1c9634095e408fa499f57558d232412ee5.tar.gz
Fix up the Twisted example.
-rw-r--r--examples/twisted_serve_ssh.py23
-rwxr-xr-xurwid/main_loop.py4
2 files changed, 18 insertions, 9 deletions
diff --git a/examples/twisted_serve_ssh.py b/examples/twisted_serve_ssh.py
index 36396dd..aad63f9 100644
--- a/examples/twisted_serve_ssh.py
+++ b/examples/twisted_serve_ssh.py
@@ -34,6 +34,7 @@ Licence: LGPL <http://opensource.org/licenses/lgpl-2.1.php>
import os
import urwid
+from urwid.raw_display import Screen
from zope.interface import Interface, Attribute, implements
from twisted.application.service import Application
@@ -159,7 +160,7 @@ class UrwidMind(Adapter):
-class TwistedScreen(urwid.BaseScreen):
+class TwistedScreen(Screen):
"""A Urwid screen which knows about the Twisted terminal protocol that is
driving it.
@@ -180,7 +181,7 @@ class TwistedScreen(urwid.BaseScreen):
# We will need these later
self.terminalProtocol = terminalProtocol
self.terminal = terminalProtocol.terminal
- urwid.BaseScreen.__init__(self)
+ Screen.__init__(self)
self.colors = 16
self._pal_escape = {}
self.bright_is_bold = True
@@ -235,13 +236,22 @@ class TwistedScreen(urwid.BaseScreen):
# twisted handles polling, so we don't need the loop to do it, we just
# push what we get to the loop from dataReceived.
- def get_input_descriptors(self):
- return []
+ def hook_event_loop(self, event_loop, callback):
+ self._urwid_callback = callback
+ self._evl = event_loop
+
+ def unhook_event_loop(self, event_loop):
+ pass
# Do nothing here either. Not entirely sure when it gets called.
def get_input(self, raw_keys=False):
return
+ def get_available_raw_input(self):
+ data = self._data
+ self._data = []
+ return data
+
# Twisted driven
def push(self, data):
"""Receive data from Twisted and push it into the urwid main loop.
@@ -254,9 +264,8 @@ class TwistedScreen(urwid.BaseScreen):
3. Pass the calculated keys as a list to the Urwid main loop.
4. Redraw the screen
"""
- keys = self.loop.input_filter(data, [])
- keys, remainder = urwid.escape.process_keyqueue(map(ord, keys), True)
- self.loop.process_input(keys)
+ self._data = list(map(ord, data))
+ self.parse_input(self._evl, self._urwid_callback)
self.loop.draw_screen()
# Convenience
diff --git a/urwid/main_loop.py b/urwid/main_loop.py
index 75972c3..5d3be1f 100755
--- a/urwid/main_loop.py
+++ b/urwid/main_loop.py
@@ -116,7 +116,7 @@ class MainLoop(object):
self._unhandled_input = unhandled_input
self._input_filter = input_filter
- if not hasattr(screen, 'get_input_descriptors'
+ if not hasattr(screen, 'hook_event_loop'
) and event_loop is not None:
raise NotImplementedError("screen object passed "
"%r does not support external event loops" % (screen,))
@@ -311,7 +311,7 @@ class MainLoop(object):
if self.handle_mouse:
self.screen.set_mouse_tracking()
- if not hasattr(self.screen, 'get_input_descriptors'):
+ if not hasattr(self.screen, 'hook_event_loop'):
return self._run_screen_event_loop()
self.draw_screen()