Insert new lines

This commit is contained in:
Timothy Warren 2019-08-20 12:02:40 -04:00
parent 94dc8ca331
commit 9248b9d560
1 changed files with 30 additions and 6 deletions

36
kilo.c
View File

@ -303,11 +303,16 @@ void editorUpdateRow(erow *row)
row->rsize = idx; row->rsize = idx;
} }
void editorAppendRow(char *s, size_t len) void editorInsertRow(int at, char *s, size_t len)
{ {
E.row = realloc(E.row, sizeof(erow) * (E.numrows + 1)); if (at < 0 || at > E.numrows)
{
return;
}
E.row = realloc(E.row, sizeof(erow) * (E.numrows + 1));
memmove(&E.row[at + 1], &E.row[at], sizeof(erow) * (E.numrows - at));
int at = E.numrows;
E.row[at].size = len; E.row[at].size = len;
E.row[at].chars = malloc(len + 1); E.row[at].chars = malloc(len + 1);
memcpy(E.row[at].chars, s, len); memcpy(E.row[at].chars, s, len);
@ -383,12 +388,31 @@ void editorInsertChar(int c)
{ {
if (E.cy == E.numrows) if (E.cy == E.numrows)
{ {
editorAppendRow("", 0); editorInsertRow(E.numrows, "", 0);
} }
editorRowInsertChar(&E.row[E.cy], E.cx, c); editorRowInsertChar(&E.row[E.cy], E.cx, c);
E.cx++; E.cx++;
} }
void editorInsertNewline()
{
if (E.cx == 0)
{
editorInsertRow(E.cy, "", 0);
}
else
{
erow *row = &E.row[E.cy];
editorInsertRow(E.cy + 1, &row->chars[E.cx], row->size - E.cx);
row = &E.row[E.cy];
row->size = E.cx;
row->chars[row->size] = '\0';
editorUpdateRow(row);
}
E.cy++;
E.cx = 0;
}
void editorDelChar() void editorDelChar()
{ {
if (E.cy == E.numrows) if (E.cy == E.numrows)
@ -463,7 +487,7 @@ void editorOpen(char *filename)
{ {
linelen--; linelen--;
} }
editorAppendRow(line, linelen); editorInsertRow(E.numrows, line, linelen);
} }
free(line); free(line);
@ -766,7 +790,7 @@ void editorProcessKeypress()
switch (c) switch (c)
{ {
case '\r': case '\r':
/* TODO */ editorInsertNewline();
break; break;
case CTRL_KEY('q'): case CTRL_KEY('q'):