在ncurses中捕捉控制+鍵的正確方法是什麼? 目前的即時通訊做它定義這樣的控制:捕捉控制的正確方法+在ncurses中的鍵
#define ctl(x) ((x) & 0x1f)
它工作正常,但問題是,我不能趕上CJ,並在同時進入,這是因爲:
j = 106 = 1101010
0x1f = 31 = 0011111
1101010 & 0011111 = 0001010 = 10 = ENTER key..
所以..我該如何抓住它? 謝謝!
- 編輯: 如果我嘗試下面的代碼, 我不能夠正確地捕捉回車鍵,甚至沒有在數字鍵盤。輸入捕獲爲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;
}
如果我設置nonl,那麼我不能再捕獲輸入密鑰。我用ncurses.h的KEY_ENTER宏捕捉它。編輯:是我定義ctrl宏的方式正確嗎? –
使用nonl()編輯上面的一段新代碼; –
再次編輯,使用鍵盤,cbreak和noecho添加一個新的示例程序。相同的結果:ENTER被捕獲爲C-j .. –