On Saturday, 14 November 2015 at 13:33:49 UTC, Fer22f wrote:
Anyone that has more experience can point me into a solution that is not deprecated? I haven't even researched about the deprecated options but looked into all free available D books I could find and I only found ways to get entire lines (even if it's just one character I still need to press enter).

That's because the operating system buffers it and needs to be turned off. The getc in stdio.h works the same way, though if you had a getch in conio.h or something like that, it is different. You might be able to pull that from D, but since it isn't technically standard C, it isn't available on all systems.

Notably, it is pretty common on Windows, but requires an add-on library like ncurses on Linux. (which is commonly installed, but not automatically linked)


Well, bottom line is you need a fair chunk of code to do this (well, like 20 lines for minimal functionality, it isn't that bad but still a bit involved), whether written yourself or pulled from a library.


You might try taking my terminal library:

https://github.com/adamdruppe/arsd/blob/master/terminal.d


Download that file and add it to your build like this:

dmd yourfile.d terminal.d


Example usage:

import terminal;

void main() {
        auto terminal = Terminal(ConsoleOutputType.linear);
auto input = RealTimeConsoleInput(&terminal, ConsoleInputFlags.raw);

        terminal.writeln("Press any key to exit.");
        input.getch();
        terminal.writeln("Bye!");
}



The first two lines have the library do various setup tasks like turning off line buffering.

Once those two are set though the next three lines are pretty ordinary and should work like you want.

It is kinda a pain to pass these to functions... you'd want to do pass them around as pointers. Their destructors reset the terminal to its default state so your program exits cleanly.

Reply via email to