ncurses- KEY_ENTER失败

Jar*_*ley 8 ncurses

我一直在努力教自己ncurses,到目前为止我很喜欢它.但是,我正在尝试编写一个像pico或nano这样的小文本编辑器.到目前为止,我已经把它设置得相当好.我创建了一个映射键的函数.无论我做什么,我都无法得到KEY_ENTER的回复.每当我按下它时,它就会到达我所在的当前行的开头.我尝试过使用raw(); 并使用13而不是"KEY_ENTER"没有运气.所有其他键都按预期响应.我很感激任何建议.我一直盯着这个试图让它永远有效.谢谢!

    void keymaps(){

    int ch;
    keypad(stdscr,TRUE);
       case KEY_UP:
            addstr("Up\n");
            break;
        case KEY_LEFT:
            addstr("Left\n");
            break;
        case KEY_RIGHT:
            addstr("Right\n");
            break;
        case KEY_BACKSPACE:
            delch();
            break;
        case Key_Enter:
            addstr("You pressed Enter\n");
        default:
            break;
        }
        refresh();
    } while(ch != KEY_HOME);
}
Run Code Online (Sandbox Code Playgroud)

Cod*_*got 6

尝试10作为ASCII值...在ncurses上对我有用。还请更新实际代码,因为您输入的该代码在语法上是错误的。

  • `10`与`libncurses5-dev`对我有用 (2认同)

Tho*_*key 5

可能的问题是用户Enter在常规键盘上的按键与Enter数字小键盘上的按键之间感到困惑。那些可以发送一个控件/ M(13),但不是必须的。端子说明,并KEY_ENTER参考数字小键盘。

ncurses手册页上的getch解释了NOTES中的行为:

一些键可能与常用控制键相同,例如,KEY_ENTER 相对于控制/ M, KEY_BACKSPACE 相对于控制/ H。一些curses实现可能会有所不同,具体取决于它们是专门对待这些控制键(还是忽略terminfo)还是使用terminfo定义。Ncurses使用terminfo定义。如果说 KEY_ENTER 是control / M,getch将返回KEY_ENTER 在按Control / M时。

通常,KEY_ENTER表示通过数字小键盘上的Enter键发送的字符 :

  • 终端说明中列出了最有用的键,

  • 常规键盘上的 Enter键已经由用于回车和换行的标准ASCII字符处理,

  • 这取决于是否nl还是nonl叫,按下“Enter”键常规键盘上可能会返回一个回车或换行符,最后

  • “输入或发送”是此密钥的标准说明。

顺便说一句,换行符是10。但是在C中,它通常显示为'\n'(回车符为'\r')。


dir*_*tly 3

来自PDCurses 文档

#define KEY_ENTER 0x157 /* enter or send (unreliable) */
Run Code Online (Sandbox Code Playgroud)

尝试nonl()在 后打电话raw()

nl 和 nonl 例程控制底层显示设备是否在输入时将返回键转换为换行符,以及是否在输出时将换行符转换为返回和换行(在任何一种情况下,调用 addch('\n') 都会执行等效操作)虚拟屏幕上的回车和换行)。最初,这些翻译确实发生了。如果使用 nonl 禁用它们,curses 将能够更好地利用换行功能,从而加快光标移动速度。此外,curses 将能够检测到返回键。