On 3/21/11, teo <[email protected]> wrote: > On Mon, 21 Mar 2011 23:22:17 +0100, Andrej Mitrovic wrote: > >> Woops forgot to add import std.stdio, here's a fixed version: >> >> import std.stdio : writefln; >> import std.c.stdio; >> import std.c.linux.termios; >> >> extern(C) void cfmakeraw(termios *termios_p); >> >> void main() >> { >> termios ostate; /* saved tty state */ termios >> nstate; /* values for editor mode */ >> >> // Open stdin in raw mode >> /* Adjust output channel */ >> tcgetattr(1, &ostate); /* save old state */ >> tcgetattr(1, &nstate); /* get base of new >> state */ cfmakeraw(&nstate); >> tcsetattr(1, TCSADRAIN, &nstate); /* set mode */ >> >> // Read characters in raw mode >> writefln("The key hit is %s", cast(char)fgetc(stdin)); >> >> // Close >> tcsetattr(1, TCSADRAIN, &ostate); // return to original mode >> } > > It looks like this can be dangerous, because the terminal can be left in > an unusable state. Please read this: > http://groups.google.com/group/comp.os.linux.development.apps/ > browse_thread/thread/0667d16089e2b6fc >
H mentions using tcgetattr to save old state and restoring it with tcsetattr. This is what this code does. Btw this code is not mine, Walter posted it and I just added the cfmakeraw prototype. So kudos goes to him.
