
On Mon, 19 Mar 2007 19:16:23 -0700, Neurophyre <listbox@evernex.com> wrote:
Hello,
I'm building an old-school BBS client using Twisted. It needs to take user input, parse it, send messages over the wire and get messages back and display them.. the usual. I'm just now getting to writing the UI and have run into a couple problems.
First, whether using protocol.Protocol or protocols.basic.LineReceiver (in raw mode) with internet.stdio.StandardIO, I have the same problem: the dataReceived (or rawDataReceived in the case of LineReceiver in raw mode) functions are only called after one types some text and hits return. I need to process input on a keystroke level, since there will be prompts at which a single keystroke will do things.
Second, I was looking at twisted.conch.insults.insults.TerminalProtocol after some Googling -- does anyone know if I can just drop this in in place of protocols.basic.LineReceiver (or whatever) and have it work properly, or does it require some special invocation and/or grab stdio by itself?
Take a look at what twisted.conch.stdio.runWithProtocol does to the terminal. That's more or less what's necessary to kick it out of line buffered mode and give you each keystroke as it arrives. TerminalProtocol is meant to be used with ServerProtocol from the same module. ServerProtocol will interpret various terminal control sequences and translate them into calls onto whatever ITerminalProtocol you supply to it. It probably won't be much use to use LineReceiver, since keystrokeReceived will be called with things like backspace and home and other things LineReceiver has no idea what to do with. There are a couple other things you might be interested in though, like twisted.conch.recvline.RecvLine or a class in a project I've been working on a bit on and off, invective.widgets.LineInputWidget, which uses insults' widget system to implement a more re-usable line input class (you can find invective in my Twisted sandbox, http://twistedmatrix.com/trac/browser/sandbox/exarkun/invective/ ), which will hopefully move back into Twisted at some point. Jean-Paul