1
0
mirror of https://github.com/mintty/wsltty.git synced 2025-11-01 07:31:56 +00:00

Compare commits

...

87 Commits

Author SHA1 Message Date
Thomas Wolff
ec0b5560ee 2025-09-02 00:00:00 +00:00
mintty
2cd1819d8b 3.8.0.3 2025-08-30 00:00:00 +00:00
Thomas Wolff
bbe0dd4e56 3.8.0.2, workaround for corrupted display (mintty/mintty#1332) 2025-08-28 00:00:00 +00:00
mintty
39151ffe8e hints to prevent display corruption 2025-08-27 00:00:00 +00:00
mintty
25460e4bbd project page refers to display glitches explicitly (mintty/mintty#1332) 2025-08-26 00:00:00 +00:00
mintty
a7f1720a22 fix missing git upload 2025-08-24 00:00:00 +00:00
mintty
92210d81d7 3.8.0 2025-08-22 00:00:00 +00:00
mintty
c0094d675f 3.8.0 2025-08-22 00:00:00 +00:00
mintty
e863c572ef deploy terminfo files, in order to support pty mode for wsl.exe 2025-08-20 00:00:00 +00:00
mintty
92edf8b257 simplify installer build file 2025-08-20 00:00:00 +00:00
mintty
d09d08d518 tweak README; sort package references according to update status 2025-08-20 00:00:00 +00:00
Thomas Wolff
7074ff02b9 3.7.8 2025-03-29 00:00:00 +00:00
Thomas Wolff
4e0bbddcc0 revise command-line launch scripts, support arguments (#365) 2025-03-29 00:00:00 +00:00
Thomas Wolff
68e11e5775 revise command-line launch scripts, support arguments (#365) 2025-03-29 00:00:00 +00:00
Thomas Wolff
36c134820b 3.7.7 2024-12-21 14:34:46 +01:00
Thomas Wolff
ef2ab5f6e4 3.7.7 2024-12-21 13:59:07 +01:00
mintty
ee57a229b0 3.7.6.2 2024-12-02 14:00:14 +01:00
mintty
3c7d8f3a18 fix git handling for mintty download 2024-12-02 13:59:48 +01:00
mintty
937058f703 provide script to refresh shortcut icon after renaming installation dir (#359) 2024-11-23 12:29:17 +01:00
mintty
52b6a57e09 2024-11-23 12:23:38 +01:00
mintty
d7b4840c92 portable installation supports Unicode folder names 2024-11-23 04:52:47 +01:00
mintty
05a439b5b0 fix handling of empty/non-empty folder parameters 2024-11-23 04:52:25 +01:00
mintty
a7b8792e76 tweak portable install; support renaming installation dir (#359) 2024-11-22 17:11:02 +01:00
mintty
440fbec6c7 2024-11-22 17:09:52 +01:00
mintty
49d7a79941 support portable installation into folder with space (#359) 2024-11-22 17:09:10 +01:00
mintty
6261ec43ec supported update installation into selected folder (#359) 2024-11-22 17:07:45 +01:00
Thomas Wolff
033d9aceb2 update home page section on Requirements 2024-11-18 19:17:09 +01:00
mintty
be4e7fef44 download mintty via git; fix wsltty version info 2024-10-10 22:54:54 +02:00
mintty
a2df28017b 3.7.6 2024-10-10 22:35:16 +02:00
mintty
09972471b9 add rluetzner's patch Get VmId from registry (#356) 2024-10-10 22:33:39 +02:00
mintty
c13340b328 decouple wslbridge build from download to support build of patched version 2024-10-10 22:32:18 +02:00
mintty
8d7ffa75bb 3.7.5 2024-09-17 10:56:47 +02:00
mintty
305fd0f273 2024-09-17 10:56:29 +02:00
mintty
fb1bf601e9 3.7.4 2024-07-03 19:23:59 +02:00
mintty
adc7036609 3.7.3 2024-06-29 00:08:29 +02:00
mintty
fef944e1bb 3.7.2 2024-06-27 05:23:41 +02:00
mintty
d40e5919af 3.7.1 2024-02-24 21:53:35 +01:00
mintty
a141e760f4 project page (README): add section to «Build installers» (#345) 2023-12-24 11:30:34 +01:00
mintty
14f6d1e631 homepage: clarifications on different installers 2023-11-25 00:31:26 +01:00
mintty
e189d87a2c 3.7.0.2, with wslbridge2 0.12 fixing WSL 2 v2 issues (#343, #342) 2023-11-23 00:53:03 +01:00
mintty
399dff4226 hint to downgrade WSL to release 1.3.17 (#343) 2023-11-20 08:43:52 +01:00
mintty
8fbee63214 tune notice of patch version that makes WSL access fail 2023-11-16 18:58:02 +01:00
mintty
effb0ce46a project page: add hint to WSL V2 problem (#343) 2023-11-16 04:22:00 +01:00
mintty
ca4670bd44 3.7.0 2023-11-14 01:09:23 +01:00
mintty
ab84d5bbde 3.6.5 2023-09-03 13:06:35 +02:00
mintty
943d83da69 add package check links for 3rd-party installers 2023-03-30 11:47:37 +02:00
mintty
0be30273f5 project page tweaks 2023-03-30 11:30:39 +02:00
mintty
e8177d77d7 2023-03-25 05:13:33 +01:00
mintty
756f5f5844 3.6.4 2023-03-25 04:58:07 +01:00
mintty
bbbef4fc89 install emoji deployment scripts 2023-03-24 10:09:49 +01:00
mintty
eee9516a23 3.6.1.2 build 2022-11-08 23:15:40 +01:00
mintty
449a310d90 update to wslbridge2 0.9 (to fix #302), drop patches;
update to mintty 3.6.1
2022-10-30 11:30:07 +01:00
mintty
87aa168b41 CI: install build environment 2022-04-01 00:05:05 +02:00
mintty
9de7d8d6f1 CI control file 2022-03-31 21:46:17 +02:00
mintty
c91ec886b5 3.6.0 2022-03-25 19:28:34 +01:00
mintty
4caa2c34eb portable installation (#306) 2022-03-22 15:54:28 +01:00
mintty
73fcc66790 fix previous change 2022-03-01 00:11:44 +01:00
mintty
5cee2c341b installer: support customized install dirs via environment vars (#304) 2022-02-28 09:49:30 +01:00
mintty
ea570a191e (#304) 2022-02-19 23:50:24 +01:00
mintty
2dd099265d mention winget package 2022-02-05 22:52:32 +01:00
mintty
2ddd2cd1ff add 41575379b4
as a patch: add COM instance for new lifted WSL service
2022-02-03 21:00:40 +01:00
mintty
d1fa49985b add wsltty quiet installer (microsoft/winget-pkgs#40573) 2022-01-18 19:37:26 +01:00
mintty
76fad756e1 3.5.1 2021-09-03 22:37:00 +02:00
mintty
600df69bb8 3.5.1 2021-09-03 22:05:59 +02:00
mintty
97dc68d64a ensure wsltty-specific recompile for mintty -V message (#284) 2021-05-11 00:57:26 +02:00
mintty
9469b2b5f5 3.5.0.2 2021-05-01 19:16:58 +02:00
mintty
5b27a3d3c8 update to wslbridge 0.8, matching the updated patch 2021-04-27 21:46:31 +02:00
mintty
ab46c2b1b0 Merge pull request #282 from Biswa96/master
update wslbridge2 patch file, to catch up with wslbridge2 0.8, to fix #281
2021-04-27 21:44:37 +02:00
Biswapriyo Nath
2e56730282 update wslbridge2 patch file 2021-04-27 23:42:59 +05:30
mintty
d67ce45c3e 3.5.0 2021-04-15 18:07:12 +02:00
mintty
6e74ab4d5b filter out "docker" default distributions from configuration (#277) 2021-04-09 10:29:21 +02:00
mintty
ee4e403f4c filter out "docker" distributions from configuration (#277) 2021-04-07 14:30:15 +02:00
mintty
a332cf8eaa 3.4.7 2021-03-18 19:38:25 +01:00
mintty
07aa6c692d fix rebased patch; restore backend patch part 2021-03-18 19:38:07 +01:00
mintty
74dad091ce rebase patch; add setlocale patch (#273) 2021-03-16 12:07:18 +01:00
mintty
8d896ceb36 3.4.5 2021-02-17 14:29:07 +01:00
mintty
90cf6f5d15 align install file names for better sorting in release area (fixed) 2020-12-27 18:57:32 +01:00
mintty
2cd6d190d6 align install file names for better sorting in release area 2020-12-20 23:24:36 +01:00
mintty
38b8a5e93d 3.4.4 2020-12-20 23:12:13 +01:00
mintty
105d0b4ec5 uninstall: skip backend stuff, fix del parameters (~#263) 2020-11-13 12:35:13 +01:00
mintty
6c5a0f1fba support and describe local installation (from repository) without installer 2020-11-13 12:14:40 +01:00
mintty
f31eae1a41 add missing patch to repository 2020-11-12 14:33:51 +01:00
mintty
600e6e69ba instructions for installation from archive (#250) 2020-11-11 12:06:01 +01:00
mintty
9c9b88d416 3.4.3 2020-11-11 11:59:08 +01:00
mintty
9feb6b7187 build also cab file to circumvent anti-virus issues with installer (#250) 2020-11-11 11:49:57 +01:00
mintty
416fcd1d0d 3.4.2 2020-11-04 18:39:06 +01:00
mintty
2457a1fb10 doc build (#247) 2020-10-24 17:39:42 +02:00
13 changed files with 824 additions and 177 deletions

View File

@@ -0,0 +1,226 @@
diff --git a/src/wslbridge2-backend.cpp b/src/wslbridge2-backend.cpp
index 8b86cc6..63a19e5 100644
--- a/src/wslbridge2-backend.cpp
+++ b/src/wslbridge2-backend.cpp
@@ -17,6 +17,7 @@
#include <sys/wait.h>
#include <unistd.h>
#include <wordexp.h>
+#include <limits.h> // PIPE_BUF
#include <string>
#include <vector>
@@ -196,6 +197,7 @@ int main(int argc, char *argv[])
ssize_t readRet = 0, writeRet = 0;
char data[1024]; /* Buffer to hold raw data from pty */
+ assert(sizeof data <= PIPE_BUF);
do
{
@@ -206,8 +208,85 @@ int main(int argc, char *argv[])
if (fds[0].revents & POLLIN)
{
readRet = recv(ioSockets.inputSock, data, sizeof data, 0);
- if (readRet > 0)
- writeRet = write(mfd_dp, data, readRet);
+ char * s = data;
+ int len = readRet;
+ writeRet = 1;
+ while (writeRet > 0 && len > 0)
+ {
+ if (!*s)
+ {
+ // dispatch NUL escaped inband information
+ s++;
+ len--;
+
+ if (len < 9 && s + 9 >= data + sizeof data)
+ {
+ // make room for additional loading
+ memcpy(data, s, len);
+ s = data;
+ }
+
+ // ensure 1 more byte is loaded to dispatch on
+ if (!len)
+ {
+ readRet = recv(ioSockets.inputSock, s, 1, 0);
+ if (readRet > 0)
+ {
+ len += readRet;
+ }
+ else
+ {
+ writeRet = -1;
+ break;
+ }
+ }
+ if (*s == 2)
+ {
+ // STX: escaped NUL
+ s++;
+ len--;
+ writeRet = write(mfd_dp, "", 1);
+ }
+ else if (*s == 16)
+ {
+ // DLE: terminal window size change
+ s++;
+ len--;
+ // ensure 8 more bytes are loaded for winsize
+ while (readRet > 0 && len < 8)
+ {
+ readRet = recv(ioSockets.inputSock, s + len, 8 - len, 0);
+ if (readRet > 0)
+ {
+ len += readRet;
+ }
+ }
+ if (readRet <= 0)
+ {
+ writeRet = -1;
+ break;
+ }
+ struct winsize * winsp = (struct winsize *)s;
+ s += 8;
+ len -= 8;
+ winsp->ws_xpixel = 0;
+ winsp->ws_ypixel = 0;
+ ret = ioctl(mfd, TIOCSWINSZ, winsp);
+ if (ret != 0)
+ perror("ioctl(TIOCSWINSZ)");
+ }
+ }
+ else
+ {
+ int n = strnlen(s, len);
+ writeRet = write(mfd_dp, s, n);
+ if (writeRet > 0)
+ {
+ s += writeRet;
+ len -= writeRet;
+ }
+ }
+ }
}
/* Resize window when buffer received in control socket */
diff --git a/src/wslbridge2.cpp b/src/wslbridge2.cpp
index 300ad57..3ba9096 100644
--- a/src/wslbridge2.cpp
+++ b/src/wslbridge2.cpp
@@ -43,19 +43,41 @@ union IoSockets
/* global variable */
static volatile union IoSockets g_ioSockets = { 0 };
+#define dont_debug_inband
+#define dont_use_controlsocket
+
static void resize_window(int signum)
{
+#ifdef use_controlsocket
+#warning this may crash for unknown reason, maybe terminate the backend
struct winsize winp;
+ ioctl(STDIN_FILENO, TIOCGWINSZ, &winp);
/* Send terminal window size to control socket */
- ioctl(STDIN_FILENO, TIOCGWINSZ, &winp);
send(g_ioSockets.controlSock, (char *)&winp, sizeof winp, 0);
+#else
+ static char wins[2 + sizeof(struct winsize)] = {0, 16};
+ static struct winsize * winsp = (struct winsize *)&wins[2];
+ ioctl(STDIN_FILENO, TIOCGWINSZ, winsp);
+
+#ifdef debug_inband
+ /* Send terminal window size inband, visualized as ESC sequence */
+ char resizesc[55];
+ //sprintf(resizesc, "\e_8;%u;%u\a", winsp->ws_row, winsp->ws_col);
+ sprintf(resizesc, "^[_8;%u;%u^G", winsp->ws_row, winsp->ws_col);
+ send(g_ioSockets.inputSock, resizesc, strlen(resizesc), 0);
+#else
+ /* Send terminal window size inband, with NUL escape */
+ send(g_ioSockets.inputSock, wins, sizeof wins, 0);
+#endif
+#endif
}
static void* send_buffer(void *param)
{
int ret;
char data[1024];
+ assert(sizeof data <= PIPE_BUF);
while (1)
{
@@ -65,8 +87,33 @@ static void* send_buffer(void *param)
closesocket(g_ioSockets.inputSock);
break;
}
- if (!send(g_ioSockets.inputSock, data, ret, 0))
- break;
+ char * s = data;
+ int len = ret;
+ while (ret > 0 && len > 0)
+ {
+ if (!*s)
+ {
+ // send NUL STX
+#ifdef debug_inband
+ ret = send(g_ioSockets.inputSock, (void*)"nul", 3, 0);
+#else
+ static char NUL_STX[] = {0, 2};
+ ret = send(g_ioSockets.inputSock, NUL_STX, 2, 0);
+#endif
+ s++;
+ len--;
+ }
+ else
+ {
+ int n = strnlen(s, len);
+ ret = send(g_ioSockets.inputSock, s, n, 0);
+ if (ret > 0)
+ {
+ s += ret;
+ len -= ret;
+ }
+ }
+ }
}
pthread_exit(&ret);
@@ -480,16 +527,6 @@ int main(int argc, char *argv[])
g_ioSockets.controlSock = win_local_accept(controlSock);
}
- /* Capture window resize signal and send buffer to control socket */
- {
- struct sigaction act;
- memset(&act, 0, sizeof act);
- act.sa_handler = resize_window;
- act.sa_flags = SA_RESTART;
- ret = sigaction(SIGWINCH, &act, NULL);
- assert(ret == 0);
- }
-
/* Create thread to send input buffer to input socket */
pthread_t tidInput;
ret = pthread_create(&tidInput, nullptr, send_buffer, nullptr);
@@ -502,6 +539,17 @@ int main(int argc, char *argv[])
termState.enterRawMode();
+ /* Create thread to send window size through control socket */
+ struct sigaction act = {};
+ act.sa_handler = resize_window;
+ act.sa_flags = SA_RESTART;
+ ret = sigaction(SIGWINCH, &act, NULL);
+ assert(ret == 0);
+
+ /* Notify initial size in case it's changed since starting */
+ //resize_window(0);
+ kill(getpid(), SIGWINCH);
+
/*
* wsltty#254: WORKAROUND: Terminates input thread forcefully
* when output thread exits. Need some inter-thread syncing.

View File

@@ -0,0 +1,62 @@
diff -rup src/sav/GetVmId.cpp src/GetVmId.cpp
--- src/sav/GetVmId.cpp 2021-04-27 13:50:51.000000000 +0000
+++ src/GetVmId.cpp 2022-02-03 19:43:53.684999800 +0000
@@ -46,11 +46,24 @@ void ComInit(void)
EOAC_STATIC_CLOAKING, NULL);
assert(hRes == 0);
- hRes = CoCreateInstance(CLSID_LxssUserSession,
+ // First try with COM server in lifted WSL service
+ hRes = CoCreateInstance(CLSID_WslService,
NULL,
CLSCTX_LOCAL_SERVER,
- IID_ILxssUserSession,
+ IID_IWSLService,
(PVOID *)&wslSession);
+
+
+ // Now try with COM server in system WSL service
+ if (FAILED(hRes))
+ {
+ hRes = CoCreateInstance(CLSID_LxssUserSession,
+ NULL,
+ CLSCTX_LOCAL_SERVER,
+ IID_ILxssUserSession,
+ (PVOID *)&wslSession);
+ }
+
assert(hRes == 0);
}
diff -rup src/sav/LxssUserSession.hpp src/LxssUserSession.hpp
--- src/sav/LxssUserSession.hpp 2021-04-27 13:50:51.000000000 +0000
+++ src/LxssUserSession.hpp 2022-02-03 19:45:22.846298200 +0000
@@ -11,14 +11,26 @@
#ifndef LXSSUSERSESSION_H
#define LXSSUSERSESSION_H
-/* Class identifier */
+// COM IDs for lifted WSL service
+static const GUID CLSID_WslService = {
+ 0xF122531F,
+ 0x326B,
+ 0x4514,
+ { 0x85, 0xAE, 0xDC, 0x99, 0xD3, 0x1D, 0x82, 0x56 } };
+
+static const GUID IID_IWSLService = {
+ 0x50047071,
+ 0x122C,
+ 0x4CAD,
+ { 0x9C, 0x93, 0x94, 0x72, 0x0E, 0xB7, 0x7B, 0x06 } };
+
+// COM IDs for system WSL service
static const GUID CLSID_LxssUserSession = {
0x4F476546,
0xB412,
0x4579,
{ 0xB6, 0x4C, 0x12, 0x3D, 0xF3, 0x31, 0xE3, 0xD6 } };
-/* Interface identifier */
static const GUID IID_ILxssUserSession = {
0x536A6BCF,
0xFE04,

View File

@@ -0,0 +1,40 @@
--- wslbridge2/src/wslbridge2.cpp 2024-10-10 20:20:21.931891800 +0000
+++ wslbridge2-0.12/src/wslbridge2.cpp 2024-10-08 09:31:35.954145800 +0000
@@ -228,6 +228,26 @@ static void start_dummy(std::wstring wsl
CloseHandle(pi.hThread);
}
+bool GetIdFromRegistry(GUID *guid) {
+ HKEY hKeyRoot = HKEY_LOCAL_MACHINE;
+ std::wstring subKey = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\HostComputeService\\VolatileStore\\ComputeSystem";
+ HKEY hKey;
+ if (RegOpenKeyEx(hKeyRoot, subKey.c_str(), 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
+ DWORD index = 0;
+ WCHAR keyName[256];
+ DWORD keyNameSize = sizeof(keyName) / sizeof(keyName[0]);
+
+ while (RegEnumKeyEx(hKey, index, keyName, &keyNameSize, nullptr, nullptr, nullptr, nullptr) == ERROR_SUCCESS) {
+ RegCloseKey(hKey);
+ std::wstring id = L"{" + std::wstring(keyName) + L"}";
+ return IIDFromString(id.c_str(), guid) == S_OK;
+ }
+ RegCloseKey(hKey);
+ }
+ return false;
+}
+
+
int main(int argc, char *argv[])
{
/* Minimum requirement Windows 10 build 17763 aka. version 1809 */
@@ -387,8 +407,8 @@ int main(int argc, char *argv[])
if (LiftedWSLVersion)
start_dummy(wslPath, wslCmdLine, distroName, debugMode);
- const HRESULT hRes = GetVmId(&DistroId, &VmId, LiftedWSLVersion);
- if (hRes != 0)
+ const bool hRes = GetIdFromRegistry(&VmId);
+ if (!hRes)
fatal("GetVmId: %s\n", GetErrorMessage(hRes).c_str());
inputSock = win_vsock_create();

View File

@@ -1,4 +1,4 @@
mintty is copyright 2008-13 Andy Koppe, 2015-18 Thomas Wolff.
mintty is copyright 2008-23 Andy Koppe, 2015-23 Thomas Wolff.
Licensed under the terms of the GNU General Public License version 3 or later,
amended with the bundling clause to clarify ambiguous interpretation.

147
README.md
View File

@@ -11,41 +11,125 @@ WSLtty components
(“home”-located configuration files from a previously installed version
will be migrated to the new default location)
* Start Menu shortcuts to start WSL terminals
* Desktop shorcut to start a terminal for the default WSL distribution
* `*.bat` scripts to invoke WSL terminals from the command line
* optional context menu entries for Windows Explorer to start WSL terminals in the respective folder
* install/uninstall context menu items from Start Menu subfolder `WSLtty`
---
### Requirement ###
### Launching WSL ###
Since wsltty 3.8.0, mintty launches WSL using the native Windows launcher
gateway `wsl.exe` by default.
Proper display in certain cases depends on an up-to-date version of the
Windows conpty layer. Its version currently deployed with Windows has
unfortunately still some problems. There are two ways to fix this:
* Revert to the previous launching method for now. The problem is that
this way of launching WSL does not appear to work on some users systems.
For this solution, configure this in config file `%APPDATA%/wsltty/config`.
`WSLbridge=2`
* Update the Windows conpty layer manually, by replacing
`%SYSTEMROOT%/System32/conhost.exe` following the instructions in the
[mintty wiki, section Interaction with WSL](https://github.com/mintty/mintty/wiki/Tips#interaction-with-wsl-and-other-windows-programs).
#### Launcher and display interworking background ####
The approach to use wsl.exe directly used to fail because the
_conhost_ layer hooked into the workflow used to obstruct transparent
terminal operation in multiple ways.
The _conhost_ layer has meanwhile been modernised, including the _conpty_
layer, and its enforced detour through the Windows console API has
been dropped, in the course of the Windows Terminal project.
The new _conhost_, however, has not yet been deployed with Windows
(as of summer 2025) and will probably not be deployed with Windows 10 anymore.
So in order to get fully transparent terminal interaction between WSL
and wsltty, the updated _conhost_ needs to be patched into Windows
manually, following the instructions linked above,
to patch OpenConsole into your Windows as conhost replacement.
#### The wslbridge approach ####
To connect to WSL, wsltty used wslbridge2, which uses undocumented
Windows APIs that have been changed various times, so wslbridge2 needed
to catch up with incompatible changes, particularly to support WSL V2.
(See e.g. issue #343; to work with WSL V2, wsltty 2.0.0 needed a WSL update
to [release 1.3.17](https://github.com/microsoft/WSL/releases/tag/1.3.17).)
Since release 3.0.5, WSLtty requires Windows version 1809 (the November 2018 release).
By end of 2024, wsltty works again with recent updates of the WSL subsystem.
Configuration option `WSLbridge=2` switches back to the previous
wslbridge launching approach; the wslbridge2 gateway is still deployed
with wsltty for that matter. (If for a very old Windows 10 version you
still need the original wslbridge gateway, set `WSLbridge=1` and
deploy it manually.)
---
### Installation from this repository ###
#### WSLtty installer ([Download](https://github.com/mintty/wsltty/releases) standalone installation) ####
Run the [installer](https://github.com/mintty/wsltty/releases) to install
the components listed above.
From the [release downloads](https://github.com/mintty/wsltty/releases),
run the wsltty-VERSION-x86_64-install.exe installer to install
the components listed above. Make sure to select a 64-bit installer
on a 64-bit system.
If Windows complains with a “Windows protected your PC” popup,
you may need to click “Run anyway” to proceed with the installation.
You may need to open the Properties of the installer first, tab “General”
section “Security” (if available) and select “Unblock”,
to enable the “Run anyway” button.
#### WSLtty Portable installer
For a portable installation, e.g. on a USB stick, choose the
“-install-portable.exe” file for download. Installation will prompt
for a portable installation folder interactively.
For example, choosing `U:\opt` will create and use folder
`U:\opt\wsltty` both as installation directory and configuration directory.
Portable installation does not install any start menu or desktop shortcuts
and no context menu entries. It creates a shortcut in the selected
portable installation folder to start the default WSL distribution.
Note: For an update installation, either the parent directory or the target
directory itself can be selected.
Note: If you rename or move the installation directory, the icon of the
“WSL Terminal Portable” shortcut will not work anymore; re-run the
install-portable.bat script in the installation folder to refresh it.
#### Installation from archive ####
In case a local anti-virus guard barfs about the wsltty installer, the
release also contains a `.cab` file. Download it, open it, extract its files
to some temporary deployment directory, and invoke `install.bat` from there,
or `install-portable.bat` for a portable installation.
#### Quiet installer ####
The wsltty-VERSION-x86_64-install-quiet.exe installer is intended for
integration in another installation framework.
#### Installation from source repository ####
Checkout the wsltty repository, or download the source archive, unpack and rename the directory to `wsltty`.
Invoke `make` (or `make pkg` if directory is called `wsltty-master`),
then `make install`.
Install Alpine WSL from the Microsoft Store.
Invoke `make build`, then `make install`.
Note this has to be done within a Cygwin environment. A minimal Cygwin
environment for this purpose would be installed with the
[Cygwin installer](https://cygwin.com/setup-x86_64.exe)
from [cygwin.com](https://cygwin.com/),
with additional packages `make`, `gcc-g++ 9.3.0`, `unzip`, `zoo`.
with additional packages `make`, `gcc-g++`, `unzip`, `zoo`, `patch`, (`lcab`).
#### Build installers ####
Install a minimal Cygwin environment plus the additional packages as
listed for «Installation from source repository».
Invoke `make pkg` or just `make`.
#### Installation to non-default locations ####
@@ -56,19 +140,20 @@ the optional second parameter designates the configuration directory.
### Installation with other package management environments ###
Note that these are 3rd-party contributions and do not necessarily
provide the latest version.
Note: These are 3rd-party packages, not managed by this repository.
#### Chocolatey ####
#### Windows Package Manager ####
If you use the [Chocolatey package manager](https://chocolatey.org/),
([Check package](https://github.com/microsoft/winget-pkgs/tree/master/manifests/m/Mintty/WSLtty))
To install wsltty from the
[Windows Package Manager Community Repository](https://github.com/microsoft/winget-pkgs),
invoke one of
<img height=222 align=right src=https://github.com/mintty/wsltty.appx/raw/master/wsltty.appx.png>
* `choco install wsltty`
* `choco upgrade wsltty`
* `winget install wsltty`
* `winget upgrade wsltty`
#### Scoop ####
([Check package](https://scoop.sh/#/apps?q=wsltty))
If you use the [Scoop package manager](https://scoop.sh/),
* `scoop bucket add extras`
@@ -76,9 +161,13 @@ then, invoke one of
* `scoop install wsltty`
* `scoop update wsltty`
#### Windows Appx package ####
#### Chocolatey ####
A Windows Appx package and certificate is available in the [wsltty.appx](https://github.com/mintty/wsltty.appx/) repository.
([Check package](https://community.chocolatey.org/packages/wsltty))
If you use the [Chocolatey package manager](https://chocolatey.org/),
invoke one of
* `choco install wsltty`
* `choco upgrade wsltty`
### Uninstallation ###
@@ -93,7 +182,7 @@ To uninstall wsltty software completely, remove the installation folder manually
WSLtty can be invoked with
* installed Start Menu shortcuts (or Desktop shortcuts if copied there)
* *.bat scripts (optionally with WSL command as parameters)
* *.bat scripts (optionally with WSL command as parameters) (see [Command line scripts](#command-line-scripts-wslbat) below)
* Explorer context menu (if installed from the Start Menu `WSLtty` subfolder)
Starting the mintty terminal directly from the WSLtty installation location
@@ -154,7 +243,7 @@ from the Start Menu if desired.
The Start menu folder WSLtty contains the link
<img align=absmiddle height=25 src=https://user-images.githubusercontent.com/12740416/57078483-a7846a00-6cee-11e9-9c5e-8c2e9e56cae4.png>`configure WSL shortcuts`.
This function is initially run when wsltty is installed.
If should be rerun after adding or removing WSL distributions,
It should be rerun after adding or removing WSL distributions,
in order to create the respective set of shortcuts in the Start menu.
#### Command line scripts `wsl*.bat` ####
@@ -166,6 +255,8 @@ WSLtty installs the following scripts into `%LOCALAPPDATA%\Microsoft\WindowsApps
* For each installed WSL distribution, e.g. Ubuntu, a command script like `Ubuntu~.bat` to start in the WSL user home
* `WSL.bat` and `WSL~.bat` to start the default WSL distribution
The scripts accept an optional invocation command (since 3.7.8).
Given that `%LOCALAPPDATA%\Microsoft\WindowsApps` is in your PATH,
the scripts can be invoked from cmd.exe, PowerShell, or via WIN+R.
@@ -190,7 +281,7 @@ Start Menu subfolder `WSLtty`:
Wsltty installation and the mintty terminal try to use the icon of the
respective WSL distribution. If it cannot be determined, a penguin icon
is used as a default. You can replace it with your preferred fallback icon
is used as a fallback. You can replace it with your preferred default icon
by replacing the icon file `%LOCALAPPDATA%\wsltty\wsl.ico`.
#### Mintty settings ####
@@ -221,6 +312,20 @@ Note:
If you define `HOME` at Windows level, this changes accordingly.
Note, however, that the WSL `$HOME` is a completely different setting.
#### Emoji deployment ####
Mintty and the wsltty package do not bundle actual emoji graphics but
there are scripts to support easy download and deployment.
If you have another instance of mintty installed (e.g. in cygwin)
and have emojis deployed already in the common config folder
`%APPDATA%\mintty\emojis`, they will be reused by wsltty.
To deploy emojis standalone for wsltty, use the scripts installed in
`%APPDATA%\wsltty\emojis` within WSL:
* `cd $(wslpath "$APPDATA/wsltty/emojis")`
* `getemojis` to provide emoji graphics as listed by Unicode.org
* `getflags` to provide emoji flag graphics (extending Unicode dynamically) from various sources
#### Shell selection and Login shell ####
The WSLtty deployment does not impose a shell preference;
@@ -264,13 +369,13 @@ the [Mintty manual page](http://mintty.github.io/mintty.1.html),
including a [Hints and Tips page](https://github.com/mintty/mintty/wiki/Tips).
It is based on [Cygwin](http://cygwin.com)
and includes its runtime library ([sources](http://mirrors.dotsrc.org/cygwin/x86/release/cygwin)).
and includes its runtime library ([sources](http://mirrors.dotsrc.org/cygwin/x86_64/release/cygwin)).
For interacting with WSL, [wslbridge](https://github.com/rprichard/wslbridge)
used to be the gateway prototype.
Many thanks for this enabling gateway go to Ryan Prichard.
For recent changes in WSL, particularly WSL mode V2, the new gateway
[wslbridge2](https://github.com/Biswa96/wslbridge2) is used instead.
For later changes in WSL, particularly WSL mode V2, the new gateway
[wslbridge2](https://github.com/Biswa96/wslbridge2) was used instead.
Many thanks for this further development and maintenance go to Biswapriyo Nath.

View File

@@ -1 +1 @@
3.4.1
3.8.0.3

31
appveyor.yml Normal file
View File

@@ -0,0 +1,31 @@
# This file is part of wsltty project
# Build image; of course wsltty has nothing to do with Visual Studio -
# this is just the name of Appveyor's build environment image
# that also contains cygwin
image: Visual Studio 2022
# Version format
version: "#{build}"
# Do not increment build number after pull requests
pull_requests:
do_not_increment_build_number: true
# Do not start a new build when a new Git tag is created
skip_tags: true
init:
- cmd: |
set PATH=C:\cygwin64;C:\cygwin64\bin;%windir%\System32
setup-x86_64 -q -P unzip -P zoo -P patch -P lcab
winget install Alpine
build_script:
- cmd: |
make
test_script:
- cmd: |
bin\mintty.exe --log mintty.log --exec echo hello mintty
grep echo mintty.log

View File

@@ -14,10 +14,10 @@ copy () {
}
delete () {
from=/F
to="$1"
from="$1"
to="$1" # same again, to fill parameter
export from to
cmd /c cmd2.bat del
cmd /c cmd2.bat del/F
}
compare () {
@@ -155,17 +155,40 @@ regtool () {
}
fi
if $config
then while read line; do echo "$line"; done <</EOB > mkbat.bat
@echo off
echo Creating %1.bat
echo @echo off> %1.bat
echo rem Start mintty terminal for WSL package %name% in current directory>> %1.bat
echo %target% -i "%icon%" %minttyargs% %bridgeargs% %%*>> %1.bat
/EOB
fi
mkbat () {
echo Creating "$1.bat"
while read line; do echo "$line"; done <<-\/EOB > "$1".bat
@echo off
rem Start mintty terminal for WSL
rem get basename of this script file,
rem use it to select WSL distribution and homedir flag
set dist=%~n0
rem start in current directory
set cdir=
rem if script name ends with ~, extract WSL distribution and param -~
if "%dist:~-1%" == "~" set cdir=-~ && set dist=%dist:~0,-1%
rem map WSL default distribution
if "%dist%" == "WSL" set dist=
rem check if we have an explicit -d DIST parameter
if "%1" == "-d" set dist=%2 && shift && shift
chcp 65001 > nul:
if "%1" == "" goto login
:cmd
"%LOCALAPPDATA%/wsltty/bin/mintty.exe" -i "%LOCALAPPDATA%/wsltty/wsl.ico" --WSL="%dist%" --configdir="%APPDATA%/wsltty" %cdir% %*
goto end
:login
"%LOCALAPPDATA%/wsltty/bin/mintty.exe" -i "%LOCALAPPDATA%/wsltty/wsl.ico" --WSL="%dist%" --configdir="%APPDATA%/wsltty" %cdir% -
:end
/EOB
}
if $custominst && $config && ! $remove
then
@@ -291,9 +314,18 @@ config () {
echoc "- root $root"
wdir=%USERPROFILE%
if $ok && [ -n "$distro" ]
case "$name" in
docker*) echo skipping docker system
return;;
esac
case "$root" in
*\\Docker*) echo skipping docker system
return;;
esac
if $ok && ! $remove && [ -n "$distro" ]
then # fix #163: backend missing +x with certain mount options
echo Setting +x wslbridge2 backends for distro "'$distro'"
echo Setting +x wslbridge2 backend for distro "'$distro'"
(cd "$INSTDIR"; cd bin; PATH="${WINDIR}/Sysnative:${PATH}" wsl.exe -d "$distro" chmod +x wslbridge2-backend)
# (cd "$LOCALAPPDATA/wsltty/bin"; wsl.exe -d "$distro" chmod +x wslbridge2-backend)
# (cd ... ; "$SYSTEMROOT/System32/bash.exe" "$guid" -c chmod +x wslbridge2-backend)
@@ -357,7 +389,8 @@ config () {
copy "$name Terminal %.lnk" "$APPDATA\\Microsoft\\Windows\\Start Menu\\Programs\\WSLtty"
# launch script in . -> WSLtty home, WindowsApps launch folder
cmd /C mkbat.bat "$name"
#cmd /C mkbat.bat "$name"
mkbat "$name"
copy "$name.bat" "$LOCALAPPDATA\\Microsoft\\WindowsApps"
# store backup copies in installation dir
@@ -393,7 +426,8 @@ config () {
fi
# launch script in ~ -> WSLtty home, WindowsApps launch folder
cmd /C mkbat.bat "$name~"
#cmd /C mkbat.bat "$name~"
mkbat "$name~"
copy "$name~.bat" "$LOCALAPPDATA\\Microsoft\\WindowsApps"
# store backup copies in installation dir

54
install-portable.bat Executable file
View File

@@ -0,0 +1,54 @@
@echo off
chcp 65001 > nul
if not exist "WSL Terminal Portable.lnk" goto install
echo Rebuilding WSL Terminal Portable shortcut
set instdir=%~dp0
goto shortcut
:install
echo Installing WSL Terminal Portable
echo Select target folder in popup dialog ...
set sel="Select folder to place installation of portable wsltty"
for /f "usebackq delims=" %%f in (`powershell "(new-object -COM Shell.Application).BrowseForFolder(0, '%sel%', 0, 0).self.path"`) do set f=%%f
set instdir=%f%\wsltty
if exist %f%\LICENSE.mintty set instdir=%f%
if "%f%"=="" (
echo No installation selected
pause
exit
) else if not exist "%f%" (
echo Invalid installation folder %instdir%
pause
exit
)
rem call main installation
call install "%instdir%" "%instdir%" /P
rem this already changes into "%instdir%"
rem copy additional portable installation files
rem do this after call install as that deletes previous .bat files
copy "%~dp0\install-portable.bat" .
dir "%instdir%"\install-portable.bat
:shortcut
rem create shortcut
cd /D "%instdir%"
rem set drive-relative path for shortcut working directory and icon
set instpath=%instdir:~2%
set target=%%COMSPEC%%
set minttyargs=/C bin\mintty.exe --WSL= --icon=/wsl.ico --configdir=. -~
set bridgeargs= -
rem set wdir=%instpath%
rem let mkshortcut set working directory to empty:
set wdir=.
set icon=%instpath%\wsl.ico
cscript /nologo mkshortcut.vbs "/name:WSL Terminal Portable"

View File

@@ -1,9 +1,9 @@
@echo off
set refinstalldir=%%LOCALAPPDATA%%\wsltty
set installdir="%LOCALAPPDATA%\wsltty"
set refconfigdir=%%APPDATA%%\wsltty
set configdir="%APPDATA%\wsltty"
if "%installdir%" == "" set installdir="%LOCALAPPDATA%\wsltty"
if "%configdir%" == "" set configdir="%APPDATA%\wsltty"
call dequote installdir
call dequote configdir
set oldroot="%installdir%"
@@ -12,9 +12,18 @@ call dequote oldroot
call dequote oldhomedir
set oldconfigdir="%oldhomedir%\.config\mintty"
call dequote oldconfigdir
if not "%1" == "" set refinstalldir=%1 && set installdir=%1
if not "%2" == "" set refconfigdir=%2 && set configdir=%2
rem override installdir, configdir if parameters given
set arg1=%1
call dequote arg1
if "%arg1%" == "%%arg1%%" goto deploy
set refinstalldir=%arg1%
set installdir=%arg1%
set arg2=%2
call dequote arg2
if "%arg2%" == "%%arg2%%" goto deploy
set refconfigdir=%arg2%
set configdir=%arg2%
:deploy
@@ -71,7 +80,7 @@ rem copy cygpopt-0.dll "%installdir%"\bin
rem copy cygiconv-2.dll "%installdir%"\bin
rem copy cygintl-8.dll "%installdir%"\bin
rem create system config directory and copy config archive
rem create system config directory and copy config archive and scripts
mkdir "%installdir%\usr\share\mintty\lang" 2> nul:
copy lang.zoo "%installdir%\usr\share\mintty\lang"
mkdir "%installdir%\usr\share\mintty\themes" 2> nul:
@@ -83,6 +92,11 @@ copy charnames.txt "%installdir%\usr\share\mintty\info"
mkdir "%installdir%\usr\share\mintty\icon" 2> nul:
copy tux.ico "%installdir%\usr\share\mintty\icon"
copy mintty.ico "%installdir%\usr\share\mintty\icon"
mkdir "%installdir%\usr\share\mintty\emojis" 2> nul:
copy getemojis "%installdir%\usr\share\mintty\emojis" 2> nul:
copy getflags "%installdir%\usr\share\mintty\emojis" 2> nul:
mkdir "%installdir%\usr\share\terminfo" 2> nul:
copy terminfo.zoo "%installdir%\usr\share\terminfo"
rem create Start Menu Folder
@@ -110,6 +124,8 @@ cd /D "%installdir%\usr\share\mintty\themes"
"%installdir%\bin\zoo" xO themes
cd /D "%installdir%\usr\share\mintty\sounds"
"%installdir%\bin\zoo" xO sounds
cd /D "%installdir%\usr\share\terminfo"
"%installdir%\bin\zoo" xO terminfo
cd /D "%installdir%"
@@ -131,17 +147,43 @@ rmdir "%oldroot%\home" 2> nul:
:userconfig
rem create user config directory and subfolders
rem create user config directory and subfolders, copy scripts
mkdir "%configdir%\lang" 2> nul:
mkdir "%configdir%\themes" 2> nul:
mkdir "%configdir%\sounds" 2> nul:
mkdir "%configdir%\emojis" 2> nul:
copy "%installdir%\usr\share\mintty\emojis\getemojis" "%configdir%\emojis" 2> nul:
copy "%installdir%\usr\share\mintty\emojis\getflags" "%configdir%\emojis" 2> nul:
goto noetc
rem 3.8.0.2: create global config file for troubleshooting
mkdir "%installdir%\etc" 2> nul:
echo ###########################>"%installdir%\etc\minttyrc"
echo # Troubleshooting>>"%installdir%\etc\minttyrc"
echo # To work around a pty interworking issue between wsl and cygwin,>>"%installdir%\etc\minttyrc"
echo # we need to apply this configuration for now:>>"%installdir%\etc\minttyrc"
echo Baud=999999>>"%installdir%\etc\minttyrc"
goto etcok
:noetc
rem 3.8.0.3: remove previous troubleshooting patch
if exist "%installdir%\etc\minttyrc" del "%installdir%\etc\minttyrc"
if exist "%installdir%\etc" rmdir "%installdir%\etc"
:etcok
rem create config file if it does not yet exist
if not exist "%configdir%\config" echo # To use common configuration in %%APPDATA%%\mintty, simply remove this file>"%configdir%\config"
if exist "%configdir%\config" goto appconfig
echo # To use common configuration in %%APPDATA%%\mintty, simply remove this file>"%configdir%\config"
if "%3" == "/P" echo # Do not remove this file for WSLtty Portable>>"%configdir%\config"
:appconfig
rem skip configuration for WSLtty Portable
if "%3" == "/P" goto end
rem distro-specific stuff: shortcuts and launch scripts
cd /D "%installdir%"
echo Configuring for WSL distributions

213
makefile
View File

@@ -4,39 +4,28 @@
# make targets:
# make [all] build a distributable installer (default)
# make pkg build an installer, bypassing the system checks
# make build build the software (no installer)
# make install install wsltty locally from build (no installer needed)
# make wsltty build the software, using the local copy of mintty
# wsltty release
ver=3.4.1
##############################
# mintty and wsltty release versions
wslttyver=3.8.0.3
# wsltty appx release - must have 4 parts!
verx=3.4.1.0
minttyver=3.8.0
minrepo=git@github.com:mintty/mintty.git
##############################
# mintty release version
minttyver=3.4.1
# wsltty appx release (obsolete) - must have 4 parts!
appxver=$(wslttyver).1
##############################
# wslbridge2 repository
# wslbridge2 repository and release version
repo=Biswa96/wslbridge2
# wslbridge2 master release version
wslbridgever=0.6
# wslbridge2 latest version
#archive=master
#wslbridgedir=wslbridge2-$(archive)
# wslbridge2 branch or commit version (from fix-window-resize branch) and dir
#commit=70e0dcea1db122d076ce1578f2a45280cc92d09f
#commit=8b6dd7ee2b3102d72248990c21764c5cf86c6612
#archive=$(commit)
#wslbridgedir=wslbridge2-$(archive)
wslbridgever=0.13
# wslbridge2 fork repository and version
#repo=mintty/wslbridge2
@@ -48,13 +37,30 @@ archive=v$(wslbridgever)
wslbridgedir=wslbridge2-$(wslbridgever)
# wslbridge2 latest version
#archive=master
#wslbridgedir=wslbridge2-$(archive)
# wslbridge2 branch or commit version (from fix-window-resize branch) and dir
#commit=70e0dcea1db122d076ce1578f2a45280cc92d09f
#commit=8b6dd7ee2b3102d72248990c21764c5cf86c6612
# trying post-0.12 WSL V2 patches:
#commit=5b2b652d1a7355b004e7860b4370a585737e5ac9
#commit=274530b35a05df203d3a69f0e28d5015844f39bd
# pixel size patch + fix (retagged as 0.13):
#commit=a7162d852ff438d2d5a8dd8dae61795addb3d980
#archive=$(commit)
#wslbridgedir=wslbridge2-$(archive)
##############################
# mintty branch or commit version
#minttyver=master
# wslbridge branch or commit to build from source;
wslbridge=wslbridge-frontend wslbridge-backend
wslbridge=wslbridge-source wslbridge-frontend wslbridge-backend
##############################
# build backend on a musl-libc-based distribution
@@ -71,10 +77,15 @@ WINSDKVER=`regtool list '$(WINSDKKEY)' | sed -e '$$ q' -e d`
all: all-$(notdir $(CURDIR))
all-wsltty: check pkg
# targets and version checking
all-wsltty: check committed pkg
all-wsltty.appx: appx
committed:
if git status -suno | sed -e "s,^..,," | grep .; then false; fi
#############################################################################
# target checking and some defs
@@ -118,14 +129,14 @@ checkarch:
#############################################################################
# patch version information for appx package configuration
fix-verx:
fix-appxver:
echo patching $(WINSDKVER) into Launcher config
cd Launcher; sed -i~ -e "/<supportedRuntime / s,Version=v[.0-9]*,Version=$(WINSDKVER)," app.config
echo patched app.config
cd Launcher; sed -i~ -e "/<TargetFrameworkVersion>/ s,v[.0-9]*,$(WINSDKVER)," Launcher.csproj
echo patched Launcher.csproj
echo patching $(verx) into app config
sed -i~ -e '/<Identity / s,Version="[.0-9]*",Version="$(verx)",' AppxManifest.xml
echo patching $(appxver) into app config
sed -i~ -e '/<Identity / s,Version="[.0-9]*",Version="$(appxver)",' AppxManifest.xml
echo patched AppxManifest.xml
#############################################################################
@@ -146,10 +157,21 @@ $(wslbridgedir).zip:
wslbridge-source: $(wslbridgedir).zip
unzip -o $(wslbridgedir).zip
cp $(wslbridgedir)/LICENSE LICENSE.wslbridge2
# patch
cd $(wslbridgedir); patch -p1 < ../0001-notify-size-change-inband.patch
# the following two patches are obsolete with wslbridge2 v0.9
# patch to fix #220
# test case in mintty: (sleep 0.1; echo -e "\e[31;80t") & wslbridge2
#cd $(wslbridgedir); patch -p1 < ../0001-notify-size-change-inband.patch
# patch to https://github.com/Biswa96/wslbridge2/commit/41575379b416703c49e2687e957440239a4cdfb7
#cd $(wslbridgedir); patch -p0 < ../0002-add-com-for-lifted-wsl.patch
# patch to fix WSL 2 launching, again
# this was replaced with another patch upstream
#cd $(wslbridgedir); patch -p1 < ../0012-get-vmid-from-registry.patch
# patch to add WINCH/pty pixel size support (Biswa96/wslbridge2#44)
#cd $(wslbridgedir); patch -p1 < ../0013-pty-pixel-size.patch
# patch to fix the pixel patch of 0.13
#cd $(wslbridgedir); patch -p1 < ../0013-pty-pixel-size-fix.patch
wslbridge-frontend: wslbridge-source
wslbridge-frontend:
echo ------------- Compiling wslbridge2 frontend
mkdir -p bin
# frontend build
@@ -159,7 +181,7 @@ wslbridge-frontend: wslbridge-source
windir=$(shell cd "${WINDIR}"; pwd)
wslbridge-backend: wslbridge-source
wslbridge-backend:
echo ------------- Compiling wslbridge2 backend
#uname -m | grep x86_64
mkdir -p bin
@@ -170,19 +192,26 @@ wslbridge-backend: wslbridge-source
# extract binaries
cp $(wslbridgedir)/bin/wslbridge2-backend bin/
mintty-get:
mintty-get: mintty-git # mintty-download or mintty-git
cp mintty-$(minttyver)/icon/terminal.ico mintty.ico
mintty-download:
$(wgeto) https://github.com/mintty/mintty/archive/$(minttyver).zip -o mintty-$(minttyver).zip
unzip -o mintty-$(minttyver).zip
cp mintty-$(minttyver)/icon/terminal.ico mintty.ico
mintty-git:
test -d mintty-$(minttyver) || git clone --branch $(minttyver) --depth 1 $(minrepo) mintty-$(minttyver)
cd mintty-$(minttyver); git checkout $(minttyver)
wslbuild=LDFLAGS="-static -static-libgcc -s"
appxbuild=$(wslbuild) CCOPT=-DWSLTTY_APPX
wslversion=VERSION_SUFFIX=" wsltty $(ver)" WSLTTY_VERSION="$(ver)"
appxversion=VERSION_SUFFIX=" wsltty appx $(verx)" WSLTTY_VERSION="$(verx)"
wslversion=VERSION_SUFFIX=" wsltty $(wslttyver)" WSLTTY_VERSION="$(wslttyver)"
appxversion=VERSION_SUFFIX=" wsltty appx $(appxver)" WSLTTY_VERSION="$(appxver)"
mintty-build:
# ensure rebuild of version-specific check and message
rm -f mintty-$(minttyver)/bin/*/windialog.o
rm -f mintty-$(minttyver)/bin/*/winmain.o
# build mintty
cd mintty-$(minttyver)/src; make $(wslbuild) $(wslversion)
mkdir -p bin
@@ -198,18 +227,25 @@ mintty-build-appx:
cp mintty-$(minttyver)/bin/mintty.exe bin/
strip bin/mintty.exe
terminfoxt=78/xterm 78/xterm-vt220 78/xterm-256color 78/xterm-direct
terminfovt=76/vt100 76/vt220 76/vt340 76/vt420 76/vt525
terminfomt=6d/mintty 6d/mintty-direct
terminfo=$(terminfoxt) $(terminfovt) $(terminfomt)
mintty-pkg:
cp mintty-$(minttyver)/LICENSE LICENSE.mintty
cd mintty-$(minttyver)/lang; zoo a lang *.po; mv lang.zoo ../../
cd mintty-$(minttyver)/themes; zoo a themes *[!~]; mv themes.zoo ../../
cd mintty-$(minttyver)/sounds; zoo a sounds *.wav *.WAV *.md; mv sounds.zoo ../../
cd /usr/share/terminfo; zoo a /tmp/terminfo $(terminfo)
mv /tmp/terminfo.zoo .
# add charnames.txt to support "Character Info"
cd mintty-$(minttyver)/src; sh ./mknames
cp mintty-$(minttyver)/src/charnames.txt .
mintty-appx:
mkdir -p usr/share/mintty
cd usr/share/mintty; mkdir -p lang themes sounds info
cd usr/share/mintty; mkdir -p lang themes sounds info emojis
cp mintty-$(minttyver)/lang/*.po usr/share/mintty/lang/
cp mintty-$(minttyver)/themes/*[!~] usr/share/mintty/themes/
cp mintty-$(minttyver)/sounds/*.wav usr/share/mintty/sounds/
@@ -217,6 +253,7 @@ mintty-appx:
# add charnames.txt to support "Character Info"
cd mintty-$(minttyver)/src; sh ./mknames
cp mintty-$(minttyver)/src/charnames.txt usr/share/mintty/info/
cp /usr/share/mintty/emojis/get*[!~] usr/share/mintty/emojis/
cygwin: # mkshortcutexe
mkdir -p bin
@@ -240,38 +277,71 @@ appx-bin:
cp /bin/cygwin1.dll bin/
cp /bin/cygwin-console-helper.exe bin/
cop: ver
mkdir -p rel
rm -f rel/wsltty-$(ver)-install-$(arch).exe
sed -e "s,%version%,$(ver)," -e "s,%arch%,$(arch)," makewinx.cfg > rel/wsltty.SED
cp bin/cygwin1.dll rel/
cp bin/cygwin-console-helper.exe rel/
cp bin/dash.exe rel/
cp bin/regtool.exe rel/
cp bin/mintty.exe rel/
cp bin/zoo.exe rel/
cp lang.zoo rel/
cp themes.zoo rel/
cp sounds.zoo rel/
cp charnames.txt rel/
cp bin/wslbridge2.exe rel/
cp bin/wslbridge2-backend rel/
cp mkshortcut.vbs rel/
#cp bin/mkshortcut.exe rel/
#cp bin/cygpopt-0.dll rel/
#cp bin/cygiconv-2.dll rel/
#cp bin/cygintl-8.dll rel/
cp LICENSE.* rel/
cp VERSION rel/
cp *.lnk rel/
cp *.ico rel/
cp *.url rel/
cp *.bat rel/
cp *.sh rel/
cp *.vbs rel/
CAB=wsltty-$(wslttyver)-$(arch)
cab: cop
cd rel; iexpress /n wsltty.SED
copcab: ver
mkdir -p $(CAB)
cp bin/cygwin1.dll $(CAB)/
cp bin/cygwin-console-helper.exe $(CAB)/
cp bin/dash.exe $(CAB)/
cp bin/regtool.exe $(CAB)/
cp bin/mintty.exe $(CAB)/
cp bin/zoo.exe $(CAB)/
cp lang.zoo $(CAB)/
cp themes.zoo $(CAB)/
cp sounds.zoo $(CAB)/
cp terminfo.zoo $(CAB)/
cp charnames.txt $(CAB)/
cp bin/wslbridge2.exe $(CAB)/
cp bin/wslbridge2-backend $(CAB)/
cp mkshortcut.vbs $(CAB)/
#cp bin/mkshortcut.exe $(CAB)/
#cp bin/cygpopt-0.dll $(CAB)/
#cp bin/cygiconv-2.dll $(CAB)/
#cp bin/cygintl-8.dll $(CAB)/
cp LICENSE.* $(CAB)/
cp VERSION $(CAB)/
cp *.lnk $(CAB)/
cp *.ico $(CAB)/
cp *.url $(CAB)/
cp *.bat $(CAB)/
cp config-distros.sh $(CAB)/
cp mkshortcut.vbs $(CAB)/
cp mintty-$(minttyver)/tools/get*[!~] $(CAB)/
cop: copcab
mkdir -p rel
cp -fl $(CAB)/* rel/
installer: cop cab normal-installer silent-installer portable-installer
cab:
# build cab archive
lcab -r $(CAB) rel/$(CAB).cab
normal-installer:
# prepare build of installer
rm -f rel/$(CAB)-install.exe
sed -e "s,%version%,$(wslttyver)," -e "s,%arch%,$(arch)," makewinx.cfg > rel/wsltty.SED
# build installer
cd rel; iexpress /n /q wsltty.SED
silent-installer:
# prepare build of installer
rm -f rel/$(CAB)-install-quiet.exe
cd rel; sed -e "/ShowInstallProgramWindow/ s/0/1/" -e "/HideExtractAnimation/ s/0/1/" -e "/InstallPrompt/ s/=.*/=/" -e "/FinishMessage/ s/=.*/=/" -e "/TargetName/ s/install.exe/install-quiet.exe/" wsltty.SED > wsltty-quiet.SED
# build installer
cd rel; iexpress /n /q wsltty-quiet.SED
InstallPrompt=Install Mintty terminal for WSL Portable?
FinishMessage=Mintty for WSL Portable installation finished
portable-installer:
# prepare build of installer
rm -f rel/$(CAB)-install-portable.exe
cd rel; sed -e "/InstallPrompt/ s/=.*/=$(InstallPrompt)/" -e "/FinishMessage/ s/=.*/=$(FinishMessage)/" -e "/AppLaunched/ s/install/install-portable/" -e "/TargetName/ s/install.exe/install-portable.exe/" wsltty.SED > wsltty-portable.SED
# build installer
cd rel; iexpress /n /q wsltty-portable.SED
install: cop installbat
@@ -279,7 +349,7 @@ installbat:
cd rel; cmd /C install
ver:
echo $(ver) > VERSION
echo $(wslttyver) > VERSION
mintty: mintty-get mintty-build
@@ -288,14 +358,17 @@ mintty-usr: mintty-get mintty-appx
# local wsltty build target:
wsltty: wslbridge cygwin mintty-build mintty-pkg
# build software without installer:
build: wslbridge cygwin mintty-get mintty-build mintty-pkg
# standalone wsltty package build target:
pkg: wslbridge cygwin mintty-get mintty-build mintty-pkg cab
pkg: wslbridge cygwin mintty-get mintty-build mintty-pkg installer
# appx package contents target:
wsltty-appx: wslbridge appx-bin mintty-get mintty-build-appx mintty-appx
# appx package target:
appx: wsltty-appx fix-verx
appx: wsltty-appx fix-appxver
sh ./build.sh
#############################################################################

View File

@@ -1,5 +1,5 @@
[Version]
Class=IEXPRESS
Class=IExpress
SEDVersion=3
[Options]
@@ -23,74 +23,50 @@ UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[Strings]
InstallPrompt=Install Mintty terminal for WSL (Windows Subsystem for Linux)?
InstallPrompt=Install Mintty terminal for WSL?
DisplayLicense=
FinishMessage=Mintty for WSL installed - for documentation and configuration see https://github.com/mintty/wsltty
TargetName=wsltty-%version%-install-%arch%.exe
TargetName=wsltty-%version%-%arch%-install.exe
FriendlyName=wsltty
AppLaunched=cmd.exe /c install.bat
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="cygwin1.dll"
FILE1="cygwin-console-helper.exe"
FILE2="mintty.exe"
FILE3="wslbridge2.exe"
FILE4="wslbridge2-backend"
FILE5="LICENSE.mintty"
FILE6="LICENSE.wslbridge2"
FILE7="config-distros.sh"
FILE8="configure WSL shortcuts.lnk"
FILE9="charnames.txt"
FILE10="VERSION"
FILE11="dash.exe"
FILE12="regtool.exe"
FILE13="install.bat"
FILE14="uninstall.bat"
FILE15="tux.ico"
FILE16="add to context menu.lnk"
FILE17="add default to context menu.lnk"
FILE18="remove from context menu.lnk"
FILE19="wsltty home & help.url"
FILE20="zoo.exe"
FILE21="lang.zoo"
FILE22="themes.zoo"
FILE23="sounds.zoo"
FILE24="mintty.ico"
FILE25="mkshortcut.vbs"
FILE26="dequote.bat"
FILE27="cmd2.bat"
[SourceFiles]
SourceFiles0=.
[SourceFiles0]
%FILE0%=
%FILE1%=
%FILE2%=
%FILE3%=
%FILE4%=
%FILE5%=
%FILE6%=
%FILE7%=
%FILE8%=
%FILE9%=
%FILE10%=
%FILE11%=
%FILE12%=
%FILE13%=
%FILE14%=
%FILE15%=
%FILE16%=
%FILE17%=
%FILE18%=
%FILE19%=
%FILE20%=
%FILE21%=
%FILE22%=
%FILE23%=
%FILE24%=
%FILE25%=
%FILE26%=
%FILE27%=
cygwin1.dll=
cygwin-console-helper.exe=
mintty.exe=
wslbridge2.exe=
wslbridge2-backend=
LICENSE.mintty=
LICENSE.wslbridge2=
config-distros.sh=
configure WSL shortcuts.lnk=
charnames.txt=
VERSION=
dash.exe=
regtool.exe=
install.bat=
uninstall.bat=
tux.ico=
add to context menu.lnk=
add default to context menu.lnk=
remove from context menu.lnk=
wsltty home & help.url=
zoo.exe=
lang.zoo=
themes.zoo=
sounds.zoo=
terminfo.zoo=
mintty.ico=
mkshortcut.vbs=
dequote.bat=
cmd2.bat=
install-portable.bat=
getemojis=
getflags=

View File

@@ -29,10 +29,14 @@ rem wscript.echo "minttyargs: " & minttyargs
rem wscript.echo lnk.Arguments
rem Start in:
rem Working directory; Arguments.Named would take "/wdir:C:\..." parameters
rem wdir = Wscript.Arguments.Named("wdir")
rem Working directory; function ExpandEnvironmentStrings cannot pass empty
wdir = wshell.ExpandEnvironmentStrings("%wdir%")
if IsEmpty(wdir) then
lnk.WorkingDirectory = "%USERPROFILE%"
elseif wdir = "." then
lnk.WorkingDirectory = ""
else
lnk.WorkingDirectory = wdir
end if