diff --git a/kilo.c b/kilo.c index ffb82ec..6942bf4 100644 --- a/kilo.c +++ b/kilo.c @@ -9,7 +9,7 @@ /*** difnes ***/ -#define CTRL_KEY(k) ((k) & 0x1f) +#define CTRL_KEY(k) ((k)&0x1f) /*** data ***/ @@ -41,20 +41,33 @@ void enableRawMode() { if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw) == -1) die("tcsetattr"); } +char editorReadKey() { + int nread; + char c; + while ((nread = read(STDIN_FILENO, &c, 1)) != 1) { + if (nread == -1 && errno != EAGAIN) die("read"); + } + return c; +} + +/*** input ***/ +void editorProcessKeyPress() { + char c = editorReadKey(); + + switch (c) { + case CTRL_KEY('q'): + exit(0); + break; + } +} + /*** init ***/ int main() { enableRawMode(); while (1) { - char c = '\0'; - if (read(STDIN_FILENO, &c, 1) == -1 && errno != EAGAIN) die("read"); - if (iscntrl(c)) { - printf("%d\r\n", c); - } else { - printf("%d ('%c')\r\n", c, c); - } - if (c == CTRL_KEY('q')) break; + editorProcessKeyPress(); } return 0;