ncurses功能键只返回escape

时间:2017-11-27 00:03:01

标签: putty ncurses curses xterm

我正在测试一个在ncurses5下运行但最近在新环境(putty / xterm / virtualbox)下在curses6下编译的ncurses程序,并且无法让它识别任何功能键。箭头键工作正常,但只有那些使用转义序列的人才会失败。

chtype c;
initscr();
start_color();
noecho();
cbreak();
intrflush(stdscr, TRUE);
keypad(stdscr, TRUE);
c=getch();
printf("c=%d\n", (int)c);

按F1返回“c = 27”。我正在使用putty并尝试将各种设置与TERM设置为xterm。在curses之外,F1按预期返回\ EOP,我正在使用TERM = xterm,它似乎在termcap中正确定义了函数键。我知道键盘()例程假设导致getch / wgetch例程返回相当于265 KEY_F(1)的数字键,但除了27与break,raw,notimeout等各种组合之外我什么都得不到。

2 个答案:

答案 0 :(得分:1)

putty和xterm都有几个功能键选项。每种默认配置都不同,您可以使用

查看
infocmp putty xterm

似乎kf1(F1)是众多差异之一,例如(左边是putty,右边是xterm):

    kent: NULL, '\EOM'.
    kf1: '\E[11~', '\EOP'.
    kf13: '\E[25~', '\E[1;2P'.
    kf14: '\E[26~', '\E[1;2Q'.
    kf15: '\E[28~', '\E[1;2R'.
    kf16: '\E[29~', '\E[1;2S'.
    kf17: '\E[31~', '\E[15;2~'.
    kf18: '\E[32~', '\E[17;2~'.
    kf19: '\E[33~', '\E[18;2~'.
    kf2: '\E[12~', '\EOQ'.
    kf20: '\E[34~', '\E[19;2~'.
    kf21: NULL, '\E[20;2~'.
    kf22: NULL, '\E[21;2~'.
    kf23: NULL, '\E[23;2~'.
    kf24: NULL, '\E[24;2~'.

(ncurses的终端数据库的一些副本是 minimal ,但是有一个包含putty描述的完整数据库。

如果终端数据库在您配置时没有显示密钥,ncurses将无法识别它,您将看到转义字符。

答案 1 :(得分:0)

卫生署!我终于找到了别名"别名cmd =' TERM = Linux cmd'"在一个旧的.bashrc文件中,所以我的TERM只在命令期间设置为linux。愚蠢的简单问题需要花费数小时的调试才能搞清楚。经验教训。