Binärdateien putty/.svn/wc.db und putty.new/.svn/wc.db sind verschieden. diff -ruN putty/terminal.c putty.new/terminal.c --- putty/terminal.c 2014-11-19 12:27:29.002043500 +0100 +++ putty.new/terminal.c 2014-11-19 14:32:38.356466800 +0100 @@ -2808,10 +2808,58 @@ switch (term->utf_state) { case 0: if (c < 0x80) { - /* UTF-8 must be stateless so we ignore iso2022. */ - if (term->ucsdata->unitab_ctrl[c] != 0xFF) - c = term->ucsdata->unitab_ctrl[c]; - else c = ((unsigned char)c) | CSET_ASCII; + /* See http://compgroups.net/comp.terminals/-putty-hack-for-wish-utf8-plus-vt100/2625536 + There is a controversial discussion whether or not supporting + iso2022 in UTF-8 mode is a good idea, but the experiences with + this patch over years now shows it works quite well and it + simply looks better. To please everyone, the support is made + optional (only used if environment variable PUTTY_ISO2022 is + found) + */ + if (!getenv("PUTTY_ISO2022")) { + /* UTF-8 must be stateless so we ignore iso2022. */ + if (term->ucsdata->unitab_ctrl[c] != 0xFF) + c = term->ucsdata->unitab_ctrl[c]; + else c = ((unsigned char)c) | CSET_ASCII; + } else { + if(term->sco_acs && + (c!='\033' && c!='\012' && c!='\015' && c!='\b')) + { + if (term->sco_acs == 2) c |= 0x80; + c |= CSET_SCOACS; + } else { + switch (term->cset_attr[term->cset]) { + /* + * Linedraw characters are different from 'ESC ( B' + * only for a small range. For ones outside that + * range, make sure we use the same font as well as + * the same encoding. + */ + case CSET_LINEDRW: + if (term->ucsdata->unitab_ctrl[c] != 0xFF) + c = term->ucsdata->unitab_ctrl[c]; + else + c = ((unsigned char) c) | CSET_LINEDRW; + break; + + case CSET_GBCHR: + /* If UK-ASCII, make the '#' a LineDraw Pound */ + if (c == '#') { + c = '}' | CSET_LINEDRW; + break; + } + /*FALLTHROUGH*/ case CSET_ASCII: + if (term->ucsdata->unitab_ctrl[c] != 0xFF) + c = term->ucsdata->unitab_ctrl[c]; + else + c = ((unsigned char) c) | CSET_ASCII; + break; + case CSET_SCOACS: + if (c>=' ') c = ((unsigned char)c) | CSET_SCOACS; + break; + } + } + } break; } else if ((c & 0xe0) == 0xc0) { term->utf_size = term->utf_state = 1;