Revision: 8136 https://osdn.net/projects/ttssh2/scm/svn/commits/8136 Author: zmatsuo Date: 2019-09-13 01:00:34 +0900 (Fri, 13 Sep 2019) Log Message: ----------- IRM(挿入モード)が動作 - r8103相当 Modified Paths: -------------- branches/unicode_buf/teraterm/teraterm/buffer.c branches/unicode_buf/teraterm/teraterm/vtterm.c -------------- next part -------------- Modified: branches/unicode_buf/teraterm/teraterm/buffer.c =================================================================== --- branches/unicode_buf/teraterm/teraterm/buffer.c 2019-09-12 16:00:23 UTC (rev 8135) +++ branches/unicode_buf/teraterm/teraterm/buffer.c 2019-09-12 16:00:34 UTC (rev 8136) @@ -2856,137 +2856,153 @@ Attr.Attr |= AttrLineContinued; } - if (Insert) { - // TODO \x96\xA2\x83`\x83F\x83b\x83N - int XStart, LineEnd, MoveLen; - int extr = 0; - if (CursorX > CursorRightM) - LineEnd = NumOfColumns - 1; - else - LineEnd = CursorRightM; + buff_char_t *p = NULL; // NULL\x82̂Ƃ\xAB\x81A\x91O\x82̕\xB6\x8E\x9A\x82͂Ȃ\xA2 + // \x91O\x82̕\xB6\x8E\x9A + if (CursorX >= 1 && CodeLineW[CursorX - 1].u32 != 0) { + p = &CodeLineW[CursorX - 1]; + } else if (CursorX >= 2 && CodeLineW[CursorX - 2].u32 != 0) { + p = &CodeLineW[CursorX - 2]; + } - if (LineEnd < NumOfColumns - 1 && (AttrLine[LineEnd] & AttrKanji)) { - CodeLine[LineEnd] = 0x20; -#if UNICODE_INTERNAL_BUFF - BuffSetChar(&CodeLineW[LineEnd], 0x20, 'H'); -#endif - AttrLine[LineEnd] &= ~AttrKanji; - CodeLine[LineEnd+1] = 0x20; - AttrLine[LineEnd+1] &= ~AttrKanji; - extr = 1; - } + if (UnicodeIsVariationSelector(u32) || + UnicodeIsCombiningCharacter(u32) || + (u32 == 0x200d) || + (p != NULL && p->u32_last == 0x200d)) + { + // Combining + // VariationSelector or + // CombiningCharacter or + // \x83[\x83\x8D\x95\x9D\x90ڍ\x87\x8Eq,ZERO WIDTH JOINER(ZWJ) (U+200d) or + // 1\x82O\x82\xAA ZWJ + move_x = 0; // \x83J\x81[\x83\\x83\x8B\x88ړ\xAE\x97\xCA=0 - MoveLen = LineEnd - CursorX - 1; - if (MoveLen > 0) { - memmove(&CodeLine[CursorX+2], &CodeLine[CursorX], MoveLen); -#if UNICODE_INTERNAL_BUFF - memmoveW(&(CodeLineW[CursorX+2]), &(CodeLineW[CursorX]), MoveLen); -#endif - memmove(&AttrLine[CursorX+2], &AttrLine[CursorX], MoveLen); - memmove(&AttrLine2[CursorX+2], &AttrLine2[CursorX], MoveLen); - memmove(&AttrLineFG[CursorX+2], &AttrLineFG[CursorX], MoveLen); - memmove(&AttrLineBG[CursorX+2], &AttrLineBG[CursorX], MoveLen); + if (p == NULL) { + // \x91O\x82\xAA\x82Ȃ\xA2\x82̂ɂ\xAD\x82\xC1\x82\xAD\x95\xB6\x8E\x9A\x82\xAA\x8Fo\x82Ă\xAB\x82\xBD\x82Ƃ\xAB + // \x82Ƃ肠\x82\xA6\x82\xB8\x83X\x83y\x81[\x83X\x82ɂ\xAD\x82\xC1\x82\xAF\x82\xE9 + p = &CodeLineW[CursorX]; + BuffSetChar(p, ' ', 'H'); } - CodeLine[CursorX] = b1; -#if UNICODE_INTERNAL_BUFF - BuffSetChar(&CodeLineW[CursorX], u32, 'H'); -#endif + // \x91O\x82̕\xB6\x8E\x9A\x82ɂ\xAD\x82\xC1\x82\xAF\x82\xE9 + BuffAddChar(p, u32); +#if 0 AttrLine[CursorX] = Attr.Attr; AttrLine2[CursorX] = Attr.Attr2; AttrLineFG[CursorX] = Attr.Fore; AttrLineBG[CursorX] = Attr.Back; - if (CursorX < LineEnd) { - CodeLine[CursorX+1] = 0; +#endif + } else { + char width_property; + char emoji; + BOOL half_width = BuffIsHalfWidthFromCode(&ts, u32, &width_property, &emoji); + if (Insert) { + // \x91}\x93\xFC\x83\x82\x81[\x83h + // TODO \x96\xA2\x83`\x83F\x83b\x83N + int XStart, LineEnd, MoveLen; + int extr = 0; + if (CursorX > CursorRightM) + LineEnd = NumOfColumns - 1; + else + LineEnd = CursorRightM; + + // \x88\xEA\x94ԍŌ\xE3\x82̕\xB6\x8E\x9A\x82\xAA\x91S\x8Ap\x82̏ꍇ\x81A + if (LineEnd <= NumOfColumns - 1 && (AttrLine[LineEnd-1] & AttrKanji)) { + CodeLine[LineEnd-1] = 0x20; #if UNICODE_INTERNAL_BUFF - BuffSetChar(&CodeLineW[CursorX + 1], 0, 'H'); + BuffSetChar(&CodeLineW[LineEnd-1], 0x20, 'H'); #endif - AttrLine[CursorX+1] = Attr.Attr; - AttrLine2[CursorX+1] = Attr.Attr2; - AttrLineFG[CursorX+1] = Attr.Fore; - AttrLineBG[CursorX+1] = Attr.Back; - } -#if 0 - /* begin - ishizaki */ - markURL(CursorX); - markURL(CursorX+1); - /* end - ishizaki */ + AttrLine[LineEnd] &= ~AttrKanji; +// CodeLine[LineEnd+1] = 0x20; +// AttrLine[LineEnd+1] &= ~AttrKanji; + extr = 1; + } + + if (!half_width) { + MoveLen = LineEnd - CursorX - 1; + if (MoveLen > 0) { + memmove(&CodeLine[CursorX+2], &CodeLine[CursorX], MoveLen); +#if UNICODE_INTERNAL_BUFF + memmoveW(&(CodeLineW[CursorX+2]), &(CodeLineW[CursorX]), MoveLen); #endif + memmove(&AttrLine[CursorX+2], &AttrLine[CursorX], MoveLen); + memmove(&AttrLine2[CursorX+2], &AttrLine2[CursorX], MoveLen); + memmove(&AttrLineFG[CursorX+2], &AttrLineFG[CursorX], MoveLen); + memmove(&AttrLineBG[CursorX+2], &AttrLineBG[CursorX], MoveLen); + } + } else { + MoveLen = LineEnd - CursorX; + if (MoveLen > 0) { + memmove(&CodeLine[CursorX+1], &CodeLine[CursorX], MoveLen); +#if UNICODE_INTERNAL_BUFF + memmoveW(&(CodeLineW[CursorX+1]), &(CodeLineW[CursorX]), MoveLen); +#endif + memmove(&AttrLine[CursorX+1], &AttrLine[CursorX], MoveLen); + memmove(&AttrLine2[CursorX+1], &AttrLine2[CursorX], MoveLen); + memmove(&AttrLineFG[CursorX+1], &AttrLineFG[CursorX], MoveLen); + memmove(&AttrLineBG[CursorX+1], &AttrLineBG[CursorX], MoveLen); + } + } - /* last char in current line is kanji first? */ - if ((AttrLine[LineEnd] & AttrKanji) != 0) { - /* then delete it */ - CodeLine[LineEnd] = 0x20; + CodeLine[CursorX] = b1; #if UNICODE_INTERNAL_BUFF - BuffSetChar(&CodeLineW[LineEnd], 0x20, 'H'); + BuffSetChar2(&CodeLineW[CursorX], u32, width_property, half_width, emoji); #endif - AttrLine[LineEnd] = CurCharAttr.Attr; - AttrLine2[LineEnd] = CurCharAttr.Attr2; - AttrLineFG[LineEnd] = CurCharAttr.Fore; - AttrLineBG[LineEnd] = CurCharAttr.Back; - } - - if (StrChangeCount==0) { - XStart = CursorX; - } - else { - XStart = StrChangeStart; - } - StrChangeCount = 0; - BuffUpdateRect(XStart, CursorY, LineEnd+extr, CursorY); - } else { - if ((Attr.AttrEx & AttrPadding) != 0) { - // \x8Bl\x82ߕ\xA8 - buff_char_t *p = &CodeLineW[CursorX]; - BuffSetChar(p, u32, 'H'); - p->Padding = TRUE; AttrLine[CursorX] = Attr.Attr; AttrLine2[CursorX] = Attr.Attr2; AttrLineFG[CursorX] = Attr.Fore; AttrLineBG[CursorX] = Attr.Back; - move_x = 1; - } else { - buff_char_t *p = NULL; // NULL\x82̂Ƃ\xAB\x81A\x91O\x82̕\xB6\x8E\x9A\x82͂Ȃ\xA2 - // \x91O\x82̕\xB6\x8E\x9A - if (CursorX >= 1 && CodeLineW[CursorX - 1].u32 != 0) { - p = &CodeLineW[CursorX - 1]; - } else if (CursorX >= 2 && CodeLineW[CursorX - 2].u32 != 0) { - p = &CodeLineW[CursorX - 2]; + if (!half_width && CursorX < LineEnd) { + CodeLine[CursorX+1] = 0; +#if UNICODE_INTERNAL_BUFF + BuffSetChar(&CodeLineW[CursorX + 1], 0, 'H'); +#endif + AttrLine[CursorX+1] = Attr.Attr; + AttrLine2[CursorX+1] = Attr.Attr2; + AttrLineFG[CursorX+1] = Attr.Fore; + AttrLineBG[CursorX+1] = Attr.Back; } +#if 0 + /* begin - ishizaki */ + markURL(CursorX); + markURL(CursorX+1); + /* end - ishizaki */ +#endif - if (UnicodeIsVariationSelector(u32) || - UnicodeIsCombiningCharacter(u32) || - (u32 == 0x200d) || - (p != NULL && p->u32_last == 0x200d)) - { - // Combining - // VariationSelector or - // CombiningCharacter or - // \x83[\x83\x8D\x95\x9D\x90ڍ\x87\x8Eq,ZERO WIDTH JOINER(ZWJ) (U+200d) or - // 1\x82O\x82\xAA ZWJ - move_x = 0; // \x83J\x81[\x83\\x83\x8B\x88ړ\xAE\x97\xCA=0 + /* last char in current line is kanji first? */ + if ((AttrLine[LineEnd] & AttrKanji) != 0) { + /* then delete it */ + CodeLine[LineEnd] = 0x20; +#if UNICODE_INTERNAL_BUFF + BuffSetChar(&CodeLineW[LineEnd], 0x20, 'H'); +#endif + AttrLine[LineEnd] = CurCharAttr.Attr; + AttrLine2[LineEnd] = CurCharAttr.Attr2; + AttrLineFG[LineEnd] = CurCharAttr.Fore; + AttrLineBG[LineEnd] = CurCharAttr.Back; + } - if (p == NULL) { - // \x91O\x82\xAA\x82Ȃ\xA2\x82̂ɂ\xAD\x82\xC1\x82\xAD\x95\xB6\x8E\x9A\x82\xAA\x8Fo\x82Ă\xAB\x82\xBD\x82Ƃ\xAB - // \x82Ƃ肠\x82\xA6\x82\xB8\x83X\x83y\x81[\x83X\x82ɂ\xAD\x82\xC1\x82\xAF\x82\xE9 - p = &CodeLineW[CursorX]; - BuffSetChar(p, ' ', 'H'); - } - - // \x91O\x82̕\xB6\x8E\x9A\x82ɂ\xAD\x82\xC1\x82\xAF\x82\xE9 - BuffAddChar(p, u32); -#if 0 + if (StrChangeCount==0) { + XStart = CursorX; + } + else { + XStart = StrChangeStart; + } + StrChangeCount = 0; + BuffUpdateRect(XStart, CursorY, LineEnd+extr, CursorY); + } else { + if ((Attr.AttrEx & AttrPadding) != 0) { + // \x8Bl\x82ߕ\xA8 + buff_char_t *p = &CodeLineW[CursorX]; + BuffSetChar(p, u32, 'H'); + p->Padding = TRUE; AttrLine[CursorX] = Attr.Attr; AttrLine2[CursorX] = Attr.Attr2; AttrLineFG[CursorX] = Attr.Fore; AttrLineBG[CursorX] = Attr.Back; -#endif + move_x = 1; } else { // \x90V\x82\xB5\x82\xA2\x95\xB6\x8E\x9A\x92lj\xC1 - char width_property; - char emoji; - BOOL half_width = BuffIsHalfWidthFromCode(&ts, u32, &width_property, &emoji); if (half_width) { // \x94\xBC\x8Ap\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA4 move_x = 1; @@ -3025,163 +3041,163 @@ } } } - } - if (StrChangeCount==0) { - StrChangeStart = CursorX; - } - if (move_x == 0) { - if (StrChangeCount == 0) { - StrChangeCount = 1; + if (StrChangeCount==0) { + StrChangeStart = CursorX; } - } else if (move_x == 1) { - // \x94\xBC\x8Ap - StrChangeCount = StrChangeCount + 1; - } else /*if (move_x == 2)*/ { - // \x91S\x8Ap - StrChangeCount = StrChangeCount + 2; - } + if (move_x == 0) { + if (StrChangeCount == 0) { + StrChangeCount = 1; + } + } else if (move_x == 1) { + // \x94\xBC\x8Ap + StrChangeCount = StrChangeCount + 1; + } else /*if (move_x == 2)*/ { + // \x91S\x8Ap + StrChangeCount = StrChangeCount + 2; + } - // URL\x82̌\x9F\x8Fo - // DEL\x8E\x9E\x82\xC9URL\x82\xBE\x82\xC1\x82\xBD\x82\xE7URL\x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x8E\xE6\x82\xC1\x82Ă\xAB\x82Č\x9F\x8D\xB8\x82\xB7\x82\xE9 + // URL\x82̌\x9F\x8Fo + // DEL\x8E\x9E\x82\xC9URL\x82\xBE\x82\xC1\x82\xBD\x82\xE7URL\x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x8E\xE6\x82\xC1\x82Ă\xAB\x82Č\x9F\x8D\xB8\x82\xB7\x82\xE9 #if 0 - { - int x = CursorX; - BOOL pass = FALSE; + { + int x = CursorX; + BOOL pass = FALSE; - // TODO 1\x82\xE3\x82\xEB\x82\xE0URL - // 1\x82O\x82̃L\x83\x83\x83\x89\x83N\x83^\x82\xAAURL? - // \x88\xEA\x94ԍ\xB6\x82̎\x9E\x82́A\x91O\x82̍s\x82\xA9\x82\xE7\x8Cp\x91\xB1\x82\xB5\x82Ă\xA2\x82āA\x91O\x82̍s\x82̍ŌオURL\x82\xBE\x82\xC1\x82\xBD\x8E\x9E - if ((x == 0 && - ((AttrLine[0] & AttrLineContinued) != 0) && - ((AttrBuff[(PageStart + (CursorY-1)) * NumOfColumns + NumOfColumns - 1] & AttrURL) != 0)) || - (x >= 1 && AttrLine[x-1] & AttrURL)) { - if (isURLchar(u32)) { - // URL\x82\xF0\x90L\x82\xB7 - AttrLine[x] |= AttrURL; - pass = TRUE; + // TODO 1\x82\xE3\x82\xEB\x82\xE0URL + // 1\x82O\x82̃L\x83\x83\x83\x89\x83N\x83^\x82\xAAURL? + // \x88\xEA\x94ԍ\xB6\x82̎\x9E\x82́A\x91O\x82̍s\x82\xA9\x82\xE7\x8Cp\x91\xB1\x82\xB5\x82Ă\xA2\x82āA\x91O\x82̍s\x82̍ŌオURL\x82\xBE\x82\xC1\x82\xBD\x8E\x9E + if ((x == 0 && + ((AttrLine[0] & AttrLineContinued) != 0) && + ((AttrBuff[(PageStart + (CursorY-1)) * NumOfColumns + NumOfColumns - 1] & AttrURL) != 0)) || + (x >= 1 && AttrLine[x-1] & AttrURL)) { + if (isURLchar(u32)) { + // URL\x82\xF0\x90L\x82\xB7 + AttrLine[x] |= AttrURL; + pass = TRUE; + } } - } - // \x83J\x81[\x83\\x83\x8B\x88ʒu\x82\xAAURL - if ((AttrLine[x] & AttrURL) != 0) { - pass = TRUE; // \x82\xE2\x82邱\x82ƂȂ\xB5 - } + // \x83J\x81[\x83\\x83\x8B\x88ʒu\x82\xAAURL + if ((AttrLine[x] & AttrURL) != 0) { + pass = TRUE; // \x82\xE2\x82邱\x82ƂȂ\xB5 + } - if (!pass) { - // '/' \x82\xAA\x93\xFC\x97͂\xB3\x82ꂽ\x82璲\x82n\x82߂\xE9 - if (u32 == '/') { - if (MatchString(x-2, PageStart+CursorY, L"://", TRUE)) { - pass = FALSE; - } + if (!pass) { + // '/' \x82\xAA\x93\xFC\x97͂\xB3\x82ꂽ\x82璲\x82n\x82߂\xE9 + if (u32 == '/') { + if (MatchString(x-2, PageStart+CursorY, L"://", TRUE)) { + pass = FALSE; + } #if 0 - if ((CodeLineW[x-2].u32 == ':') && (CodeLineW[x-2].CombinationCharCount16 == 0) && - (CodeLineW[x-1].u32 == '/') && (CodeLineW[x-1].CombinationCharCount16 == 0) && - (CodeLineW[x-0].u32 == '/') && (CodeLineW[x-0].CombinationCharCount16 == 0)) - { // "://"\x82\xAA\x93\xFC\x97͂\xB3\x82ꂽ - pass = FALSE; + if ((CodeLineW[x-2].u32 == ':') && (CodeLineW[x-2].CombinationCharCount16 == 0) && + (CodeLineW[x-1].u32 == '/') && (CodeLineW[x-1].CombinationCharCount16 == 0) && + (CodeLineW[x-0].u32 == '/') && (CodeLineW[x-0].CombinationCharCount16 == 0)) + { // "://"\x82\xAA\x93\xFC\x97͂\xB3\x82ꂽ + pass = FALSE; + } else { + pass = TRUE; + } +#endif } else { pass = TRUE; } -#endif - } else { - pass = TRUE; } - } - if (!pass) { - // \x96{\x8Ai\x93I\x82ɒT\x82\xB7 - static const struct schemes_t { - const wchar_t *str; - int len; - } schemes[] = { - { L"https://", 8 }, - { L"http://", 7}, - { L"sftp://", 7}, - { L"tftp://", 7}, - { L"news://", 7}, - { L"ftp://", 6}, - { L"mms://", 6}, - }; - int i; - for (i = 0; i < _countof(schemes); i++) { - const wchar_t *prefix = schemes[i].str; - const int len = schemes[i].len - 1; - int sx = x - len; - int sy = PageStart + CursorY; - int ey = sy; - if (x < len) { - // \x92Z\x82\xA2 - if ((AttrLine[0] & AttrLineContinued) == 0) { - // \x91O\x82̍s\x82ƘA\x8C\x8B\x82\xB5\x82Ă\xA2\x82Ȃ\xA2 - continue; + if (!pass) { + // \x96{\x8Ai\x93I\x82ɒT\x82\xB7 + static const struct schemes_t { + const wchar_t *str; + int len; + } schemes[] = { + { L"https://", 8 }, + { L"http://", 7}, + { L"sftp://", 7}, + { L"tftp://", 7}, + { L"news://", 7}, + { L"ftp://", 6}, + { L"mms://", 6}, + }; + int i; + for (i = 0; i < _countof(schemes); i++) { + const wchar_t *prefix = schemes[i].str; + const int len = schemes[i].len - 1; + int sx = x - len; + int sy = PageStart + CursorY; + int ey = sy; + if (x < len) { + // \x92Z\x82\xA2 + if ((AttrLine[0] & AttrLineContinued) == 0) { + // \x91O\x82̍s\x82ƘA\x8C\x8B\x82\xB5\x82Ă\xA2\x82Ȃ\xA2 + continue; + } + // \x91O\x82̍s\x82\xA9\x82猟\x8D\x{142A42}\xAF\x82\xE9 + sx = NumOfColumns + sx; + sy = PageStart + CursorY - 1; } - // \x91O\x82̍s\x82\xA9\x82猟\x8D\x{142A42}\xAF\x82\xE9 - sx = NumOfColumns + sx; - sy = PageStart + CursorY - 1; - } - // \x83}\x83b\x83`\x82\xB7\x82邩? - int match_x, match_y; - if (BuffGetMatchPosFromString(sx, sy, x, ey, prefix, &match_x, &match_y)) { - // \x83}\x83b\x83`\x82\xB5\x82\xBD\x82̂\xC5URL\x91\xAE\x90\xAB\x82\xF0\x95t\x82\xAF\x82\xE9 - if (sy == ey) { - int i; - for (i = 0; i <= len; i++) { - AttrLine[sx + i] |= AttrURL; + // \x83}\x83b\x83`\x82\xB7\x82邩? + int match_x, match_y; + if (BuffGetMatchPosFromString(sx, sy, x, ey, prefix, &match_x, &match_y)) { + // \x83}\x83b\x83`\x82\xB5\x82\xBD\x82̂\xC5URL\x91\xAE\x90\xAB\x82\xF0\x95t\x82\xAF\x82\xE9 + if (sy == ey) { + int i; + for (i = 0; i <= len; i++) { + AttrLine[sx + i] |= AttrURL; + } + if (StrChangeStart > sx) { + StrChangeStart = sx; + StrChangeCount += len; + } } - if (StrChangeStart > sx) { - StrChangeStart = sx; - StrChangeCount += len; - } - } - else { - LONG TmpPtr = GetLinePtr(sy); - int xx = sx; - size_t left = len + 1; - while (left > 0) { - AttrBuff[TmpPtr + xx] |= AttrURL; - xx++; - if (xx == NumOfColumns) { - int draw_x = sx; - int draw_y = CursorY - 1; - if (IsLineVisible(&draw_x, &draw_y)) { - BuffDrawLineI(draw_x, draw_y, PageStart+CursorY-1, sx, NumOfColumns-1); + else { + LONG TmpPtr = GetLinePtr(sy); + int xx = sx; + size_t left = len + 1; + while (left > 0) { + AttrBuff[TmpPtr + xx] |= AttrURL; + xx++; + if (xx == NumOfColumns) { + int draw_x = sx; + int draw_y = CursorY - 1; + if (IsLineVisible(&draw_x, &draw_y)) { + BuffDrawLineI(draw_x, draw_y, PageStart+CursorY-1, sx, NumOfColumns-1); + } + TmpPtr = NextLinePtr(TmpPtr); + xx = 0; } - TmpPtr = NextLinePtr(TmpPtr); - xx = 0; + left--; } - left--; + StrChangeStart = 0; + StrChangeCount = xx; } - StrChangeStart = 0; - StrChangeCount = xx; + break; } - break; } } } - } #else - { - mark_url_w(CursorX, CursorY); - } + { + mark_url_w(CursorX, CursorY); + } #endif // markURL(CursorX); // markURL(CursorX+1); - /* end - ishizaki */ + /* end - ishizaki */ #if 0 - { - char ba[128]; - memcpy(ba, &CodeLine[0], _countof(ba)-1); - ba[127] = 0; - OutputDebugPrintf("A '%s'\n", ba); - wchar_t bb[128]; - memcpy(bb, &CodeLineW[0], _countof(bb)-1); - bb[127] = 0; - OutputDebugPrintfW(L"W '%s'\n", bb); + { + char ba[128]; + memcpy(ba, &CodeLine[0], _countof(ba)-1); + ba[127] = 0; + OutputDebugPrintf("A '%s'\n", ba); + wchar_t bb[128]; + memcpy(bb, &CodeLineW[0], _countof(bb)-1); + bb[127] = 0; + OutputDebugPrintfW(L"W '%s'\n", bb); + } +#endif } -#endif } #if 0 Modified: branches/unicode_buf/teraterm/teraterm/vtterm.c =================================================================== --- branches/unicode_buf/teraterm/teraterm/vtterm.c 2019-09-12 16:00:23 UTC (rev 8135) +++ branches/unicode_buf/teraterm/teraterm/vtterm.c 2019-09-12 16:00:34 UTC (rev 8136) @@ -5670,7 +5670,7 @@ CarriageReturn(FALSE); LineFeed(LF,FALSE); CharAttrTmp.Attr |= AttrLineContinued; - CharAttrTmp.Attr = CharAttrTmp.AttrEx; + CharAttrTmp.AttrEx = CharAttrTmp.Attr; } #if 0 else if (CursorX > LineEnd - 1) { @@ -5738,6 +5738,7 @@ } else if (r == 2) { // \x91S\x8Ap(2\x83Z\x83\x8B) if (CursorX + 1 == CursorRightM || CursorX + 1 >= NumOfColumns - 1) { + MoveRight(); // \x91S\x8Ap\x82̉E\x91\xA4\x82ɃJ\x81[\x83\\x83\x8B\x88ړ\xAE UpdateStr(); Wrap = AutoWrapMode; } else {