[Ttssh2-commit] [9152] altを押しながらのキー入力をUnicode対応にした

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2021年 2月 11日 (木) 00:10:58 JST


Revision: 9152
          https://osdn.net/projects/ttssh2/scm/svn/commits/9152
Author:   zmatsuo
Date:     2021-02-11 00:10:58 +0900 (Thu, 11 Feb 2021)
Log Message:
-----------
altを押しながらのキー入力をUnicode対応にした

Modified Paths:
--------------
    trunk/teraterm/teraterm/vtwin.cpp

-------------- next part --------------
Modified: trunk/teraterm/teraterm/vtwin.cpp
===================================================================
--- trunk/teraterm/teraterm/vtwin.cpp	2021-02-10 15:10:43 UTC (rev 9151)
+++ trunk/teraterm/teraterm/vtwin.cpp	2021-02-10 15:10:58 UTC (rev 9152)
@@ -2544,10 +2544,6 @@
 
 void CVTWindow::OnSysChar(WPARAM nChar, UINT nRepCnt, UINT nFlags)
 {
-	char e = ESC;
-	char Code;
-	unsigned int i;
-
 #ifdef WINDOW_MAXMIMUM_ENABLED
 	// ALT + x\x82\xF0\x89\x9F\x89\xBA\x82\xB7\x82\xE9\x82\xC6 WM_SYSCHAR \x82\xAA\x94\xF2\x82\xF1\x82ł\xAD\x82\xE9\x81B
 	// ALT + Enter\x82ŃE\x83B\x83\x93\x83h\x83E\x82̍ő剻 (2005.4.24 yutaka)
@@ -2561,31 +2557,44 @@
 #endif
 
 	if (MetaKey(ts.MetaKey)) {
-		if (!KeybEnabled || (TalkStatus!=IdTalkKeyb)) return;
-		Code = nChar;
-		for (i=1 ; i<=nRepCnt ; i++) {
+		if (!KeybEnabled || (TalkStatus != IdTalkKeyb))
+			return;
+		char Code = nChar;
+		wchar_t u16;
+		if (ts.Meta8Bit != IdMeta8BitRaw) {
+			const char mb_str[2] = {(char)nChar | 0x80, 0};
+			unsigned int u32;
+			size_t mb_len = MBCPToUTF32(mb_str, 1, CP_ACP, &u32);
+			if (mb_len == 0) {
+				return;
+			}
+			u16 = (wchar_t)u32;
+		}
+		for (unsigned int i = 1; i <= nRepCnt; i++) {
 			switch (ts.Meta8Bit) {
-			  case IdMeta8BitRaw:
-				Code |= 0x80;
-				CommBinaryBuffOut(&cv, &Code, 1);
-				if (ts.LocalEcho) {
-					CommBinaryEcho(&cv, &Code, 1);
+				case IdMeta8BitRaw:
+					Code |= 0x80;
+					CommBinaryBuffOut(&cv, &Code, 1);
+					if (ts.LocalEcho) {
+						CommBinaryEcho(&cv, &Code, 1);
+					}
+					break;
+				case IdMeta8BitText:
+					Code |= 0x80;
+					CommTextOutW(&cv, &u16, 1);
+					if (ts.LocalEcho) {
+						CommTextEchoW(&cv, &u16, 1);
+					}
+					break;
+				default: {
+					const wchar_t e = ESC;
+					CommTextOutW(&cv, &e, 1);
+					CommTextOutW(&cv, &u16, 1);
+					if (ts.LocalEcho) {
+						CommTextEchoW(&cv, &e, 1);
+						CommTextEchoW(&cv, &u16, 1);
+					}
 				}
-				break;
-			  case IdMeta8BitText:
-				Code |= 0x80;
-				CommTextOut(&cv, &Code, 1);
-				if (ts.LocalEcho) {
-					CommTextEcho(&cv, &Code, 1);
-				}
-				break;
-			  default:
-				CommTextOut(&cv, &e, 1);
-				CommTextOut(&cv, &Code, 1);
-				if (ts.LocalEcho) {
-					CommTextEcho(&cv, &e, 1);
-					CommTextEcho(&cv, &Code, 1);
-				}
 			}
 		}
 		return;


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