CE edit implement line breaking
All checks were successful
Build documentation / build-and-deploy (push) Successful in 1m57s
All checks were successful
Build documentation / build-and-deploy (push) Successful in 1m57s
This commit is contained in:
22
ce/edit.c
22
ce/edit.c
@@ -175,6 +175,28 @@ void edit_start (const char* file_path, const char* text) {
|
|||||||
gapbuffer_backspace (&editor.current_line->gb);
|
gapbuffer_backspace (&editor.current_line->gb);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case '\n': {
|
||||||
|
struct edit_line* new_line = malloc (sizeof (*new_line));
|
||||||
|
memset (new_line, 0, sizeof (*new_line));
|
||||||
|
|
||||||
|
char* tail = gapbuffer_string_at (&warena_malloc, &temp_arena, &editor.current_line->gb,
|
||||||
|
editor.cursor.col);
|
||||||
|
size_t tail_size = strlen (tail);
|
||||||
|
|
||||||
|
gapbuffer_init (&wmalloc, NULL, &new_line->gb, tail_size > 0 ? tail_size : 32);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < tail_size; i++) {
|
||||||
|
char chr = gapbuffer_at (&editor.current_line->gb, editor.cursor.col);
|
||||||
|
gapbuffer_delete_at (&editor.current_line->gb, editor.cursor.col);
|
||||||
|
gapbuffer_insert (&wrealloc, NULL, &new_line->gb, chr);
|
||||||
|
}
|
||||||
|
|
||||||
|
list_insert_after (editor.lines, &editor.current_line->lines_link, &new_line->lines_link);
|
||||||
|
|
||||||
|
editor.cursor.col = 0;
|
||||||
|
editor.cursor.line++;
|
||||||
|
editor.current_line = new_line;
|
||||||
|
} break;
|
||||||
case KB_DELETE:
|
case KB_DELETE:
|
||||||
if (editor.cursor.col < gapbuffer_length (&editor.current_line->gb))
|
if (editor.cursor.col < gapbuffer_length (&editor.current_line->gb))
|
||||||
editor.current_line->gb.gap_end++;
|
editor.current_line->gb.gap_end++;
|
||||||
|
|||||||
Reference in New Issue
Block a user