On Friday, 28 September 2012 at 09:45:30 UTC, Thomas Koch wrote:

nazriel wrote:
http://dpaste.dzfl.pl/eb1387cc
Thank you. Your solution does not seem to work with multibyte characters, so
I extended it:


Nice, I didn't need multibyte support as I was using it mainly for getting keycode


import core.sys.posix.termios;
import core.stdc.stdio;

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

import std.utf;

char readChar()
{
    char[4] buffer;

    buffer[0] = getch();
    auto len = stride(buffer,0);

    foreach (i ; 1 .. len)
        buffer[i] = getch();

    size_t i;
    return cast(char) decode(buffer, i);
}

I think it should return dchar then, and cast(char) should be dropped otherwise you will lose visual representation of anything that is bigger than 8bits

Reply via email to