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이러한 키 입력을 캡처할 수 있으므로 이것이 가능하다는 것을 알고 있습니다 .

관련 정보