summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorkatalx2026-01-29 03:33:53 -0500
committerkatalx2026-01-29 03:33:53 -0500
commit5b6383876581980c51515a3216c367b084dfc427 (patch)
tree5babf5b694bdf4d5cd31512fdc944543d2864383 /main.c
parente55b4d12bb3380e4ba381f364dc06c06fb8fab60 (diff)
delete words
Diffstat (limited to 'main.c')
-rw-r--r--main.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/main.c b/main.c
index 57de8c1..27c514e 100644
--- a/main.c
+++ b/main.c
@@ -62,6 +62,16 @@ txt_delete(DynStr *s, int i, int n)
}
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)
{
char buf[256];
@@ -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;
}