Revision: 8431 https://osdn.net/projects/ttssh2/scm/svn/commits/8431 Author: doda Date: 2019-12-07 08:06:49 +0900 (Sat, 07 Dec 2019) Log Message: ----------- 制御シーケンス/制御文字列形式の入力を無視するようにした Ticket: #39824 問題: TTXttyplay で Vim の編集画面を再生した時に、再生が Pause されたり 再生速度が変わったりする。 原因: 端末への問い合わせへの応答をキー入力として扱っていた為。 応答に含まれる P や + 等に反応していた。 対処: 制御シーケンス/制御文字列形式の入力を無視するようにした。 Ticket Links: ------------ https://osdn.net/projects/ttssh2/tracker/detail/39824 Modified Paths: -------------- trunk/TTXSamples/TTXttyrec/TTXttyplay.c trunk/doc/en/html/about/history.html trunk/doc/ja/html/about/history.html -------------- next part -------------- Modified: trunk/TTXSamples/TTXttyrec/TTXttyplay.c =================================================================== --- trunk/TTXSamples/TTXttyrec/TTXttyplay.c 2019-12-04 10:31:42 UTC (rev 8430) +++ trunk/TTXSamples/TTXttyrec/TTXttyplay.c 2019-12-06 23:06:49 UTC (rev 8431) @@ -24,6 +24,14 @@ static HANDLE hInst; /* Instance handle of TTX*.DLL */ +enum ParseMode { + MODE_FIRST, + MODE_ESC, + MODE_CSI, + MODE_STRING, + MODE_STR_ESC +}; + struct recheader { struct timeval tv; int len; @@ -241,6 +249,7 @@ char tmpbuff[2048]; unsigned int spos, dpos; char *ptr; + enum ParseMode mode = MODE_FIRST; BOOL speed_changed = FALSE; ptr = (char *)buff; @@ -247,40 +256,85 @@ *wbytes = 0; for (spos = dpos = 0; spos < len; spos++, ptr++) { - switch (*ptr) { - case '1': - pvar->speed = 0; - speed_changed = TRUE; - break; - case 'f': - case 'F': - case '+': - if (pvar->speed < 8) { - pvar->speed++; + switch (mode) { + case MODE_FIRST: + switch (*ptr) { + case '1': + pvar->speed = 0; speed_changed = TRUE; + break; + case 'f': + case 'F': + case '+': + if (pvar->speed < 8) { + pvar->speed++; + speed_changed = TRUE; + } + break; + case 's': + case 'S': + case '-': + if (pvar->speed > -8) { + pvar->speed--; + speed_changed = TRUE; + } + break; + case 'p': + case 'P': + pvar->pause = !(pvar->pause); + speed_changed = TRUE; + break; + case ' ': + case '.': + pvar->wait.tv_sec = 0; + break; + case ESC: + mode = MODE_ESC; + break; + default: + if (dpos < sizeof(tmpbuff)) { + tmpbuff[dpos++] = *ptr; + } } break; - case 's': - case 'S': - case '-': - if (pvar->speed > -8) { - pvar->speed--; - speed_changed = TRUE; + case MODE_ESC: + switch (*ptr) { + case '[': + mode = MODE_CSI; + break; + case 'P': // DCS + case ']': // OSC + case 'X': // SOS + case '^': // PM + case '_': // APC + mode = MODE_STRING; + break; + default: + mode = MODE_FIRST; + break; } break; - case 'p': - case 'P': - pvar->pause = !(pvar->pause); - speed_changed = TRUE; + case MODE_CSI: + if (*ptr < ' ' || *ptr > '?') { + mode = MODE_FIRST; + } break; - case ' ': - case '.': - pvar->wait.tv_sec = 0; + case MODE_STRING: + if (*ptr == ESC) { + mode = MODE_STR_ESC; + } + else if (*ptr == BEL) { + mode = MODE_FIRST; + } break; - default: - if (dpos < sizeof(tmpbuff)) { - tmpbuff[dpos++] = *ptr; + case MODE_STR_ESC: + if (*ptr == '\\') { + mode = MODE_FIRST; } + else if (*ptr != ESC) { + mode = MODE_STRING; + } + break; } } Modified: trunk/doc/en/html/about/history.html =================================================================== --- trunk/doc/en/html/about/history.html 2019-12-04 10:31:42 UTC (rev 8430) +++ trunk/doc/en/html/about/history.html 2019-12-06 23:06:49 UTC (rev 8431) @@ -101,6 +101,7 @@ <li>upgraded TTSSH to <a href="#ttssh_2.91">2.91</a>.</li> <li>upgraded TTProxy to <a href="#ttproxy_1.0.0.26">1.0.0.26</a>.</li> <li>upgraded TTXResizeMenu Plug-in to <a href="#resizemenu_1.06">1.06</a>.</li> + <li>upgraded TTXttyrec Plug-in to <a href="#ttyrec_1.04">1.04</a></li> <li>Changed e-mail address of <a href="contacts.html">Contacting the author</a>.</li> </ul> </li> @@ -5225,6 +5226,11 @@ </ul> <h2 id="ttyrec">TTXttyrec</h2> +<h3 id="ttyrec_1.04">2019.12.xx (Ver 1.04)</h3> +<ul class="history"> + <li>Bug fix: Unexpected pauses and playback speed changes occur when replaying the editing by Vim.</li> +</ul> + <h3 id="ttyrec_1.03">2017.02.28 (Ver 1.03)</h3> <ul class="history"> <li>added [Replay again] entry under [File] menu that can replay again after one relaying.</li> Modified: trunk/doc/ja/html/about/history.html =================================================================== --- trunk/doc/ja/html/about/history.html 2019-12-04 10:31:42 UTC (rev 8430) +++ trunk/doc/ja/html/about/history.html 2019-12-06 23:06:49 UTC (rev 8431) @@ -101,6 +101,7 @@ <li><a href="#ttssh_2.91">TTSSH(2.91)</a>\x82֍\xB7\x82\xB5\x91ւ\xA6\x82\xBD\x81B</li> <li><a href="#ttproxy_1.0.0.26">TTProxy(1.0.0.26)</a>\x82֍\xB7\x82\xB5\x91ւ\xA6\x82\xBD\x81B</li> <li><a href="#resizemenu_1.06">TTXResizeMenu Plugin(1.06)</a>\x82֍\xB7\x82\xB5\x91ւ\xA6\x82\xBD\x81B</li> + <li><a href="#ttyrec_1.04">TTXttyrec Plugin(1.04)</a>\x82֍\xB7\x82\xB5\x91ւ\xA6\x82\xBD\x81B</li> <li><a href="contacts.html">\x8D\xEC\x8E҂ւ̘A\x97\x8D</a>\x82̃\x81\x81[\x83\x8B\x83A\x83h\x83\x8C\x83X\x82\xF0\x95ύX\x82\xB5\x82\xBD\x81B</li> </ul> </li> @@ -5232,6 +5233,11 @@ </ul> <h2 id="ttyrec">TTXttyrec</h2> +<h3 id="ttyrec_1.04">2019.12.xx (Ver 1.04)</h3> +<ul class="history"> + <li>Vim \x82̕ҏW\x89\xE6\x96ʂ\xF0\x8DĐ\xB6\x82\xB5\x82\xBD\x8E\x9E\x81A\x97\\x8A\xFA\x82\xB5\x82Ȃ\xA2 Pause \x82\xE2\x8DĐ\xB6\x91\xAC\x93x\x82̕ύX\x82\xAA\x8BN\x82\xB1\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li> +</ul> + <h3 id="ttyrec_1.03">2017.02.28 (Ver 1.03)</h3> <ul class="history"> <li>\x8DĐ\xB6\x8FI\x97\xB9\x8C\xE3\x81A\x8Dēx\x8DĐ\xB6\x82\xB7\x82\xE9\x88ׂ\xCC [Replay again] \x82\xF0 [File] \x83\x81\x83j\x83\x85\x81[\x82ɒlj\xC1\x82\xB7\x82\xE9\x82悤\x82ɂ\xB5\x82\xBD\x81B</li>