PageUp/PageDown——如何正确捕获?

PageUp/PageDown——如何正确捕获?

我是这里构建文本编辑器的教程。

我发现在我的 macOS 上(它在 Linux VM 上工作),即使启用了原始模式,我也无法拦截通过 发送的Page Up和。我怎样才能正确拦截这些?Page Downfn-<arrow up> fn-<arrow down>

这是一个简单的程序,您可以使用它来查看这一点(您也可以使用od -tx1,后面跟C-d):

#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能够捕获这些击键,所以我知道这是可能的。

相关内容