C 从键盘获取事件(如按键向上)

C 从键盘获取事件(如按键向上),c,keyboard-events,d,dmd,C,Keyboard Events,D,Dmd,好的,基本上我正在构建一个简单的交互式控制台 用户可以输入命令+RETURN,并对其进行处理 while (true) { write(LGM_PROMPT); auto input = strip(stdin.readln()); if (input=="exit") break; else { // Process command } }

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

用户可以输入命令
+RETURN
,并对其进行处理

    while (true)
    {
        write(LGM_PROMPT);

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

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

        }

    }
但是,我也希望能够获取和处理其他事件,如“向上箭头”、“向左箭头”等


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

这取决于平台

在Windows上,您需要使用

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


对于D,有一个项目抽象掉了一些特定于平台的控制台功能,尽管我不确定它是否也能处理输入。

这是一项特定于平台的任务,需要大量代码,尤其是linux上的箭头键,因为输入代码各不相同

我的terminal.d在大多数情况下都会这样做

下面是一个演示用法:

lib有一个单独的按键和按键释放事件,但按键释放仅在Windows上准确报告(linux终端不会告诉您何时释放按键),因此不要依赖它,除非您确定自己正在使用Windows应用程序。但它仍然存在,所以你仍然需要过滤掉它


编辑:在我的东西中没有get line函数,它一个字符一个字符地为事件提供信息。但是如果你想处理这些箭的话,你就得这么做。对于自动处理行编辑的库,如果您可以使用GPL,请查看GNU Getline,它也很容易从D使用。

如果您需要可移植性,ncurses是您最好的选择。现在,课程可以在Windows上轻松编译,Deimos中已经有了对它的绑定…

ConsoleD项目很有趣。虽然,我相信你发送的大部分内容都是特定于Windows的。大多数情况下,你可以将其分组为Windows和Posix,尽管Posix组中的某些内容也可能有所不同。好吧,哇。相当令人印象深刻!我会调查一下的!(顺便说一句,我正在OSX(可能是*nix)上测试这一点-但不是Windows)我从来没有在mac上尝试过我的代码,但它应该可以工作,我认为那里的终端与linux的xterm一样工作。嗯,我认为你是100%正确的。从未注意到两个终端之间的任何差异(我已经使用这两个终端很多年了)。。。