tInsert characters to row buffer in insert mode - ve - a minimal text editor (w… | |
git clone git://src.adamsgaard.dk/ve | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 27dc307eae9e93c25bc9bba5fa30e92fc2eba879 | |
parent 0ebc6405b29708897e7f73c3216dbabaef92e852 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Tue, 6 Aug 2019 15:51:22 +0200 | |
Insert characters to row buffer in insert mode | |
Diffstat: | |
M input.c | 3 +++ | |
M row.c | 16 +++++++++++++--- | |
M row.h | 1 + | |
3 files changed, 17 insertions(+), 3 deletions(-) | |
--- | |
diff --git a/input.c b/input.c | |
t@@ -2,6 +2,7 @@ | |
#include <stdlib.h> | |
#include "byote.h" | |
#include "terminal.h" | |
+#include "edit.h" | |
#define CTRL_KEY(k) ((k) & 0x1f) | |
t@@ -126,6 +127,8 @@ editor_process_keypress() | |
case 27: /* escape */ | |
E.mode = 0; | |
break; | |
+ default: | |
+ editor_insert_char(c); | |
} | |
} | |
} | |
diff --git a/row.c b/row.c | |
t@@ -1,9 +1,6 @@ | |
#include <stdlib.h> | |
-#include <stdio.h> | |
-#include <sys/types.h> | |
#include <string.h> | |
#include "byote.h" | |
-#include "terminal.h" | |
/* navigate over tab-representative string as one character */ | |
int | |
t@@ -69,3 +66,16 @@ editor_append_row(char *s, size_t len) | |
++E.num_rows; | |
} | |
+ | |
+/* insert character to row, making sure to allocate memory accordingly */ | |
+void | |
+editor_row_insert_char(eRow *row, int i, int c) | |
+{ | |
+ if (i<0 || i>row->size) | |
+ i = row->size; | |
+ row->chars = realloc(row->chars, row->size + 2); | |
+ memmove(&row->chars[i+1], &row->chars[i], row->size - i+1); | |
+ row->size++; | |
+ row->chars[i] = c; | |
+ editor_update_row(row); | |
+} | |
diff --git a/row.h b/row.h | |
t@@ -5,5 +5,6 @@ | |
int editor_row_cursor_x_to_rx(eRow *row, int cursor_x); | |
void editor_append_row(char *s, size_t len); | |
+void editor_row_insert_char(eRow *row, int i, int c); | |
#endif |