• R/O
  • SSH
  • HTTPS

ttssh2: コミット


コミットメタ情報

リビジョン7083 (tree)
日時2018-03-29 23:58:16
作者doda

ログメッセージ

DECCARA / DECRARA の対象領域が間違っているのを修正 #38168

対象領域の先頭が漢字の 2 バイト目だった(正確には前の文字が
漢字の 1 バイト目だった)時に 1 バイト目も対象領域に含めるよう
処理を行っていたが、対象領域を広げる必要が無い時にカウンタを
進め忘れていた為、常に一つ前のセルも対象領域に含めてしまっていた。

変更サマリ

差分

--- trunk/tests/#38168-deccara-range.sh (revision 0)
+++ trunk/tests/#38168-deccara-range.sh (revision 7083)
@@ -0,0 +1,63 @@
1+#!/bin/sh
2+#
3+# DECCARA / DECRARA 対象領域確認スクリプト
4+# 同じ数字は同じ色 or 属性となるのが正しい。
5+# 画面の再描画前後で表示が変わらないのが正しい。
6+#
7+
8+printf "\033[*2x\033[2J"
9+
10+seqs=$(seq 9)
11+
12+for i in $seqs; do
13+ xend=$((21 - $i))
14+ yend=$((20 - $i))
15+ char=$((47 + $i))
16+
17+ printf '\033[%d;%d;%d;%d;%d$x' $char $i $i $yend $xend
18+done
19+
20+for i in $seqs; do
21+ xend=$((21 - $i))
22+ yend=$((20 - $i))
23+ color=$((40 + $i % 8))
24+ printf '\033[%d;%d;%d;%d;%d$r' $i $i $yend $xend $color
25+done
26+
27+
28+for i in $seqs; do
29+ xstart=$(($i + 40))
30+ xend=$((61 - $i))
31+ yend=$((20 - $i))
32+ char=$((47 + $i))
33+
34+ printf '\033[%d;%d;%d;%d;%d$x' $char $i $xstart $yend $xend
35+done
36+
37+for i in $seqs; do
38+ xstart=$(($i + 40))
39+ xend=$((61 - $i))
40+ yend=$((20 - $i))
41+
42+ case $i in
43+ 1) attr="1;7";;
44+ 2) attr="1;4;7";;
45+ 3) attr="4;5;7";;
46+ 4) attr="1;5;7";;
47+ 5) attr="1;4;7";;
48+ 6) attr="4;5;7";;
49+ 7) attr="1;5;7";;
50+ 8) attr="1;4;7";;
51+ 9) attr="4;5;7";;
52+ esac
53+
54+ color=$((40 + $i % 8))
55+ printf '\033[%d;%d;%d;%d;%s$t' $i $xstart $yend $xend $attr
56+done
57+
58+printf "\033[20;7HDECCARA\e[47GDECRARA\n\033[0*x"
59+
60+sleep 1
61+
62+# 画面再描画
63+printf "\033[7t"
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
--- trunk/teraterm/teraterm/buffer.c (revision 7082)
+++ trunk/teraterm/teraterm/buffer.c (revision 7083)
@@ -1207,14 +1207,12 @@
12071207 AttrBuff[j] = AttrBuff2[j] & ~mask->Attr2 | attr->Attr2;
12081208 AttrBuffFG[j] = attr->Fore;
12091209 AttrBuffBG[j] = attr->Back;
1210- j++;
12111210 }
1212- while (j < Ptr+XStart+C) {
1211+ while (++j < Ptr+XStart+C) {
12131212 AttrBuff[j] = AttrBuff[j] & ~mask->Attr | attr->Attr;
12141213 AttrBuff2[j] = AttrBuff2[j] & ~mask->Attr2 | attr->Attr2;
12151214 AttrBuffFG[j] = attr->Fore;
12161215 AttrBuffBG[j] = attr->Back;
1217- j++;
12181216 }
12191217 if (XStart+C<NumOfColumns && (AttrBuff[j-1] & AttrKanji)) {
12201218 AttrBuff[j] = AttrBuff[j] & ~mask->Attr | attr->Attr;
@@ -1229,10 +1227,10 @@
12291227 for (i=YStart; i<=YEnd; i++) {
12301228 j = Ptr+XStart-1;
12311229 if (XStart>0 && (AttrBuff[j] & AttrKanji)) {
1232- AttrBuff[j++] ^= attr->Attr;
1230+ AttrBuff[j] ^= attr->Attr;
12331231 }
1234- while (j < Ptr+XStart+C) {
1235- AttrBuff[j++] ^= attr->Attr;
1232+ while (++j < Ptr+XStart+C) {
1233+ AttrBuff[j] ^= attr->Attr;
12361234 }
12371235 if (XStart+C<NumOfColumns && (AttrBuff[j-1] & AttrKanji)) {
12381236 AttrBuff[j] ^= attr->Attr;
--- trunk/doc/en/html/about/history.html (revision 7082)
+++ trunk/doc/en/html/about/history.html (revision 7083)
@@ -36,6 +36,7 @@
3636 <li>Bug fixes
3737 <ul>
3838 <li>When the mouse tracking is enabled, the menu can not be selected after clicking the screen.</li>
39+ <li>The target area of the DECCARA (Change Attributes in Rectangular Area) and DECRARA (Reverse Attributes in Rectangular Area) control sequence is invalid.</li>
3940 </ul>
4041 </li>
4142 </ul>
--- trunk/doc/ja/html/about/history.html (revision 7082)
+++ trunk/doc/ja/html/about/history.html (revision 7083)
@@ -36,6 +36,7 @@
3636 <li>バグ修正
3737 <ul>
3838 <li>マウストラッキング有効時、画面クリック後にメニューが使えなくなる問題を修正した。</li>
39+ <li>DECCARA(矩形領域属性変更)、および DECRARA(矩形領域属性反転)制御シーケンスの対象領域が正しくない問題を修正した。</li>
3940 </ul>
4041 </li>
4142 </ul>
旧リポジトリブラウザで表示