@@ -144,7 +144,7 @@ int readline_process_char(int c) {
144
144
goto right_arrow_key ;
145
145
} else if (c == CHAR_CTRL_K ) {
146
146
// 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 );
148
148
// set redraw parameters
149
149
redraw_from_cursor = true;
150
150
} else if (c == CHAR_CTRL_N ) {
@@ -155,6 +155,7 @@ int readline_process_char(int c) {
155
155
goto up_arrow_key ;
156
156
} else if (c == CHAR_CTRL_U ) {
157
157
// 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 );
158
159
vstr_cut_out_bytes (rl .line , rl .orig_line_len , rl .cursor_pos - rl .orig_line_len );
159
160
// set redraw parameters
160
161
redraw_step_back = rl .cursor_pos - rl .orig_line_len ;
@@ -342,6 +343,7 @@ int readline_process_char(int c) {
342
343
if (c == '~' ) {
343
344
if (rl .escape_seq_buf [0 ] == '1' || rl .escape_seq_buf [0 ] == '7' ) {
344
345
home_key :
346
+ cont_chars = count_cont_bytes (rl .line -> buf + rl .orig_line_len , rl .line -> buf + rl .cursor_pos );
345
347
redraw_step_back = rl .cursor_pos - rl .orig_line_len ;
346
348
} else if (rl .escape_seq_buf [0 ] == '4' || rl .escape_seq_buf [0 ] == '8' ) {
347
349
end_key :
@@ -352,7 +354,12 @@ int readline_process_char(int c) {
352
354
delete_key :
353
355
#endif
354
356
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 );
356
363
redraw_from_cursor = true;
357
364
}
358
365
} else {
0 commit comments