c - GNU 编译器 KEY_F 未检测到功能键

标签 c curses

基本上,我对我的控制台应用程序进行了按键检测,由于某种原因它没有检测到功能键。

这是我的代码,我在 Linux 上使用 GNU 编译器。任何帮助或想法将不胜感激。

        refresh();
        key = getch();
        switch(key) {
            case KEY_HOME:      key = HOME;   break;
            case KEY_END:       key = END;    break;
            case KEY_UP:        key = UP;     break;
            case KEY_DOWN:      key = DOWN;   break;
            case KEY_LEFT:      key = LEFT;   break;
            case KEY_RIGHT:     key = RIGHT;  break;
            case KEY_NPAGE:     key = PGDN;   break;
            case KEY_PPAGE:     key = PGUP;   break;
            case KEY_DC:        key = DEL;    break;
            case KEY_IC:        key = INSERT; break;
            case KEY_F(1):      key = F(1);   break;
            case KEY_F(2):      key = F(2);   break;
            case KEY_F(3):      key = F(3);   break;
            case KEY_F(4):      key = F(4);   break;
            case KEY_F(5):      key = F(5);   break;
            case KEY_F(6):      key = F(6);   break;
            case KEY_F(7):      key = F(7);   break;
            case KEY_F(8):      key = F(8);   break;
            case KEY_F(9):      key = F(9);   break;
            case KEY_F(10):     key = F(10);  break;
            case KEY_F(11):     key = F(11);  break;
            case KEY_F(12):     key = F(12);  break;
            case KEY_ENTER:     key = ENTER;  break;
            case KEY_BACKSPACE: key = BACKSPACE; break;
            default:
                //key = F(2); //For any function keypress, it jumps to default
                if (NON_ASCII(key) != 0)
                    key = UNKNOWN;
        }    

最佳答案

我不是 curses 专家,但是通过阅读手册页我得到了这个程序:

#include <curses.h>

int main()
{
    int key;

    initscr(); cbreak(); noecho();

    while (1)
    {

        key = getch();
        printw ("%u\n", key);
    }

    return 0;
}

当我按下 F 键时,我得到一个 3 个字符的序列:27、79、(80 + N-1),其中 N 是 F 键的编号。我认为您的开关必须识别出该键是一个转义序列并对其进行特殊处理。

编辑:该模式仅适用于 F1-F4。 F5 改变它。您可能希望合并来自 curses 的 F(n) 宏。

关于c - GNU 编译器 KEY_F 未检测到功能键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3468851/

相关文章:

python - 你如何使用 curses 按下最后一个箭头键?

terminal - 从终端读取屏幕字符

c - 在循环中执行 initscr() 会导致错误初始化

c - 如何简单地将 ESQL/C 文件转换为 C 文件? (嵌入式 SQL/C 文件到 C 文件)?

c - Valgrind 在 Mac OSX 10.8 上的空程序上显示内存泄漏

C: while 循环中的 Scanf 只执行一次

c++ - 在调用系统命令后,在 unix 平台上使用 curses 检测 C++ 中的箭头键输入不起作用

c - 使用 openssl 的 MD4 哈希,将结果保存到 char 数组中

c - 最大线程数

python - 如何下载curses python3.4?