Ncurses:F1-F5 键

标签 ncurses curses

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

#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

所以我认为整个转义序列都返回了。我在 Internet 上阅读了有关此问题的信息,两次有提示将 TERM 变量更改为 xterm 或 vt100。所以我尝试将 TERM 更改为 vt 220 和 xterm,但没有任何变化。当我将其更改为 vt100 时,F6-F12 也不起作用。

任何人都可以帮助我如何识别用户是否按了 F1-F5? Enter、Backspace、向上、向下等键都可以正常识别。

最好的问候

最佳答案

听起来 terminfo 所说的终端发送的内容与它实际执行的内容之间存在分歧。可能是由于目标机器上的 terminfo 文件不正确,或者 $TERM 设置错误,或者其他任何原因造成的。

我先比较什么

$ infocmp -L

在目标机器上说,与运行时终端实际发送的内容相比,比如 cat

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

关于Ncurses:F1-F5 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12957439/

相关文章:

c - Ncurses 和文本框

c++ - 将 curses 库添加到 Visual Studio C++?

python - 如何管理登录 curses

python - 如何删除python curses模块中的子窗口

使用 ncurses 的 C 游戏 - 关闭窗口而不退出程序

c++ - '移植' conio.h 编写的代码到 curses.h

c - getch() 的文件描述符

c - C 中使用 ncursesw 输出 "█"

c++ - 如何为标准输出设置控制台光标位置

c - 刷新时框内的 Ncurses 文本闪烁