[erlang-questions] Reading (and ignoring) escape-sequences

Mazen Harake <>
Thu Mar 25 12:45:43 CET 2010

On 25/03/2010 00:22, Richard O'Keefe wrote:
> On Mar 25, 2010, at 12:11 AM, Mazen Harake wrote:
>> An even better solution would be if this was done at a lower level so 
>> that perhaps (like ncurses) in erlang you would get e.g. 40x as the 
>> character for UpArrow (or whatever, it would probably be defined as 
>> macros anyway).
> And that's what I recommended:  doing it in ncurses and feeding Erlang
> a byte stream that is NOT ambiguous.  (However, as noted above, even
> ncurses is not and these days CANNOT be infallible.)

I tested this now and it seems to work well. In my driver I now make an 
initial port_command which calls driver_async which runs an input 
function. Even though this function is intended to return at some point 
and data be collected using ready_async I put it in an endless loop 
which only does getch(). When getch() returns I send a message straight 
back to Erlang. This wasn't enough though... so I also did a middle 
buffer process; if an Erlang program does cecho:getch() it will block by 
first sending a message to the middle process saying that it is waiting 
for input and then blocks waiting in a receive. When a message comes 
from the driver it checks if any process is waiting for input, if there 
is it gets the character, if it doesn't then the message from the port 
is simply discarded. Using this together with keypad(stdscr, TRUE) I now 
get unambiguous codes back (without the keypad() I seem to get only the 
'\027'), the only work left is to map all the keys (probably steal them 
from ncurses.h).

Initial tests indicate good results. This is great because I would 
_never_ have used a terminal GUI which asks me to hit _space_ for going 
down a list and _bksp_ for going up... it is simply not good usability.

Anyway, thank you for your time.





Since January 1st 2010 Erlang Training and Consulting Ltd. has become ERLANG SOLUTIONS LTD.


More information about the erlang-questions mailing list