我试图使用ESC来逃避使用getch()的程序.我创建了一个小程序来演示我的问题.@H_502_1@
@H_502_1@
#include <ncurses.h>
int main(void) {
int key = 0;
initscr();
noecho();
keypad(stdscr, TRUE);
do {
key = getch();
clear();
mvprintw(0, 0, "Key = %d\n", key);
refresh();
} while (key != 27);
clear();
refresh();
endwin();
return 0;
}
我试图允许用户使用箭头键或键盘(以更方便的方式)@H_502_1@
问题出在键盘内(无论numlock是否打开).当我编译并运行程序并尝试在这个简单的测试中使用小键盘时,它会在我触摸小键盘时立即退出.如果我删除while(键!= 27)(esc为27)条件,它会读取键并显示它们的数字.当小键盘键注册为时,为什么它会退出循环@H_502_1@
@H_502_1@
ENTER 343
UP 120
DOWN 114
LEFT 116
RIGHT 118
任何帮助深表感谢!@H_502_1@
我在Dungeon Crawl Stone Soup的源代码中找到了修复.它基本上设置了那些密钥代码.@H_502_1@
{Dcss-dir} /source/libunix.cc(333)@H_502_1@
@H_502_1@
define_key("\033Op", 1000);
define_key("\033Oq", 1001);
define_key("\033Or", 1002);
define_key("\033Os", 1003);
define_key("\033Ot", 1004);
define_key("\033Ou", 1005);
define_key("\033Ov", 1006);
define_key("\033Ow", 1007);
define_key("\033Ox", 1008);
define_key("\033Oy", 1009);
// non-arrow keypad keys (for macros)
define_key("\033OM", 1010); // Enter
define_key("\033OP", 1011); // Numlock
define_key("\033OQ", 1012); // /
define_key("\033OR", 1013); // *
define_key("\033OS", 1014); // -
define_key("\033Oj", 1015); // *
define_key("\033Ok", 1016); // +
define_key("\033Ol", 1017); // +
define_key("\033Om", 1018); // .
define_key("\033On", 1019); // .
define_key("\033Oo", 1020); // -
// variants. Ugly curses won't allow us to return the same code...
define_key("\033[1~", 1031); // Home
define_key("\033[4~", 1034); // End
define_key("\033[E", 1040); // center arrow
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。