はいここテキストエディタの構築に関するチュートリアルです。
私のmacOS(Linux VMで動作)では、rawモードが有効になっていてもPage Up
。どうすればそれを正しくブロックできますか?Page Down
fn-<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
これらのキーストロークをキャプチャできるので、これが可能であることを知っています。