从键盘获取事件(例如Key up)

时间:2014-04-19 10:16:40

标签: c keyboard-events d dmd

好的,基本上我是在构建一个简单的交互式控制台。

用户可以输入命令<command>+RETURN并对其进行处理。

    while (true)
    {
        write(LGM_PROMPT);

        auto input = strip(stdin.readln());

        if (input=="exit") break; 
        else 
        {
            // Process command

        }

    }

但是,我也希望能够获得并处理其他事件,例如&#34;向上箭头&#34;,&#34;向左箭头&#34;等等。

你会怎么做?这可以用纯D代码完成,还是我必须使用C函数?

3 个答案:

答案 0 :(得分:4)

这取决于平台。

在Windows上,您需要使用ReadConsoleInput

在其他系统上,终端将为非文本输入生成escape codes。您需要使用getch逐个字符地阅读它们,然后适当地解析它们。

对于D,有ConsoleD项目抽象出一些特定于平台的控制台功能,虽然我不确定它是否也处理输入。

答案 1 :(得分:3)

这是一个特定于平台的任务,需要相当多的代码,特别是linux上的箭头键,因为输入代码有所不同!

我的terminal.d虽然适用于大多数情况https://github.com/adamdruppe/misc-stuff-including-D-programming-language-web-stuff/blob/master/terminal.d

以下是演示用法: http://arsdnet.net/rtinput.d

lib有一个单独的按键和键释放事件,但是只有在Windows上准确报告了密钥发布(Linux终端不会告诉你密钥何时发布),所以不要依赖它除非你确定你正在做一个Windows应用程序。但它仍然存在,所以你仍然需要过滤掉它......

编辑:虽然我的东西中没有获取行功能,但它会逐个字符地提供事件。但是如果你想要处理箭头,你还是有点必须。对于自动处理行编辑的库,如果你可以使用GPL,请查看GNU Getline,它也很容易在D中使用。

答案 2 :(得分:2)

如果您需要便携性,ncurses是您的最佳选择。现在可以在Windows上轻松编译Ncurses,并且已经在Deimos中绑定了它...