模拟shell之类的行为

时间:2013-03-12 15:12:50

标签: c

所以我想要的是当用户按下向上按钮时,我想立即显示命令而不显示^ [[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;
    }


}

2 个答案:

答案 0 :(得分:4)

您可以在GNU readline或BSD editline库中找到此功能等等。它们提供的功能基本相同,但GNU readline库采用GPL许可,而editline采用BSD许可。

答案 1 :(得分:1)

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

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

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

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

如果您打算更好地处理屏幕方面,并且您的意图是使用自己的封装终端处理软件驱动终端,则需要参考VT100终端参考(假设您的xterm模拟VT100(许多人都这样做) ))。 The VT100 codes are described here

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