On Wednesday, 23 January 2013 at 17:59:04 UTC, Kenneth Sills
wrote:
Hello everyone! I'm pretty new to the D world, and just started
playing around with it. To start off with the language, I was
going to write a little game (as I usually do). I wanted to use
pure D (no ncurses) and not have to import any libraries (no
anything else) for the project. So I set out to make it a CLI
game.
I've written myself a nice little library for formatting the
output and doing all that lovely stuff with the terminal -
however I'm having trouble with input. You see, I need
nonblocking (which I've set up) input that can read character by
character (so when the user presses r, it immediately takes it
in, not waiting for an enter) and I need to be able to see
things
like arrow keys, shift keys, and control keys.
I've looked around extensively, but I have yet to find anything
on how to set up character by character input NOR have I found
anything on receiving those special characters in D. I know it's
quite possible in C, but again, half the point of this project
is
being pure D.So how would I go about implementing this?
Thank you in advance!
Adam Ruppe is working on very nice terminal handler. Maybe you
can look into this:
https://github.com/robik/ConsoleD/blob/master/terminal.d
It's rather complete solution.
Myself I was using this simple function, not sure if it will be
usable for you:
char ReadKey()
{
version(Posix)
{
int getch()
{
int ch;
termios oldt;
termios newt;
tcgetattr(0, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(0, TCSANOW, &newt);
ch = getchar();
tcsetattr(0, TCSANOW, &oldt);
return ch;
}
}
else version(Windows)
{
alias _getch getch;
}
return cast(char) getch();
}