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();
    }

Reply via email to