在 ncurses 中使用数字键盘键

Posted

技术标签:

【中文标题】在 ncurses 中使用数字键盘键【英文标题】:Using number pad keys with ncurses 【发布时间】:2014-02-05 00:51:09 【问题描述】:

我正在使用 C++ 的 ncurses 库编写一个 roguelike,并希望通过数字键盘控制角色。目前我正在使用以下方法:

case KEY_LEFT: 
    //Code for left movement
case KEY_RIGHT:
    //Code for right movement
...
//Numpad diagonals
case KEY_A1:
    //Code for moving up and to the left
case KEY_A3:
    //Code for moving up and to the right
...

KEY_A1KEY_A3KEY_C1KEY_C3 宏适用于对角线运动,但像 KEY_A2 这样的宏不适用于正交运动。无论numlock是否打开,方向键的代码在这种情况下也不起作用。

如何使用 ncurses 输入数字键盘上的 2、4、6 和 8 键?或者,我是不是搞错了,还有什么更好的方法?

【问题讨论】:

用 printw("%o\n",key); 打印键值然后将它与 ncurses.h 中的键值(通常在 /usr/include 中)进行比较,以查看返回的是哪个键。我的键盘为偶数键提供 KEY_UP 等 这取决于终端(例如,模拟器)。它适用于 xterm。一些所谓的TERM=xterm-256color“终端”程序没有实现该功能。 【参考方案1】:

通过调用:

addch(inputChar);

我能够确定所有“标准”输入字符都是它们的 ASCII 等价字符,即:

'0''1''!''@''a''b''A''B'等...

小键盘 Num Lock 开启时也是如此。或者,或者当 Num Lock 关闭时,您可以调用:

addstr((std::to_string((int)inputChar) + " ").c_str());

这将产生一个 ASCII #,你可以 #define 或类似的。

【讨论】:

以上是关于在 ncurses 中使用数字键盘键的主要内容,如果未能解决你的问题,请参考以下文章

C指针原理(29)-Ncurses-文本终端的图形

ncurses:检测带有键盘的可打印字符

NCurses – getstr() 和功能键

简单的 ncurses 应用程序对箭头键没有反应

Ncurses入门-安装与使用

NCurses 和 ESC、ALT 键