From 64460c5abe5db44a344893687e1f5cf5663452c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Fri, 30 Aug 2019 19:37:06 +0200 Subject: [PATCH] search: implement delete word backward/forward --- search.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/search.c b/search.c index 5c9c16e5..89204350 100644 --- a/search.c +++ b/search.c @@ -353,12 +353,28 @@ search_input(struct terminal *term, uint32_t key, xkb_keysym_t sym, xkb_mod_mask } else if ((mods == alt || mods == ctrl) && sym == XKB_KEY_BackSpace) { - /* TODO: delete word backward */ + size_t diff = distance_prev_word(term); + size_t old_cursor = term->search.cursor; + size_t new_cursor = old_cursor - diff; + + memmove(&term->search.buf[new_cursor], + &term->search.buf[old_cursor], + (term->search.len - old_cursor) * sizeof(wchar_t)); + + term->search.len -= diff; + term->search.cursor = new_cursor; } else if ((mods == alt && sym == XKB_KEY_d) || (mods == ctrl && sym == XKB_KEY_Delete)) { - /* TODO: delete word forward */ + size_t diff = distance_next_word(term); + size_t cursor = term->search.cursor; + + memmove(&term->search.buf[cursor], + &term->search.buf[cursor + diff], + (term->search.len - (cursor + diff)) * sizeof(wchar_t)); + + term->search.len -= diff; } else if (mods == 0 && sym == XKB_KEY_Delete) {