diff --git a/src/viewer/text/form.c b/src/viewer/text/form.c index 5f28cbc64..0695874b1 100644 --- a/src/viewer/text/form.c +++ b/src/viewer/text/form.c @@ -1744,26 +1744,29 @@ field_op(struct session *ses, struct document_view *doc_view, } #ifdef CONFIG_UTF8 - { - /* The charset of the terminal; we assume - * fs->value is in this charset. - * (Is that OK?) */ + if (ses->tab->term->utf8) { + /* fs->value is in UTF-8 regardless of + * the charset of the terminal. */ + text = encode_utf8(get_kbd_key(ev)); + } else { + /* fs->value is in the charset of the + * terminal. */ int cp = get_opt_codepage_tree(ses->tab->term->spec, "charset"); text = u2cp_no_nbsp(get_kbd_key(ev), cp); - length = strlen(text); - - if (strlen(fs->value) + length > fc->maxlength - || !insert_in_string(&fs->value, fs->state, text, length)) { - status = FRAME_EVENT_OK; - break; - } - - fs->state += length; - if (fc->type == FC_TEXTAREA) - fs->state_cell = 0; } + length = strlen(text); + + if (strlen(fs->value) + length > fc->maxlength + || !insert_in_string(&fs->value, fs->state, text, length)) { + status = FRAME_EVENT_OK; + break; + } + + fs->state += length; + if (fc->type == FC_TEXTAREA) + fs->state_cell = 0; #else fs->value[fs->state++] = get_kbd_key(ev); #endif /* CONFIG_UTF8 */ diff --git a/src/viewer/text/link.c b/src/viewer/text/link.c index 399c07c19..40e65e03d 100644 --- a/src/viewer/text/link.c +++ b/src/viewer/text/link.c @@ -115,7 +115,9 @@ get_link_cursor_offset(struct document_view *doc_view, struct link *link) struct form_control *fc; struct form_state *fs; #ifdef CONFIG_UTF8 - int utf8 = doc_view->document->options.utf8; + /* The encoding of form fields depends on the terminal, + * rather than on the document. */ + int utf8 = doc_view->session->tab->term->utf8; #endif /* CONFIG_UTF8 */ switch (link->type) {