[erlang-questions] Read only 1 character from STDin without requiring Return
Tony Rogvall
tony@REDACTED
Tue Mar 14 23:54:08 CET 2017
> On 14 mar 2017, at 16:03, qp <quantumpotato@REDACTED> wrote:
>
> I see. I was wanting to get gamepad input to control a game. I naively assumed this was serial, Daniel's reply suggested the gamepad might be a HID device which I haven't checked yet.
If that is the case then you might use
https://github.com/tonyrog/hid
:-)
/Tony
>
> "how are you NOT going to mess that up?" coincides with the response on http://stackoverflow.com/questions/42750491/read-a-character-input-from-erlang-without-requiring-the-return-key-pressed-from/42755503#42755503 "you are entering a world of pain you never knew existed"
>
> So for now, I'm running a Cowboy server and using a c program to send characters pressed through cURL
>
> #include<stdio.h>
> #include<stdlib.h>
>
> int main(void){
> system ("clear");
> int c;
> /* use system call to make terminal send all keystrokes directly to stdin */
> system ("/bin/stty raw");
> while((c=getchar())!= '.') {
> char command[100];
> sprintf(command, "curl localhost:8080/info?%c" ,c);
> system(command);
> printf("\r\n");
>
> /* type a period to break out of the loop, since CTRL-D won't work raw */
> }
> /* use system call to set terminal behaviour to more normal behaviour */
> system ("/bin/stty cooked");
> system ("clear");
> system ("echo ok\n");
> return 0;
> }
>
>
> On Tue, Mar 14, 2017 at 1:16 AM, Richard A. O'Keefe <ok@REDACTED> wrote:
>
> > On 13/03/2017, at 7:19 AM, qp <quantumpotato@REDACTED> wrote:
> >
> > How do read 1 character at a time without requiring the enter press?
>
> The obvious question is "why do you want to do this"?
>
> It's actually nowhere as simple an issue as you might think.
> Seriously, it's not clear what "read 1 character at a time"
> MEANS. Do you mean
> - read a keycode?
> - read a byte?
> - read a possibly multibyte character?
> and
> - if the user pushes a an error or function key,
> sending an ESC [ .... <char> sequence, do you
> want just the ESC (and if so what happens to everything
> after it) or the whole thing
> - how are you going to tell the difference between ESC [ ...
> sent from a special key and an ESC sent from the ESC key
> (I've seen two approaches: don't try to distinguish, and
> use a timeout)
> and
> + do you want the character to be echoed
> - or not
> + do you want some interrupt characters to be
> heeded still
> - or not
> and
> - if there are multiple characters already buffered
> (from a time when the terminal was in a "cooked" mode, perhaps)
> and you switch to whatever character-at-a-time mode you want,
> what is to happen to those characters?
> and above all,
> * given that Erlang uses GNU readline or something very like
> it, even when calling io:get_chars/2, how are you NOT going
> to mess that up?
>
> Having said that,
> http://erlang.org/pipermail/erlang-questions/2009-November/047298.html
> tells us that Joe Armstrong wrote an emacs-like editor in Erlang.
> <quote>
> I wrote a simple emacs editor years ago -
> it's in the widgets subdirectory of
> http://www.sics.se/~joe/ex11/download/release-2.5.tgz
>
> The only tricky part was not the emacs logic,
> but the screen display
> and catching the keystrokes and mouse events.
> </quote>
>
> That link is dead, but https://github.com/baryluk/ex11
> should work.
>
> It's not *much* of an emacs: ^A ^E ^D ^B ^F PgUp PgDn
> arrow keys and inserting plain characters. Call it
> proof-of-concept.
>
> An alternative would be to use a separate program to do this.
>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20170314/07e5c8c6/attachment.bin>
More information about the erlang-questions
mailing list