1

所以我想要的是当用户按下向上按钮时,我想立即显示命令而不显示 ^[[AI 已经知道如何从键盘识别上下,我知道 termios 可能是解决方案,但是来自java背景,我不太清楚如何做到这一点。由于某些限制,Ncurses 不是一种选择。如果可以,请帮忙。

我期望发生的是,当用户按下向上按钮时,我想立即在同一行上执行 printf

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{

    char input[100];
    char *history[5];
    int currentHistory=0;
    int historyCount=5;
    history[0]="hi";
    history[1]="bye";
    history[2]="computer";
    history[3]="science";
    history[4]="Yo";


    while(input[0]!='Q')
    {
       if(input[0]==LEFT_ARROW;
    }


}
4

2 回答 2

4

您会在 GNU readline或 BSD编辑行库中找到此功能以及更多功能。它们提供了大致相同的功能,但是 GNU readline 库在 GPL 许可下,而 editline 在 BSD 许可下。

于 2013-03-12T15:31:28.157 回答
1

目前尚不清楚您是想更好地处理输入,还是更好地处理终端。

如果您想更好地处理输入,我建议将您的字符识别包装到一个返回整数的函数中,该函数为每个“已处理”键定义。这样你的输入看起来更像

int char = readChar(input);
if (char == KEY_UP_ARROW) {
  ...
}

其中 readChar 检测第一个键是否是转义键,然后“窥视”以查看是否有额外信息可用(以区分独立转义键和箭头键)。

如果您打算更好地处理屏幕方面的事情,并且您的意图是使用自己包装的终端处理软件驱动终端,则需要参考 VT100 终端参考(假设您的 xterm 模拟 VT100(许多人都这样做))。 此处描述了 VT100 代码

请注意,操作系统会对输入进行一些额外处理(组合键组合,使程序更容易区分死键键盘设置等),因此您可以通过将终端置于不同的“模式”来禁用此终端内处理”。典型的模式包括“cooked”和“raw”,其中“raw”为您提供了为简单起见未组合的关键代码。

于 2013-03-12T15:44:03.207 回答