Enable entering some characters
This commit is contained in:
parent
256ab17b63
commit
061ddbc5b5
45
kilo.c
45
kilo.c
@ -24,6 +24,7 @@
|
||||
#define CTRL_KEY(k) ((k) & 0x1f)
|
||||
|
||||
enum editorKey {
|
||||
BACKSPACE = 127,
|
||||
ARROW_LEFT = 1000,
|
||||
ARROW_RIGHT,
|
||||
ARROW_UP,
|
||||
@ -312,6 +313,32 @@ void editorAppendRow(char *s, size_t len)
|
||||
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 ***/
|
||||
void editorOpen(char *filename)
|
||||
{
|
||||
@ -603,6 +630,10 @@ void editorProcessKeypress()
|
||||
|
||||
switch (c)
|
||||
{
|
||||
case '\r':
|
||||
/* TODO */
|
||||
break;
|
||||
|
||||
case CTRL_KEY('q'):
|
||||
write(STDOUT_FILENO, "\x1b[2J", 4);
|
||||
write(STDOUT_FILENO, "\x1b[H", 3);
|
||||
@ -620,6 +651,12 @@ void editorProcessKeypress()
|
||||
}
|
||||
break;
|
||||
|
||||
case BACKSPACE:
|
||||
case CTRL_KEY('h'):
|
||||
case DEL_KEY:
|
||||
/* TODO */
|
||||
break;
|
||||
|
||||
case PAGE_UP:
|
||||
case PAGE_DOWN: {
|
||||
if (c == PAGE_UP)
|
||||
@ -649,6 +686,14 @@ void editorProcessKeypress()
|
||||
case ARROW_RIGHT:
|
||||
editorMoveCursor(c);
|
||||
break;
|
||||
|
||||
case CTRL_KEY('l'):
|
||||
case '\x1b':
|
||||
break;
|
||||
|
||||
default:
|
||||
editorInsertChar(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user