From 5b6383876581980c51515a3216c367b084dfc427 Mon Sep 17 00:00:00 2001 From: katalx Date: Thu, 29 Jan 2026 03:33:53 -0500 Subject: delete words --- main.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 57de8c1..27c514e 100644 --- a/main.c +++ b/main.c @@ -61,6 +61,16 @@ txt_delete(DynStr *s, int i, int n) return i; } +int +delete_word(DynStr *s, int i) +{ + while (i > 0 && is_space(s->v[i-1])) + i = txt_delete(s, i, 1); + while (i > 0 && !is_space(s->v[i-1])) + i = txt_delete(s, i, 1); + return i; +} + int read_all(FILE *f, DynStr *out, Arena *a) { @@ -108,7 +118,11 @@ main(int argc, char **argv) case UIK_ESCAPE: goto done; case UIK_BACKSPACE: - inpi = txt_delete(&input, inpi, 1); + if (ev.key.mod & UIM_CTRL) { + inpi = delete_word(&input, inpi); + } else { + inpi = txt_delete(&input, inpi, 1); + } goto draw; case UIK_RETURN: { Str o = opt.v[seli]; @@ -142,7 +156,13 @@ main(int argc, char **argv) goto draw; default: if (!ev.key.strn) break; - inpi = txt_insert(&input, inpi, (Str) { ev.key.str, ev.key.strn }); + /* ^W */ + if (ev.key.strn == 1 && ev.key.str[0] == 0x17) { + inpi = delete_word(&input, inpi); + goto draw; + } + inpi = txt_insert(&input, inpi, + (Str) { ev.key.str, ev.key.strn }); seli = 0; goto draw; } -- cgit v1.2.3