summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2020-08-25 16:39:23 -0700
committerScott Shawcroft <scott@tannewt.org>2020-08-25 16:39:23 -0700
commit8b71e26abdd5ae2dfcd82d9f2dcb8f7179882d3f (patch)
treea9167d237c97818596b554a67a2d3b60a305b566 /lib
parent380cbfba55e45f9f0d8ccae6c28c23b1ea93147f (diff)
parent78c512e86b5c61d337e10cb5ec598cecd728c5f6 (diff)
Merge remote-tracking branch 'adafruit/main' into native_wifi
Diffstat (limited to 'lib')
-rw-r--r--lib/mp-readline/readline.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/mp-readline/readline.c b/lib/mp-readline/readline.c
index 464916ca4..6da71c40f 100644
--- a/lib/mp-readline/readline.c
+++ b/lib/mp-readline/readline.c
@@ -144,7 +144,7 @@ int readline_process_char(int c) {
goto right_arrow_key;
} else if (c == CHAR_CTRL_K) {
// CTRL-K is kill from cursor to end-of-line, inclusive
- vstr_cut_tail_bytes(rl.line, last_line_len - rl.cursor_pos);
+ vstr_cut_tail_bytes(rl.line, rl.line->len - rl.cursor_pos);
// set redraw parameters
redraw_from_cursor = true;
} else if (c == CHAR_CTRL_N) {
@@ -155,6 +155,7 @@ int readline_process_char(int c) {
goto up_arrow_key;
} else if (c == CHAR_CTRL_U) {
// CTRL-U is kill from beginning-of-line up to cursor
+ cont_chars = count_cont_bytes(rl.line->buf+rl.orig_line_len, rl.line->buf+rl.cursor_pos);
vstr_cut_out_bytes(rl.line, rl.orig_line_len, rl.cursor_pos - rl.orig_line_len);
// set redraw parameters
redraw_step_back = rl.cursor_pos - rl.orig_line_len;
@@ -342,6 +343,7 @@ left_arrow_key:
if (c == '~') {
if (rl.escape_seq_buf[0] == '1' || rl.escape_seq_buf[0] == '7') {
home_key:
+ cont_chars = count_cont_bytes(rl.line->buf+rl.orig_line_len, rl.line->buf+rl.cursor_pos);
redraw_step_back = rl.cursor_pos - rl.orig_line_len;
} else if (rl.escape_seq_buf[0] == '4' || rl.escape_seq_buf[0] == '8') {
end_key:
@@ -352,7 +354,12 @@ end_key:
delete_key:
#endif
if (rl.cursor_pos < rl.line->len) {
- vstr_cut_out_bytes(rl.line, rl.cursor_pos, 1);
+ size_t len = 1;
+ while (UTF8_IS_CONT(rl.line->buf[rl.cursor_pos+len]) &&
+ rl.cursor_pos+len < rl.line->len) {
+ len++;
+ }
+ vstr_cut_out_bytes(rl.line, rl.cursor_pos, len);
redraw_from_cursor = true;
}
} else {