macOS下启用Raw Mode后无法拦截Page Up/Down键的解决方法
问题:macOS下Raw Mode无法拦截fn+上下箭头触发的Page Up/Page Down键
我正在跟着一个构建文本编辑器的教程学习,发现在macOS系统上,即使启用了Raw Mode,也无法拦截通过fn-<arrow up>和fn-<arrow down>触发的Page Up与Page Down键,但同一设备的Linux虚拟机中可正常工作。
以下是用于复现该问题的简单程序:
#include <termios.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <ctype.h> struct termios orig_termios; void disable_raw_mode (void) { tcsetattr(STDIN_FILENO, TCSAFLUSH, &orig_termios); } void enable_raw_mode (void) { tcgetattr(STDIN_FILENO, &orig_termios); atexit(disable_raw_mode); struct termios raw = orig_termios; raw.c_iflag &= ~(BRKINT | INPCK | PARMRK | INLCR | IGNCR | ISTRIP | ICRNL | IXON); raw.c_oflag &= ~(OPOST); raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); raw.c_cflag &= ~(CSIZE | PARENB); raw.c_cflag |= (CS8); tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw); } int main (void) { enable_raw_mode(); char c; while ( read(STDIN_FILENO, &c, 1) == 1 && c != 'q') { if (iscntrl(c)) printf("%d\n", c); else printf("%d ('%c')\n", c, c); } return 0; }
我希望最终的文本编辑器能在所有支持终端转义序列的POSIX兼容系统上运行,且emacs和vim均可正常拦截这些按键。
内容的提问来源于stack exchange,提问作者user129393192
相关产品推荐
相关产品推荐

