[ttssh2-commit] [9521] cyglaunch から msys2term を起動できるようにした

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2021年 11月 10日 (水) 22:02:18 JST


Revision: 9521
          https://osdn.net/projects/ttssh2/scm/svn/commits/9521
Author:   zmatsuo
Date:     2021-11-10 22:02:18 +0900 (Wed, 10 Nov 2021)
Log Message:
-----------
cyglaunch から msys2term を起動できるようにした

- cyglaunch に -msys2 オプションを追加

Modified Paths:
--------------
    trunk/cygwin/README.md
    trunk/cygwin/cyglaunch/README.md
    trunk/cygwin/cyglaunch/cyglaunch.c

Added Paths:
-----------
    trunk/cygwin/cyglaunch/cygterm_here_reg_sample.txt

-------------- next part --------------
Modified: trunk/cygwin/README.md
===================================================================
--- trunk/cygwin/README.md	2021-11-10 13:02:08 UTC (rev 9520)
+++ trunk/cygwin/README.md	2021-11-10 13:02:18 UTC (rev 9521)
@@ -1,7 +1,7 @@
 # cygwin に関連するプログラムなど
 
 - cyglaunch
-  - cygterm を実行するプログラム
+  - cygterm(または msys2term) を実行するプログラム
 - cygterm
   - cygwin(msys2)のシェルとTera Termの橋渡しをするプログラム
   - cygwin用64bit, 32bit, msys2用(msys2term) をビルド可能

Modified: trunk/cygwin/cyglaunch/README.md
===================================================================
--- trunk/cygwin/cyglaunch/README.md	2021-11-10 13:02:08 UTC (rev 9520)
+++ trunk/cygwin/cyglaunch/README.md	2021-11-10 13:02:18 UTC (rev 9521)
@@ -1,6 +1,34 @@
 # cyglaunch
 
-- cygterm を起動するプログラム
-- cyglaunch は普通のexeファイル
-  - cygwin上で動作する必要はない
-  - Visual Studio で普通にビルドできる
+cygterm を起動するプログラム
+
+## コマンドラインオプション
+
+cyglaunch で解釈されない引数は cygterm(又は msys2term)へ渡される
+
+-msys2
+    cygterm ではなく msys2term を起動する
+    次のオプションを付けることで msys2の環境を設定できる
+
+    -v MSYSTEM=MSYS
+        msys
+    -v MSYSTEM=MINGW32
+        mingw32
+    -v MSYSTEM=MINGW64
+        mingw64
+
+    msys2の起動については次のURLを参照
+    https://www.msys2.org/wiki/Launchers/
+
+## from explorer
+
+レジストリに設定することで、エクスプローラーのコンテキストメニューからターミナルをオープンできる
+
+cygterm_here_reg_sample.txt 参照
+
+## 歴史
+
+- cyglaunch は通常のexeファイル
+- Visual Studio で普通にビルドできる
+- cygwin上で動作する必要はない
+- 従来は cygterm フォルダに存在し MinGW でビルドされていた

Modified: trunk/cygwin/cyglaunch/cyglaunch.c
===================================================================
--- trunk/cygwin/cyglaunch/cyglaunch.c	2021-11-10 13:02:08 UTC (rev 9520)
+++ trunk/cygwin/cyglaunch/cyglaunch.c	2021-11-10 13:02:18 UTC (rev 9521)
@@ -37,6 +37,7 @@
 
 #include "ttlib.h"
 #include "asprintf.h"
+#include "win32helper.h"
 #include "cyglib.h"
 
 #define Section L"Tera Term"
@@ -48,7 +49,7 @@
 {
 	wchar_t *HomeDir;
 	wchar_t *teraterm_ini;
-	wchar_t CygwinDir[256];
+	wchar_t *CygwinDir;
 
 	HomeDir = GetHomeDirW(NULL);
 	teraterm_ini = NULL;
@@ -56,14 +57,11 @@
 	free(HomeDir);
 
 	// Cygwin install path
- 	GetPrivateProfileStringW(Section, L"CygwinDirectory", L"",
-							 CygwinDir, _countof(CygwinDir), teraterm_ini);
+ 	hGetPrivateProfileStringW(Section, L"CygwinDirectory", L"",
+							  teraterm_ini, &CygwinDir);
 	free(teraterm_ini);
 
-	if (CygwinDir[0] == 0) {
-		return NULL;
-	}
-	return _wcsdup(CygwinDir);
+	return CygwinDir;
 }
 
 int wmain(int argc, wchar_t *argv[])
@@ -71,8 +69,8 @@
 	wchar_t *CygwinDir;
 	wchar_t *Cmdline;
 	int i;
-	BOOL d_opt=FALSE;
 	DWORD e;
