[Ttssh2-commit] [8431] 制御シーケンス/制御文字列形式の入力を無視するようにした

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2019年 12月 7日 (土) 08:06:50 JST


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>


Ttssh2-commit メーリングリストの案内
Back to archive index