• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Revision9521 (tree)
Time2021-11-10 22:02:18
Authorzmatsuo

Log Message

cyglaunch から msys2term を起動できるようにした

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

Change Summary

Incremental Difference

--- trunk/cygwin/README.md (revision 9520)
+++ trunk/cygwin/README.md (revision 9521)
@@ -1,7 +1,7 @@
11 # cygwin に関連するプログラムなど
22
33 - cyglaunch
4- - cygterm を実行するプログラム
4+ - cygterm(または msys2term) を実行するプログラム
55 - cygterm
66 - cygwin(msys2)のシェルとTera Termの橋渡しをするプログラム
77 - cygwin用64bit, 32bit, msys2用(msys2term) をビルド可能
--- trunk/cygwin/cyglaunch/README.md (revision 9520)
+++ trunk/cygwin/cyglaunch/README.md (revision 9521)
@@ -1,6 +1,34 @@
11 # cyglaunch
22
3-- cygterm を起動するプログラム
4-- cyglaunch は普通のexeファイル
5- - cygwin上で動作する必要はない
6- - Visual Studio で普通にビルドできる
3+cygterm を起動するプログラム
4+
5+## コマンドラインオプション
6+
7+cyglaunch で解釈されない引数は cygterm(又は msys2term)へ渡される
8+
9+-msys2
10+ cygterm ではなく msys2term を起動する
11+ 次のオプションを付けることで msys2の環境を設定できる
12+
13+ -v MSYSTEM=MSYS
14+ msys
15+ -v MSYSTEM=MINGW32
16+ mingw32
17+ -v MSYSTEM=MINGW64
18+ mingw64
19+
20+ msys2の起動については次のURLを参照
21+ https://www.msys2.org/wiki/Launchers/
22+
23+## from explorer
24+
25+レジストリに設定することで、エクスプローラーのコンテキストメニューからターミナルをオープンできる
26+
27+cygterm_here_reg_sample.txt 参照
28+
29+## 歴史
30+
31+- cyglaunch は通常のexeファイル
32+- Visual Studio で普通にビルドできる
33+- cygwin上で動作する必要はない
34+- 従来は cygterm フォルダに存在し MinGW でビルドされていた
--- trunk/cygwin/cyglaunch/cyglaunch.c (revision 9520)
+++ trunk/cygwin/cyglaunch/cyglaunch.c (revision 9521)
@@ -37,6 +37,7 @@
3737
3838 #include "ttlib.h"
3939 #include "asprintf.h"
40+#include "win32helper.h"
4041 #include "cyglib.h"
4142
4243 #define Section L"Tera Term"
@@ -48,7 +49,7 @@
4849 {
4950 wchar_t *HomeDir;
5051 wchar_t *teraterm_ini;
51- wchar_t CygwinDir[256];
52+ wchar_t *CygwinDir;
5253
5354 HomeDir = GetHomeDirW(NULL);
5455 teraterm_ini = NULL;
@@ -56,14 +57,11 @@
5657 free(HomeDir);
5758
5859 // Cygwin install path
59- GetPrivateProfileStringW(Section, L"CygwinDirectory", L"",
60- CygwinDir, _countof(CygwinDir), teraterm_ini);
60+ hGetPrivateProfileStringW(Section, L"CygwinDirectory", L"",
61+ teraterm_ini, &CygwinDir);
6162 free(teraterm_ini);
6263
63- if (CygwinDir[0] == 0) {
64- return NULL;
65- }
66- return _wcsdup(CygwinDir);
64+ return CygwinDir;
6765 }
6866
6967 int wmain(int argc, wchar_t *argv[])
@@ -71,8 +69,8 @@
7169 wchar_t *CygwinDir;
7270 wchar_t *Cmdline;
7371 int i;
74- BOOL d_opt=FALSE;
7572 DWORD e;
73+ BOOL msys2term = FALSE;
7674
7775 setlocale(LC_ALL, "");
7876
@@ -82,16 +80,21 @@
8280 if (i != 1) {
8381 awcscat(&Cmdline, L" ");
8482 }
85- if (d_opt && wcsncmp(L"\"\\\\", argv[i], 3) == 0) {
86- argv[i][1] = '/';
87- argv[i][2] = '/';
83+ if (wcscmp(argv[i], L"-d") == 0 && *(argv+1) != NULL) {
84+ i++;
85+ if (wcsncmp(L"\"\\\\", argv[i], 3) == 0) {
86+ // -d "\\path\..." を書き換え
87+ argv[i][1] = '/';
88+ argv[i][2] = '/';
89+ }
90+ awcscat(&Cmdline, L"-d ");
91+ awcscat(&Cmdline, argv[i]);
8892 }
89- awcscat(&Cmdline, argv[i]);
90- if (wcscmp(argv[i], L"-d") == 0) {
91- d_opt = TRUE;
93+ else if (wcscmp(argv[i], L"-msys2") == 0) {
94+ msys2term = TRUE;
9295 }
9396 else {
94- d_opt = FALSE;
97+ awcscat(&Cmdline, argv[i]);
9598 }
9699 }
97100
@@ -99,7 +102,13 @@
99102 CygwinDir = GetCygwinDir();
100103
101104 // cygtermを実行する
102- e = CygwinConnect(CygwinDir, Cmdline);
105+ if (msys2term) {
106+ e = Msys2Connect(CygwinDir, Cmdline);
107+ }
108+ else {
109+ e = CygwinConnect(CygwinDir, Cmdline);
110+ }
111+
103112 switch(e) {
104113 case NO_ERROR:
105114 break;
@@ -110,10 +119,15 @@
110119 MessageBox(NULL, "Can't allocate memory.", "ERROR", MB_OK | MB_ICONWARNING);
111120 break;
112121 case ERROR_OPEN_FAILED:
113- default:
114- MessageBox(NULL, "Can't execute Cygterm.", "ERROR", MB_OK | MB_ICONWARNING);
122+ default: {
123+ const char *msg = msys2term ? "Can't execute msys2term." :
124+ "Can't execute Cygterm.";
125+ MessageBox(NULL, msg, "ERROR", MB_OK | MB_ICONWARNING);
115126 break;
116127 }
128+ }
117129
130+ free(Cmdline);
131+ free(CygwinDir);
118132 return 0;
119133 }
--- trunk/cygwin/cyglaunch/cygterm_here_reg_sample.txt (nonexistent)
+++ trunk/cygwin/cyglaunch/cygterm_here_reg_sample.txt (revision 9521)
@@ -0,0 +1,27 @@
1
2+ +
3+[HKEY_CURRENT_USER\SOFTWARE\Classes\Folder\shell\cygterm] +
4+@="Cy&gterm Here" +
5+ +
6+[HKEY_CURRENT_USER\SOFTWARE\Classes\Folder\shell\cygterm\command] +
7+@="\"D:\\Path\\To\\cyglaunch.exe\" -nocd -v CHERE_INVOKING=y -d \"\\\"%L\\\"\"" +
8+ +
9+[HKEY_CURRENT_USER\SOFTWARE\Classes\Folder\shell\msys2term_msys] +
10+@="msys2gterm(msys) Here" +
11+ +
12+[HKEY_CURRENT_USER\SOFTWARE\Classes\Folder\shell\msys2term_msys\command] +
13+@="\"D:\\Path\\To\\cyglaunch.exe\" -msys2 -nocd -v CHERE_INVOKING=y -d \"\\\"%L\\\"\" -v MSYSTEM=MSYS" +
14+
\ No newline at end of file
Show on old repository browser