xterm和curses中的不同密钥代码行为

时间:2013-04-25 04:29:28

标签: c keyboard ncurses

使用curses运行以下代码以确定 Ctrl + Down 的正确密钥代码,这给了我两个不同的输出(两个服务器都在运行Debian 6)。

ssh server1(输出错误):

Press a Key 27
Press a Key 91
Press a Key 66

ssh server2(正确输出):

Press a Key 519

我在代码或终端中遗漏了什么?可能是什么问题?

#include <stdlib.h>
#include <ctype.h>
#include <curses.h>

int main(void)
{
 WINDOW *_window = initscr();
 int _rows;
 int _cols;

 cbreak();

 /* Accept all keys */
 keypad(_window, true);

 /* Don't echo things that are typed */
 noecho();

 /* Get the screen dimensions */
 getmaxyx(_window, _rows, _cols);

 /* Don't display cursor */
 curs_set(0);

 for (;;)
 {
   printw("Press a Key ");
   refresh();
   int key = wgetch(_window);
   printw("%d \n", key);
 }

 endwin();

 return 0;
}

1 个答案:

答案 0 :(得分:0)

由于您正在使用screen命令并且TERM变量设置为screen-256color,因此无效。

我认为使用更多termcaps的screen -a可能会有效,但事实并非如此。

我找到的唯一方法是将TERM设置为xterm,这样您就可以在xterm或程序中设置此项。

 setenv("TERM","xterm",1);

这不是一个理想的解决方案,它只适用于像xterm这样的终端,但它可以解决您的特定问题。