Skip to content

Commit 27f0308

Browse files
authored
Merge pull request #3305 from dunkmann00/utf8-repl-fix
Handle home, delete, & emacs key w/ utf-8 in repl
2 parents 31a3d0e + ebabc5d commit 27f0308

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

lib/mp-readline/readline.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ int readline_process_char(int c) {
144144
goto right_arrow_key;
145145
} else if (c == CHAR_CTRL_K) {
146146
// CTRL-K is kill from cursor to end-of-line, inclusive
147-
vstr_cut_tail_bytes(rl.line, last_line_len - rl.cursor_pos);
147+
vstr_cut_tail_bytes(rl.line, rl.line->len - rl.cursor_pos);
148148
// set redraw parameters
149149
redraw_from_cursor = true;
150150
} else if (c == CHAR_CTRL_N) {
@@ -155,6 +155,7 @@ int readline_process_char(int c) {
155155
goto up_arrow_key;
156156
} else if (c == CHAR_CTRL_U) {
157157
// CTRL-U is kill from beginning-of-line up to cursor
158+
cont_chars = count_cont_bytes(rl.line->buf+rl.orig_line_len, rl.line->buf+rl.cursor_pos);
158159
vstr_cut_out_bytes(rl.line, rl.orig_line_len, rl.cursor_pos - rl.orig_line_len);
159160
// set redraw parameters
160161
redraw_step_back = rl.cursor_pos - rl.orig_line_len;
@@ -342,6 +343,7 @@ int readline_process_char(int c) {
342343
if (c == '~') {
343344
if (rl.escape_seq_buf[0] == '1' || rl.escape_seq_buf[0] == '7') {
344345
home_key:
346+
cont_chars = count_cont_bytes(rl.line->buf+rl.orig_line_len, rl.line->buf+rl.cursor_pos);
345347
redraw_step_back = rl.cursor_pos - rl.orig_line_len;
346348
} else if (rl.escape_seq_buf[0] == '4' || rl.escape_seq_buf[0] == '8') {
347349
end_key:
@@ -352,7 +354,12 @@ int readline_process_char(int c) {
352354
delete_key:
353355
#endif
354356
if (rl.cursor_pos < rl.line->len) {
355-
vstr_cut_out_bytes(rl.line, rl.cursor_pos, 1);
357+
size_t len = 1;
358+
while (UTF8_IS_CONT(rl.line->buf[rl.cursor_pos+len]) &&
359+
rl.cursor_pos+len < rl.line->len) {
360+
len++;
361+
}
362+
vstr_cut_out_bytes(rl.line, rl.cursor_pos, len);
356363
redraw_from_cursor = true;
357364
}
358365
} else {

0 commit comments

Comments
 (0)