mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-02 03:52:49 -05:00
Markus Kuhn's UTF-8 page
http://www.cl.cam.ac.uk/~mgk25/unicode.html#activate feels strongly that it should be easy to make _all_ your applications work in UTF-8 mode, without having to remember a switch for each one. Every application should simply note a UTF-8 locale setting and switch into UTF-8 mode automatically. Therefore, for the Unix port only, there's now a checkbox, enabled by default, which causes the drop-down Translation box to be overridden if the locale indicates UTF-8. Anyone who doesn't like this, or doesn't like MGK, is welcome to turn it straight back off. I'm not _completely_ convinced by MGK's argument myself; for xterm/pterm to do _useful_ UTF-8 you also need to specify a decently Unicode-capable font, and there's no way _that_ can be automagically done on noticing a locale setting. But it's a de facto standard (i.e. xterm does it :-) so I might as well at least be _able_ to support it. [originally from svn r4648]
This commit is contained in:
27
unix/uxucs.c
27
unix/uxucs.c
@ -106,8 +106,8 @@ int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen,
|
||||
/*
|
||||
* Return value is TRUE if pterm is to run in direct-to-font mode.
|
||||
*/
|
||||
int init_ucs(struct unicode_data *ucsdata,
|
||||
char *linecharset, int font_charset, int vtmode)
|
||||
int init_ucs(struct unicode_data *ucsdata, char *linecharset,
|
||||
int utf8_override, int font_charset, int vtmode)
|
||||
{
|
||||
int i, ret = 0;
|
||||
|
||||
@ -120,10 +120,27 @@ int init_ucs(struct unicode_data *ucsdata,
|
||||
ucsdata->font_codepage = -1;
|
||||
|
||||
/*
|
||||
* line_codepage should be decoded from the specification in
|
||||
* cfg.
|
||||
* If utf8_override is set and the POSIX locale settings
|
||||
* dictate a UTF-8 character set, then just go straight for
|
||||
* UTF-8.
|
||||
*/
|
||||
ucsdata->line_codepage = decode_codepage(linecharset);
|
||||
ucsdata->line_codepage = CS_NONE;
|
||||
if (utf8_override) {
|
||||
const char *s;
|
||||
if (((s = getenv("LC_ALL")) && *s) ||
|
||||
((s = getenv("LC_CTYPE")) && *s) ||
|
||||
((s = getenv("LANG")) && *s)) {
|
||||
if (strstr(s, "UTF-8"))
|
||||
ucsdata->line_codepage = CS_UTF8;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Failing that, line_codepage should be decoded from the
|
||||
* specification in cfg.
|
||||
*/
|
||||
if (ucsdata->line_codepage == CS_NONE)
|
||||
ucsdata->line_codepage = decode_codepage(linecharset);
|
||||
|
||||
/*
|
||||
* If line_codepage is _still_ CS_NONE, we assume we're using
|
||||
|
Reference in New Issue
Block a user