1
0
mirror of https://github.com/rkd77/elinks.git synced 2025-01-03 14:57:44 -05:00

Add get_terminal_codepage().

This simplifies the callers a little and may help implement
simultaneous support for different charsets on different terminals
of the same type (bug 1064).
This commit is contained in:
Kalle Olavi Niemitalo 2008-12-28 17:42:29 +02:00 committed by Kalle Olavi Niemitalo
parent 25da8085b3
commit ad45176dde
13 changed files with 33 additions and 19 deletions

View File

@ -297,7 +297,7 @@ select_button_by_key(struct dialog_data *dlg_data)
#ifdef CONFIG_UTF8 #ifdef CONFIG_UTF8
key = unicode_fold_label_case(get_kbd_key(ev)); key = unicode_fold_label_case(get_kbd_key(ev));
codepage = get_opt_codepage_tree(dlg_data->win->term->spec, "charset"); codepage = get_terminal_codepage(dlg_data->win->term);
#else #else
key = toupper(get_kbd_key(ev)); key = toupper(get_kbd_key(ev));
#endif #endif

View File

@ -127,7 +127,7 @@ check_hotkeys_common(struct menu *menu, term_event_char_T hotkey, struct termina
{ {
#ifdef CONFIG_UTF8 #ifdef CONFIG_UTF8
unicode_val_T key = unicode_fold_label_case(hotkey); unicode_val_T key = unicode_fold_label_case(hotkey);
int codepage = get_opt_codepage_tree(term->spec, "charset"); int codepage = get_terminal_codepage(term);
#else #else
unsigned char key = toupper(hotkey); unsigned char key = toupper(hotkey);
#endif #endif

View File

@ -691,8 +691,7 @@ kbd_field(struct dialog_data *dlg_data, struct widget_data *widget_data)
/* get_kbd_key(ev) is UCS-4, and @text /* get_kbd_key(ev) is UCS-4, and @text
* is in the terminal's charset. */ * is in the terminal's charset. */
ins = u2cp_no_nbsp(get_kbd_key(ev), ins = u2cp_no_nbsp(get_kbd_key(ev),
get_opt_codepage_tree(term->spec, get_terminal_codepage(term));
"charset"));
inslen = strlen(ins); inslen = strlen(ins);
#endif /* CONFIG_UTF8 */ #endif /* CONFIG_UTF8 */

View File

@ -50,7 +50,7 @@ charset_list(struct terminal *term, void *xxx, void *ses_)
int i, items; int i, items;
int sel = 0; int sel = 0;
const unsigned char *const sel_mime = get_cp_mime_name( const unsigned char *const sel_mime = get_cp_mime_name(
get_opt_codepage_tree(term->spec, "charset")); get_terminal_codepage(term));
struct menu_item *mi = new_menu(FREE_LIST); struct menu_item *mi = new_menu(FREE_LIST);
if (!mi) return; if (!mi) return;

View File

@ -455,7 +455,7 @@ render_document_frames(struct session *ses, int no_cache)
if (!get_opt_bool_tree(ses->tab->term->spec, "underline")) if (!get_opt_bool_tree(ses->tab->term->spec, "underline"))
doc_opts.color_flags |= COLOR_ENHANCE_UNDERLINE; doc_opts.color_flags |= COLOR_ENHANCE_UNDERLINE;
doc_opts.cp = get_opt_codepage_tree(ses->tab->term->spec, "charset"); doc_opts.cp = get_terminal_codepage(ses->tab->term);
doc_opts.no_cache = no_cache & 1; doc_opts.no_cache = no_cache & 1;
doc_opts.gradual_rerendering = !!(no_cache & 2); doc_opts.gradual_rerendering = !!(no_cache & 2);

View File

@ -61,7 +61,7 @@ extern int current_charset;
static inline void static inline void
intl_set_charset(struct terminal *term) intl_set_charset(struct terminal *term)
{ {
int new_charset = get_opt_codepage_tree(term->spec, "charset"); int new_charset = get_terminal_codepage(term);
/* Prevent useless switching. */ /* Prevent useless switching. */
if (current_charset != new_charset) { if (current_charset != new_charset) {

View File

@ -171,8 +171,7 @@ show_http_error_document(struct session *ses, void *data)
if (str) { if (str) {
/* The codepage that _("foo", term) used when it was /* The codepage that _("foo", term) used when it was
* called by get_http_error_document. */ * called by get_http_error_document. */
const int gettext_codepage const int gettext_codepage = get_terminal_codepage(term);
= get_opt_codepage_tree(term->spec, "charset");
if (cached) delete_entry_content(cache); if (cached) delete_entry_content(cache);

View File

@ -388,7 +388,7 @@ ses_imgmap(struct session *ses)
&menu, &ml, ses->loading_uri, &menu, &ml, ses->loading_uri,
&doc_view->document->options, &doc_view->document->options,
ses->task.target.frame, ses->task.target.frame,
get_opt_codepage_tree(ses->tab->term->spec, "charset"), get_terminal_codepage(ses->tab->term),
get_opt_codepage("document.codepage.assume"), get_opt_codepage("document.codepage.assume"),
get_opt_bool("document.codepage.force_assumed"))) get_opt_bool("document.codepage.force_assumed")))
return; return;

View File

@ -148,7 +148,7 @@ term_send_ucs(struct terminal *term, unicode_val_T u,
const unsigned char *recoded; const unsigned char *recoded;
set_kbd_term_event(&ev, KBD_UNDEF, modifier); set_kbd_term_event(&ev, KBD_UNDEF, modifier);
recoded = u2cp_no_nbsp(u, get_opt_codepage_tree(term->spec, "charset")); recoded = u2cp_no_nbsp(u, get_terminal_codepage(term));
if (!recoded) recoded = "*"; if (!recoded) recoded = "*";
while (*recoded) { while (*recoded) {
ev.info.keyboard.key = *recoded; ev.info.keyboard.key = *recoded;
@ -184,8 +184,7 @@ check_terminal_name(struct terminal *term, struct terminal_info *info)
/* Probably not best place for set this. But now we finally have /* Probably not best place for set this. But now we finally have
* term->spec and term->utf8 should be set before decode session info. * term->spec and term->utf8 should be set before decode session info.
* --Scrool */ * --Scrool */
term->utf8_cp = is_cp_utf8(get_opt_codepage_tree(term->spec, term->utf8_cp = is_cp_utf8(get_terminal_codepage(term));
"charset"));
/* Force UTF-8 I/O if the UTF-8 charset is selected. Various /* Force UTF-8 I/O if the UTF-8 charset is selected. Various
* places assume that the terminal's charset is unibyte if * places assume that the terminal's charset is unibyte if
* UTF-8 I/O is disabled. (bug 827) */ * UTF-8 I/O is disabled. (bug 827) */

View File

@ -103,6 +103,24 @@ init_term(int fdin, int fdout)
return term; return term;
} }
/** Get the codepage of a terminal. The UTF-8 I/O option does not
* affect this.
*
* @todo Perhaps cache the value in struct terminal?
*
* @bug Bug 1064: If the charset has been set as "System", this should
* apply the locale environment variables of the slave ELinks process,
* not those of the master ELinks process that parsed the configuration
* file. That is why the parameter points to struct terminal and not
* merely to its option tree (term->spec).
*
* @see get_translation_table(), get_cp_mime_name() */
int
get_terminal_codepage(const struct terminal *term)
{
return get_opt_codepage_tree(term->spec, "charset");
}
void void
redraw_all_terminals(void) redraw_all_terminals(void)
{ {

View File

@ -172,6 +172,7 @@ void destroy_terminal(struct terminal *);
void redraw_terminal(struct terminal *term); void redraw_terminal(struct terminal *term);
void redraw_terminal_cls(struct terminal *term); void redraw_terminal_cls(struct terminal *term);
void cls_redraw_all_terminals(void); void cls_redraw_all_terminals(void);
int get_terminal_codepage(const struct terminal *);
void redraw_all_terminals(void); void redraw_all_terminals(void);
void destroy_all_terminals(void); void destroy_all_terminals(void);

View File

@ -165,7 +165,7 @@ init_form_state(struct document_view *doc_view,
doc_cp = doc_view->document->cp; doc_cp = doc_view->document->cp;
term = doc_view->session->tab->term; term = doc_view->session->tab->term;
viewer_cp = get_opt_codepage_tree(term->spec, "charset"); viewer_cp = get_terminal_codepage(term);
mem_free_set(&fs->value, NULL); mem_free_set(&fs->value, NULL);
@ -1248,7 +1248,7 @@ get_form_uri(struct session *ses, struct document_view *doc_view,
get_successful_controls(doc_view, fc, &submit); get_successful_controls(doc_view, fc, &submit);
cp_from = get_opt_codepage_tree(ses->tab->term->spec, "charset"); cp_from = get_terminal_codepage(ses->tab->term);
cp_to = doc_view->document->cp; cp_to = doc_view->document->cp;
switch (form->method) { switch (form->method) {
case FORM_METHOD_GET: case FORM_METHOD_GET:
@ -1846,8 +1846,7 @@ field_op(struct session *ses, struct document_view *doc_view,
#ifdef CONFIG_UTF8 #ifdef CONFIG_UTF8
/* fs->value is in the charset of the terminal. */ /* fs->value is in the charset of the terminal. */
ctext = u2cp_no_nbsp(get_kbd_key(ev), ctext = u2cp_no_nbsp(get_kbd_key(ev),
get_opt_codepage_tree(ses->tab->term->spec, get_terminal_codepage(ses->tab->term));
"charset"));
length = strlen(ctext); length = strlen(ctext);
if (strlen(fs->value) + length > fc->maxlength if (strlen(fs->value) + length > fc->maxlength

View File

@ -1216,8 +1216,7 @@ try_document_key(struct session *ses, struct document_view *doc_view,
#ifdef CONFIG_UTF8 #ifdef CONFIG_UTF8
key = get_kbd_key(ev); key = get_kbd_key(ev);
#else /* !CONFIG_UTF8 */ #else /* !CONFIG_UTF8 */
key = cp2u(get_opt_codepage_tree(ses->tab->term->spec, key = cp2u(get_terminal_codepage(ses->tab->term),
"charset"),
get_kbd_key(ev)); get_kbd_key(ev));
#endif /* !CONFIG_UTF8 */ #endif /* !CONFIG_UTF8 */
/* If @key now is 0 (which is used in link.accesskey if there /* If @key now is 0 (which is used in link.accesskey if there