我正在测试一个在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等各种组合之外我什么都得不到。
答案 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。愚蠢的简单问题需要花费数小时的调试才能搞清楚。经验教训。