diff options
author | Přemysl Janouch <p.janouch@gmail.com> | 2017-06-26 04:54:56 +0200 |
---|---|---|
committer | Přemysl Janouch <p.janouch@gmail.com> | 2017-06-26 04:54:56 +0200 |
commit | 2375e0dd3e431a4f69a522af30b7813aa3b74598 (patch) | |
tree | 9ada2827b85f7a45e24bc35d6c390132d791fe52 | |
parent | 7d414c76470c55b9b517e7a990fa23121da645ad (diff) | |
download | nncmpp-2375e0dd3e431a4f69a522af30b7813aa3b74598.tar.gz nncmpp-2375e0dd3e431a4f69a522af30b7813aa3b74598.tar.xz nncmpp-2375e0dd3e431a4f69a522af30b7813aa3b74598.zip |
Make Del/Bksp eat whole graphemes
Tested on some zalgo text.
-rw-r--r-- | nncmpp.c | 22 |
1 files changed, 17 insertions, 5 deletions
@@ -1724,22 +1724,34 @@ app_editor_process_action (enum action action) return true; case ACTION_EDITOR_B_DELETE: + { if (g.editor_point < 1) return false; - app_editor_move (g.editor_point - 1, g.editor_point, + int len = 1; + while (g.editor_point - len > 0 + && !g.editor_w[g.editor_point - len]) + len++; + app_editor_move (g.editor_point - len, g.editor_point, g.editor_len - g.editor_point); - g.editor_len--; - g.editor_point--; + g.editor_len -= len; + g.editor_point -= len; app_editor_changed (); return true; + } case ACTION_EDITOR_F_DELETE: + { if (g.editor_point + 1 > (int) g.editor_len) return false; - g.editor_len--; - app_editor_move (g.editor_point, g.editor_point + 1, + int len = 1; + while (g.editor_point + len < (int) g.editor_len + && !g.editor_w[g.editor_point + len]) + len++; + g.editor_len -= len; + app_editor_move (g.editor_point, g.editor_point + len, g.editor_len - g.editor_point); app_editor_changed (); return true; + } case ACTION_EDITOR_B_KILL_WORD: { if (g.editor_point < 1) |