Ncurses:F1-F5键

时间:2012-10-18 14:49:06

标签: ncurses curses

我在curses.h中有一个带有功能键的Probclem。 我在不同的网站/教程上看到了这个小小的程序

#include <ncurses.h>

int main()
{       int ch;

    initscr();                      /* Start curses mode            */
    raw();                          /* Line buffering disabled      */
    keypad(stdscr, TRUE);           /* We get F1, F2 etc..          */
    noecho();                       /* Don't echo() while we do getch */

    printw("Type any character to see it in bold\n");
    ch = getch();
    while (ch != KEY_F(1))
    {
            if(ch == KEY_F(1))      
                    printw("F1 Key pressed: Ending program.\n");

            else
            {       printw("The pressed key is ");
                    attron(A_BOLD);
                    printw("%c\n", ch);
                    attroff(A_BOLD);
            }

            refresh();     

            ch = getch();

    }
    printw("end\n");
    endwin();                       /* End curses mode                */

    return 0;
}

按键F6-F12工作正常,返回的代码也很好(例如:如果按下F6则为270)。但是,如果我按F5而不是269返回,就像它应该是的那样,而是发生以下情况(仅按F5一次):

Type any character to see it in bold
The pressed key is ^[
27
The pressed key is [
91
The pressed key is 1
49
The pressed key is 5
53
The pressed key is ~
126

所以我认为整个逃生序列都归还了。我在互联网上阅读了这个问题,有两次提示将TERM变量更改为xterm或vt100。因此我尝试将TERM更改为vt 220和xterm,但没有任何改变。当我把它改成vt100时,F6-F12也不起作用。

如果用户按下F1-F5,有人可以帮助我吗?输入,退格,上,下等键都可以识别。

最好的问候

1 个答案:

答案 0 :(得分:5)

在你的终端发送的terminfo与实际发送的内容之间存在分歧。可能是目标计算机上的terminfo文件不正确,或$TERM设置错误或任意数量的结果。

我首先要比较一下

$ infocmp -L

在目标计算机上说,比较终端在运行时实际发送的内容,比如cat

如果您正在运行 xterm ,也许您有一个~/.Xresources文件来翻译您的功能键。 VMS用户通常会以这种方式重新映射F1-F5键。此外,许多终端仿真器(如Putty)都可以重新映射这些密钥。