Enable entering some characters

This commit is contained in:
Timothy Warren 2019-08-20 09:03:04 -04:00
parent 256ab17b63
commit 061ddbc5b5

45
kilo.c
View File

@ -24,6 +24,7 @@
#define CTRL_KEY(k) ((k) & 0x1f) #define CTRL_KEY(k) ((k) & 0x1f)
enum editorKey { enum editorKey {
BACKSPACE = 127,
ARROW_LEFT = 1000, ARROW_LEFT = 1000,
ARROW_RIGHT, ARROW_RIGHT,
ARROW_UP, ARROW_UP,
@ -312,6 +313,32 @@ void editorAppendRow(char *s, size_t len)
E.numrows++; E.numrows++;
} }
void editorRowInsertChar(erow *row, int at, int c)
{
if (at < 0 || at > row->size)
{
at = row->size;
}
row->chars = realloc(row->chars, row->size + 2);
memmove(&row->chars[at + 1], &row->chars[at], row->size - at + 1);
row->size++;
row->chars[at] = c;
editorUpdateRow(row);
}
/*** editor operations ***/
void editorInsertChar(int c)
{
if (E.cy == E.numrows)
{
editorAppendRow("", 0);
}
editorRowInsertChar(&E.row[E.cy], E.cx, c);
E.cx++;
}
/*** file i/o ***/ /*** file i/o ***/
void editorOpen(char *filename) void editorOpen(char *filename)
{ {
@ -603,6 +630,10 @@ void editorProcessKeypress()
switch (c) switch (c)
{ {
case '\r':
/* TODO */
break;
case CTRL_KEY('q'): case CTRL_KEY('q'):
write(STDOUT_FILENO, "\x1b[2J", 4); write(STDOUT_FILENO, "\x1b[2J", 4);
write(STDOUT_FILENO, "\x1b[H", 3); write(STDOUT_FILENO, "\x1b[H", 3);
@ -620,6 +651,12 @@ void editorProcessKeypress()
} }
break; break;
case BACKSPACE:
case CTRL_KEY('h'):
case DEL_KEY:
/* TODO */
break;
case PAGE_UP: case PAGE_UP:
case PAGE_DOWN: { case PAGE_DOWN: {
if (c == PAGE_UP) if (c == PAGE_UP)
@ -649,6 +686,14 @@ void editorProcessKeypress()
case ARROW_RIGHT: case ARROW_RIGHT:
editorMoveCursor(c); editorMoveCursor(c);
break; break;
case CTRL_KEY('l'):
case '\x1b':
break;
default:
editorInsertChar(c);
break;
} }
} }