2013-04-25 102 views
0

运行下面的代码来确定正确的关键码Ctrl键 + 向下使用诅咒给我两个不同的输出(两个服务器正在运行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; 
} 
+0

什么是在服务器上设置的TERM环境变量? – parkydr 2013-04-25 11:47:57

+0

'server1':screen-256color,'server2':'xterm'。显然这与tmux有关。分离tmux会话很好。但是,仍然会很高兴知道是否有可以在代码中实施的解决方法。 – user1024718 2013-04-25 12:49:27

+0

我不这么认为,关键映射是由TERM变量决定的。你可以尝试在server1上设置TERM = xterm。 – parkydr 2013-04-25 13:21:48

回答

0

它不工作,因为你正在使用的screen命令和TERM变量设置为屏幕256color。

我以为screen -a,它使用更多的术语,可能工作,但它不。

我发现的唯一方法是将TERM设置为xterm,以便您可以在xterm或程序中对此进行设置。

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

这不是一个理想的解决方案,它只会用xterm这样的终端工作,但它是为您的特定问题的方法。