diff options
| -rw-r--r-- | main.c | 24 |
1 files changed, 22 insertions, 2 deletions
@@ -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; } |
