【发布时间】:2023-07-05 07:46:01
【问题描述】:
在 ncurses 中捕获 control+key 的正确方法是什么? 目前我正在这样做定义这样的控制:
#define ctl(x) ((x) & 0x1f)
它工作正常,但问题是我无法同时捕捉 C-j 和 ENTER,这是因为:
j = 106 = 1101010
0x1f = 31 = 0011111
1101010 & 0011111 = 0001010 = 10 = ENTER key..
那么..我该如何抓住它? 谢谢!
-- 编辑: 如果我尝试下面的代码, 我无法正确捕捉回车键,即使在数字键盘中也是如此。 Enter 被捕获为 ctrl-j。
#include <stdio.h>
#include <ncurses.h>
#define ctrl(x) ((x) & 0x1f)
int main(void) {
initscr();
int c = getch();
nonl();
switch (c) {
case KEY_ENTER:
printw("key: %c", c);
break;
case ctrl('j'):
printw("key: ctrl j");
break;
}
getch();
endwin();
return;
}
新代码:
#include <stdio.h>
#include <ncurses.h>
#define ctrl(x) ((x) & 0x1f)
int main(void) {
initscr();
int l = -1;
int c = getch();
cbreak();
noecho();
nonl();
keypad(stdscr, TRUE);
switch (c) {
case KEY_ENTER:
printw("key: %c", c);
break;
case ctrl('j'):
printw("key: ctrl j");
break;
}
printw("\nnow press a key to end");
getch();
endwin();
return;
}
【问题讨论】:
标签: ncurses