【发布时间】:2016-01-20 07:11:18
【问题描述】:
我正在尝试在 C 中实现一种终端。我正在尝试在上下键压力上构建终端历史记录,但如果我按下这些键,光标将向上(或向下)一行。如何“控制”这个功能?
编辑: 举个例子:
fgets(cmd, sizeof(cmd), stdin);
if (cmd[0] == '\033')
if (cmd[2] == 'A')
printf("up-arrow pressed!\n");
这段代码很糟糕,但它是一个很好的起点。有用。问题是,如果您按下向上箭头键(光标),它会移动到上一行并打印“按下向上箭头!”。在没有外部库的情况下如何避免光标上下移动?
【问题讨论】:
-
没有代码根本无法回答这个问题……
-
我强烈建议为此目的使用 libreadline。它提供了许多功能,同时独立于特定的终端仿真
-
没错,就是上下光标,通常在终端中用于历史记录。我读到了图书馆,它真的很有用,但我试图独自构建一切。检查问题,我编辑了
-
@AndreaMartinelli 通常您处于 linemode,您的程序将逐行接收数据(即按 Enter 后)。但是对于这个任务,您需要处于字符模式,这样您的程序可以在输入字符后立即处理输入(即光标向上)。您可以在 unix 下通过适当调用
ioctl()来执行此操作 -
@AndreaMartinelli 我在回答中添加了一些内容,因为代码太大,无法评论。