Count utf8 chars, not every byte for line

This commit is contained in:
George Waters 2020-08-09 14:06:49 -04:00
parent 93829e57b2
commit 398be76bf6
No known key found for this signature in database
GPG Key ID: D993F8B1CC21DB25

View File

@ -58,10 +58,12 @@ STATIC char *str_dup_maybe(const char *str) {
return s2; return s2;
} }
STATIC int count_cont_bytes(char *start, char *end) { STATIC size_t count_cont_bytes(char *start, char *end) {
int count = 0; int count = 0;
for (char *pos = start; pos < end; pos++) { for (char *pos = start; pos < end; pos++) {
count += UTF8_IS_CONT(*pos); if(UTF8_IS_CONT(*pos)) {
count++;
}
} }
return count; return count;
} }
@ -108,7 +110,7 @@ typedef struct _readline_t {
STATIC readline_t rl; STATIC readline_t rl;
int readline_process_char(int c) { int readline_process_char(int c) {
size_t last_line_len = rl.line->len; size_t last_line_len = utf8_charlen((byte *)rl.line->buf, rl.line->len);
int cont_chars = 0; int cont_chars = 0;
int redraw_step_back = 0; int redraw_step_back = 0;
bool redraw_from_cursor = false; bool redraw_from_cursor = false;
@ -380,7 +382,7 @@ delete_key:
rl.cursor_pos -= redraw_step_back; rl.cursor_pos -= redraw_step_back;
} }
if (redraw_from_cursor) { if (redraw_from_cursor) {
if (rl.line->len < last_line_len) { if (utf8_charlen((byte *)rl.line->buf, rl.line->len) < last_line_len) {
// erase old chars // erase old chars
mp_hal_erase_line_from_cursor(last_line_len - rl.cursor_pos); mp_hal_erase_line_from_cursor(last_line_len - rl.cursor_pos);
} }