68 lines
3.5 KiB
Diff
68 lines
3.5 KiB
Diff
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;
|