+	BOOL msys2term = FALSE;
 
 	setlocale(LC_ALL, "");
 
@@ -82,16 +80,21 @@
 		if (i != 1) {
 			awcscat(&Cmdline, L" ");
 		}
-		if (d_opt && wcsncmp(L"\"\\\\", argv[i], 3) == 0) {
-			argv[i][1] = '/';
-			argv[i][2] = '/';
+		if (wcscmp(argv[i], L"-d") == 0 && *(argv+1) != NULL) {
+			i++;
+			if (wcsncmp(L"\"\\\\", argv[i], 3) == 0) {
+				// -d "\\path\..." \x82\xF0\x8F\x91\x82\xAB\x8A\xB7\x82\xA6
+				argv[i][1] = '/';
+				argv[i][2] = '/';
+			}
+			awcscat(&Cmdline, L"-d ");
+			awcscat(&Cmdline, argv[i]);
 		}
-		awcscat(&Cmdline, argv[i]);
-		if (wcscmp(argv[i], L"-d") == 0) {
-			d_opt = TRUE;
+		else if (wcscmp(argv[i], L"-msys2") == 0) {
+			msys2term = TRUE;
 		}
 		else {
-			d_opt = FALSE;
+			awcscat(&Cmdline, argv[i]);
 		}
 	}
 
@@ -99,7 +102,13 @@
 	CygwinDir = GetCygwinDir();
 
 	// cygterm\x82\xF0\x8E\xC0\x8Ds\x82\xB7\x82\xE9
-	e = CygwinConnect(CygwinDir, Cmdline);
+	if (msys2term) {
+		e = Msys2Connect(CygwinDir, Cmdline);
+	}
+	else {
+		e = CygwinConnect(CygwinDir, Cmdline);
+	}
+
 	switch(e) {
 	case NO_ERROR:
 		break;
@@ -110,10 +119,15 @@
 		MessageBox(NULL, "Can't allocate memory.", "ERROR", MB_OK | MB_ICONWARNING);
 		break;
 	case ERROR_OPEN_FAILED:
-	default:
-		MessageBox(NULL, "Can't execute Cygterm.", "ERROR", MB_OK | MB_ICONWARNING);
+	default: {
+		const char *msg = msys2term ? "Can't execute msys2term." :
+			"Can't execute Cygterm.";
+		MessageBox(NULL, msg, "ERROR", MB_OK | MB_ICONWARNING);
 		break;
 	}
+	}
 
+	free(Cmdline);
+	free(CygwinDir);
 	return 0;
 }

Added: trunk/cygwin/cyglaunch/cygterm_here_reg_sample.txt
===================================================================
--- trunk/cygwin/cyglaunch/cygterm_here_reg_sample.txt	                        (rev 0)
+++ trunk/cygwin/cyglaunch/cygterm_here_reg_sample.txt	2021-11-10 13:02:18 UTC (rev 9521)
@@ -0,0 +1,27 @@
+\xFF\xFEW i n d o w s   R e g i s t r y   E d i t o r   V e r s i o n   5 . 0 0 
+ 
+ 
+ 
+ [ H K E Y _ C U R R E N T _ U S E R \ S O F T W A R E \ C l a s s e s \ F o l d e r \ s h e l l \ c y g t e r m ] 
+ 
+ @ = " C y & g t e r m   H e r e " 
+ 
+ 
+ 
+ [ H K E Y _ C U R R E N T _ U S E R \ S O F T W A R E \ C l a s s e s \ F o l d e r \ s h e l l \ c y g t e r m \ c o m m a n d ] 
+ 
+ @ = " \ " D : \ \ P a t h \ \ T o \ \ c y g l a u n c h . e x e \ "   - n o c d   - v   C H E R E _ I N V O K I N G = y   - d   \ " \ \ \ " % L \ \ \ " \ " " 
+ 
+ 
+ 
+ [ H K E Y _ C U R R E N T _ U S E R \ S O F T W A R E \ C l a s s e s \ F o l d e r \ s h e l l \ m s y s 2 t e r m _ m s y s ] 
+ 
+ @ = " m s y s 2 g t e r m ( m s y s )   H e r e " 
+ 
+ 
+ 
+ [ H K E Y _ C U R R E N T _ U S E R \ S O F T W A R E \ C l a s s e s \ F o l d e r \ s h e l l \ m s y s 2 t e r m _ m s y s \ c o m m a n d ] 
+ 
+ @ = " \ " D : \ \ P a t h \ \ T o \ \ c y g l a u n c h . e x e \ "   - m s y s 2   - n o c d   - v   C H E R E _ I N V O K I N G = y   - d   \ " \ \ \ " % L \ \ \ " \ "   - v   M S Y S T E M = M S Y S " 
+ 
+ 
\ No newline at end of file


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