summary refs log tree commit diff
path: root/edit.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--edit.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/edit.c b/edit.c
index 68593d1..b6edb98 100644
--- a/edit.c
+++ b/edit.c
@@ -45,13 +45,33 @@ char *editTail(void) {
 	return mbs;
 }
 
+static void reserve(size_t index, size_t count) {
+	if (len + count > Cap) return;
+	memmove(&buf[index + count], &buf[index], sizeof(*buf) * (len - index));
+	len += count;
+}
+
+static void delete(size_t index, size_t count) {
+	if (index + count > len) return;
+	memmove(
+		&buf[index], &buf[index + count], sizeof(*buf) * (len - index - count)
+	);
+	len -= count;
+}
+
 void edit(size_t id, enum Edit op, wchar_t ch) {
 	switch (op) {
-		break; case EditKill: len = pos = 0;
+		break; case EditHome:  pos = 0;
+		break; case EditEnd:   pos = len;
+		break; case EditLeft:  if (pos) pos--;
+		break; case EditRight: if (pos < len) pos++;
+
+		break; case EditKill:  len = pos = 0;
+		break; case EditErase: if (pos) delete(--pos, 1);
+
 		break; case EditInsert: {
-			if (len == Cap) break;
-			buf[pos++] = ch;
-			len++;
+			reserve(pos, 1);
+			if (pos < Cap) buf[pos++] = ch;
 		}
 		break; case EditEnter: {
 			pos = 0;
nk/commit/filter.c?h=1.4.1&id=f43b228d0bca5791be98ff3fbb2f8743219635b6&follow=1'>filter: add lua supportJason A. Donenfeld 2014-01-14filter: basic write hooking infrastructureJason A. Donenfeld 2014-01-14filter: allow for cleanup hook for filter typesJason A. Donenfeld 2014-01-14filter: introduce "filter type" prefixJohn Keeping 2014-01-14filter: add interface layerJohn Keeping 2014-01-14filter: add fprintf_filter functionJohn Keeping 2014-01-14authors: specify maintainersJason A. Donenfeld 2014-01-13filters: Improved syntax-highlighting.pyStefan Tatschner 2014-01-12tests: add CGIT_TEST_OPTS variable to MakefileJohn Keeping 2014-01-12ui-repolist: HTML-escape cgit_rooturl() responseJohn Keeping 2014-01-12ui-shared: URL-escape script_nameJohn Keeping 2014-01-12ui-refs: escape HTML chars in author and tagger namesJohn Keeping 2014-01-12filter: pass extra arguments via cgit_open_filterJohn Keeping 2014-01-12ui-snapshot: set unused cgit_filter fields to zeroJohn Keeping 2014-01-12html: remove redundant htmlfd variableJohn Keeping 2014-01-12tests: add Valgrind supportJohn Keeping 2014-01-12cache: don't leave cache_slot fields uninitializedJohn Keeping 2014-01-10filter: split filter functions into their own fileJason A. Donenfeld 2014-01-10filter: make exit status localJason A. Donenfeld 2014-01-10parsing: fix header typoJason A. Donenfeld 2014-01-10cgit.c: Fix comment on bit mask hackLukas Fleischer 2014-01-10cgit.c: Use "else" for mutually exclusive branchesLukas Fleischer 2014-01-10ui-snapshot.c: Do not reinvent suffixcmp()Lukas Fleischer 2014-01-10Refactor cgit_parse_snapshots_mask()Lukas Fleischer 2014-01-10Disallow use of undocumented snapshot delimitersLukas Fleischer 2014-01-10Replace most uses of strncmp() with prefixcmp()Lukas Fleischer 2014-01-09README: Fix dependenciesLukas Fleischer 2014-01-08README: Spelling and formatting fixesLukas Fleischer 2014-01-08Fix UTF-8 with syntax-highlighting.pyPřemysl Janouch 2014-01-08Add a suggestion to the manpagePřemysl Janouch 2014-01-08Fix the example configurationPřemysl Janouch 2014-01-08Fix about-formatting.shPřemysl Janouch 2014-01-08Fix some spelling errorsPřemysl Janouch 2014-01-08filters: highlight.sh: add css comments for highlight 2.6 and 3.8Ferry Huberts