【发布时间】:2012-08-30 05:05:38
【问题描述】:
我在我的 C 代码中使用它:
system("stty -echo -icanon");
这是家庭作业的一部分,但这个特定部分是我正在做的超出作业要求的事情。
我们正在实现一个 shell,并且我们已经得到了一堆代码来开始。该代码不使用 ncurses(如果可以的话,我会使用它)并且更改它需要重写大量提供的代码。
当我按下我的 HOME 或 END 键时,我得到一个大写 O(在 Open 中是一个 o),然后是 HOME和 END 键。我正在使用getchar() 来获取角色。
似乎只有这两个键可以做到这一点,但我不确定。如果提供的系统函数调用是唯一不同的东西,我不是 100%(我们也将 stdout 设置为非阻塞,但这不重要)。
我真的很困惑,我想实现 END 和 HOME 键,因为我经常使用它们。
如果这不是很多信息,我很抱歉。我对system 了解不多,无法真正理解-echo 和-icanon 对stty 的影响。我已经查看了手册页,但仍然无法弄清楚。
编辑
从 Alex Brown 的回答中,我确认我得到了转义字符。我有类似以下的内容(在错误的伪代码中):
while (TRUE)
ch = getchar()
switch (ch)
case HOME:
case END:
don't print anything...
break
default:
printf(ch);
break
所以它从转义序列中打印出 O,而不是 [(我有 0x48 用于 HOME 和 0x46 用于 END)。仍然为如何获得真正的键码感到困惑......
【问题讨论】:
-
在许多终端上,HOME 和 END 键发出转义序列而不是单个字符。
-
既然你使用
stty,你可能在一个类Unix系统上,它很可能是Linux,但你应该说因为你在做什么(处理)非常特定于系统。 -
@JonathanLeffler - 是的,我在 Linux 上运行 Bash。我的终端将 $TERM 报告为
xterm,但它实际上是 gnome 终端。