1
0
mirror of https://github.com/mintty/wsltty.git synced 2025-11-03 08:31:51 +00:00

Compare commits

...

42 Commits
0.6.2 ... 1.7.9

Author SHA1 Message Date
mintty
4a55503707 1.7.9 2017-07-28 21:32:11 +02:00
mintty
48f69cb11f support new WSL distribution model (#52) 2017-07-28 14:14:51 +02:00
mintty
0a39c664e2 screenshot (#51) 2017-07-04 11:11:21 +02:00
mintty
fecb6c49af 0.7.8.3 2017-07-01 16:44:15 +02:00
mintty
b017982c19 add VERSION_SUFFIX package indication (mintty/wsltty#35, mintty/wsltty#50) 2017-06-29 17:41:41 +02:00
mintty
f6016239df fix wslbridge ref (#49?, likely not) 2017-06-26 13:25:08 +02:00
mintty
b5349bf6db 0.7.8.1 2017-06-24 01:49:27 +02:00
mintty
3b1ecb2e01 0.7.8 2017-06-24 01:32:20 +02:00
mintty
beed642144 workaround to ensure unique configuration location (#45) 2017-05-25 18:07:10 +02:00
mintty
a3c32980e7 add --configdir to default shortcuts, just in case (~#45) 2017-05-24 15:53:43 +02:00
mintty
e6ce36e2bd fix default config directory 2017-05-24 15:35:59 +02:00
mintty
d865b01135 add section Invocation, discourage from starting mintty.exe directly (#42) 2017-05-22 19:49:35 +02:00
mintty
1e7bb5fc6e 0.7.7.1: add proper --configdir to context menu entries (#42) 2017-05-22 15:32:56 +02:00
mintty
8ffb732330 adapted installation and configuration hints to 0.7.7 2017-05-20 20:31:33 +02:00
mintty
0d1f0875be 0.7.7; install target (#30, #38, #40) 2017-05-19 22:20:23 +02:00
mintty
d7c73fb40e revise installation; change config location, flexible install target 2017-05-19 22:19:20 +02:00
mintty
1049ca2baf Merge branch 'master' of https://github.com/mintty/wsltty 2017-05-11 12:35:36 +02:00
mintty
088f3bc06b clarify wsltty HOME vs WSL home (#42, #40) 2017-05-11 12:33:37 +02:00
mintty
28dfd66e09 hint to unblock installer if needed (#32) 2017-05-06 19:42:03 +02:00
mintty
3b6a356585 0.7.6 2017-04-14 01:08:20 +02:00
mintty
195f4069b4 0.7.5 2017-03-11 21:19:25 +01:00
mintty
9b3b1a89aa new section "Shell selection" 2017-01-31 12:51:03 +01:00
mintty
4e937486f5 2017-01-30 16:31:17 +01:00
mintty
a9a9ad5155 0.7.4 2017-01-27 14:49:23 +01:00
mintty
b4a26196eb add 'make help' and 'make wsltty' targets 2017-01-27 14:49:06 +01:00
mintty
4bca6510b5 include localization files 2017-01-06 16:47:13 +01:00
mintty
01274fc94c mintty 2.7.3 2016-12-22 14:55:37 +01:00
mintty
d7c156c2fa update mintty 2.7.1 2016-12-04 22:58:18 +01:00
mintty
c820364bd6 adapt new configuration setup 2016-11-18 10:30:56 +01:00
mintty
c3c54a397f tweak 2016-11-18 00:17:56 +01:00
Thomas Wolff
d8c9b21b9c 2016-11-16 16:47:52 +01:00
Thomas Wolff
ae637e4645 updates for release 0.7.0 2016-11-16 16:46:50 +01:00
Thomas Wolff
81b586a86a wslbridge -> 0.2.1 2016-11-15 12:41:19 +01:00
Thomas Wolff
0ae7cb6d80 2016-11-14 16:42:47 +01:00
Thomas Wolff
e1a21714b9 mintty -> specific version (2.7.0); wslbridge -> master version 2016-11-14 16:42:27 +01:00
mintty
e9306241d4 short instructions for tweaking installation directory (#11) 2016-10-16 21:31:56 +02:00
mintty
9b4fade447 Merge pull request #11 from jmlucjav/master
simplify tweaking of installation dir
2016-10-16 21:28:39 +02:00
jmlucjav
6419d8c3a2 allow configuration of installation dir 2016-10-15 21:59:53 +02:00
Thomas Wolff
b735929c5c Describe locations of mintty settings file (#9). 2016-10-11 18:05:11 +02:00
Thomas Wolff
edf7787539 Use new mintty option --wsl to adapt file/folder drag-and-drop pasting (#8). 2016-10-11 18:04:59 +02:00
Thomas Wolff
98d4697bca Add Shortcut and command script variants changing to Linux home directory (#3). 2016-10-11 18:04:15 +02:00
Thomas Wolff
1106032955 add license files 2016-10-11 18:02:31 +02:00
23 changed files with 709 additions and 120 deletions

Binary file not shown.

28
LICENSE.mintty Normal file
View File

@@ -0,0 +1,28 @@
mintty is copyright 2008-13 Andy Koppe, 2015-16 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.
The bundling clause can be found in the accompanying file LICENSE.bundling.
The GPL license text can be found in the accompanying file LICENSE.GPL,
at /usr/share/doc/common-licenses/GPL-3.0 on Cygwin installs,
or on the GNU website at http://www.gnu.org/licenses/gpl.html.
Sources are available from the project page at http://mintty.github.io/.
Based on PuTTY version 0.60 by Simon Tatham and contributors.
Big thanks to everyone involved for their work on PuTTY.
See LICENSE.PuTTY for PuTTY's copyright notice, contributors, and license.
The sources of PuTTY 0.60 can be downloaded from
ftp://ftp.chiark.greenend.org.uk/users/sgtatham/putty-0.60.
Sixel code (sixel.c) is relicensed under GPL like mintty with the
permission of its author (kmiya@culti); Sixel colour conversion code
(sixel_hls.c) is licensed by its author Ross Combs under the license
quoted in the source file.
The program icon is the apps/utilities-terminal icon from KDE's Oxygen theme,
retrieved from http://websvn.kde.org/trunk/KDE/kdebase/runtime/pics/oxygen.
Thanks to the KDE artists for their sleek design. The Oxygen icons are licensed
under the terms of the LGPLv3; see LICENSE.Oxygen for details.

21
LICENSE.wslbridge Normal file
View File

@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016 Ryan Prichard
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.

143
README.md
View File

@@ -1,37 +1,138 @@
Mintty as a terminal for Bash on Ubuntu on Windows / WSL.
Mintty as a terminal for WSL (Windows Subsystem for Linux).
<img align=right src=wsltty.png>
### Overview ###
Run the [installer](https://github.com/mintty/wsltty/releases) to install
* wsltty package components (see below) in the users application directory (where WSL is also installed)
* an empty wsltty “home directory” to enable storage of a mintty config file
* a Desktop Shortcut and a Start Menu Shortcut to start WSL with a login bash in the *Windows user profile* directory; to start in the Linux home directory instead, add a `cd` command to your Linux `$HOME/.profile` script
* context menu entries for Windows Explorer to start WSL with a bash in the respective directory
* a script `wsl.bat` to invoke wsltty manually; copy the script from `%LOCALAPPDATA%\wsltty` to `%SYSTEMROOT%\System32` if desired
WSLtty components
* wsltty package components (see below) in the users local application folder
`%LOCALAPPDATA%`
* a wsltty configuration directory in the users application folder `%APPDATA%`
(“home”-located configuration files from a previously installed version
will be migrated to the new default location)
* Start Menu shortcuts to start a WSL shell (with some variations, see below)
* `*.bat` scripts to invoke WSL from the command line (see below)
* optional context menu entries for Windows Explorer to start a WSL shell in the respective folder
* install/uninstall context menu items from Start Menu subfolder `WSLtty`
* an uninstall script that can be invoked manually to remove shortcuts and context menu entries
### Installation ###
#### WSLtty installer ####
Run the [installer](https://github.com/mintty/wsltty/releases) to install
the components listed above.
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.
#### Installation from source repository ####
Download or checkout the wsltty repository.
Invoke `make`, then `make install`.
Note this has to be done within a Cygwin environment.
#### Installation to non-default locations ####
(For experts)
Within the installation process, provide parameters to the script `install.bat`.
The optional first parameter designates the installation target,
the optional second parameter designates the configuration directory.
### Invocation ###
WSLtty can be invoked with
* installed Start Menu shortcuts (or Desktop shortcuts if copied there)
* *.bat scripts
* Explorer context menu (if installed from the Start Menu `WSLtty` subfolder)
Starting the mintty terminal directly from the WSLtty installation location
is discouraged because that would bypass some essential options.
### Configuration ###
#### Command line script wsl.bat ####
#### Command line scripts `wsl*.bat` ####
* To enable invocation of this script from WIN+R or from cmd.exe,
copy it from `%LOCALAPPDATA%\wsltty` into `%SYSTEMROOT%\System32`.
(The package does not do this to avoid trouble with missing admin privileges.)
* To start the terminal in the current directory when calling the script from the command line,
modify it (or a copy for this purpose) and remove the final `-l` parameter.
* To enforce starting in your Linux home directory, do *either* of:
* On Linux side, add a `cd` command to your `$HOME/.profile`.
* In the script (or a copy for this purpose), add `-C~` as first parameter of `wslbridge`: `... /bin/wslbridge -C~ -t /bin/bash -l`.
WSLtty installs the following scripts into `%LOCALAPPDATA%\Microsoft\WindowsApps`
(and a copy in its application folder `%LOCALAPPDATA%\wsltty`):
#### Desktop shortcut and Start menu shortcut ####
* For each installed WSL distribution D, D`.bat` to start in the current folder/directory
* For each installed WSL distribution D, D`~.bat` to start in the WSL user home
* `wsl.bat` to start the default WSL installation in the current folder/directory
* `wsl~.bat` to start the default WSL installation in the WSL user home
* `wsl-l.bat` to start the default WSL installation with a login shell
To enforce starting in your Linux home directory, do *either* of:
* On Linux side, add a `cd` command to your `$HOME/.profile`.
* Open Shortcut Properties; in the Target, add `-C~` as first parameter of `wslbridge`: `... /bin/wslbridge -C~ -t /bin/bash -l`.
Given that `%LOCALAPPDATA%\Microsoft\WindowsApps` is in your PATH,
the scripts can be invoked from cmd.exe, PowerShell, or via WIN+R.
#### Start Menu and Desktop shortcuts ####
In the Start Menu, the following shortcuts are installed:
* For each installed WSL distribution D, D` in Mintty` to start in the WSL user home
In the Start Menu subfolder WSLtty, the following shortcuts are installed:
* For each installed WSL distribution D, D` in Mintty` to start in the Windows %USERPROFILE% home
* For each installed WSL distribution D, D` ~ in Mintty` to start in the WSL user home
* `WSL % in Mintty` to start the default WSL installation in the Windows %USERPROFILE% home
* `WSL ~ in Mintty` to start the default WSL installation in the WSL user home
* `WSL -l in Mintty` to start the default WSL installation with a login shell
WSLtty does not install Desktop shortcuts. If you want them, copy the
desired ones from the Start Menu subfolder `WSLtty`.
To ensure a login shell to start in your Linux home directory,
add a `cd` command to your `$HOME/.profile` on Linux side.
#### Context menu entries ####
WSLtty provides context menu entries for all installed WSL distributions,
to start a respective WSL shell in a specific folder from an Explorer window.
They are not installed by default.
To add or remove context menu entries, run the respective script from the
Start Menu subfolder `WSLtty`.
#### Mintty settings ####
Mintty can maintain its configuration file in various locations,
with the following precedence:
* file given with mintty option `-c` (not used by wsltty default installation)
* file `config` in directory given with mintty option `--configdir`
* This is `%APPDATA%\wsltty\config` in the default wsltty installation.
* `%HOME%\.minttyrc` (usage deprecated with wsltty)
* `%HOME%\.config\mintty\config` (usage deprecated with wsltty)
* `%APPDATA%\mintty\config`
* `%LOCALAPPDATA%\wsltty\etc\minttyrc` (usage deprecated with wsltty)
Note:
* `%APPDATA%\wsltty\config` is the new user configuration file location.
Further subdirectories of `%APPDATA%\wsltty` are used for language,
themes, and sounds resource configuration.
Note the distinction from `%LOCALAPPDATA%\wsltty` which is the default
wsltty software installation location.
* The `%APPDATA%\mintty\config` option provides the possibility to
maintain common mintty settings for various installations (like
wsltty, Cygwin, MinGW/msys, Git for Windows, MinEd for Windows).
* (About deprecated options) By default, `%HOME%` would refer to the
root directory of the cygwin standalone installation hosting wsltty.
So `%HOME%` would mean `%LOCALAPPDATA%\wsltty\home\%USERNAME%`.
If you define `HOME` at Windows level, this changes accordingly.
Note, however, that the WSL `HOME` is a completely different setting.
#### Shell selection ####
To invoke your favourite shell, replace `/bin/bash` with its pathname
in the Desktop or Start Menu shortcuts and `*.bat` launch scripts,
or Explorer context menu commands.
### Components ###
For mintty, see the [Mintty homepage](http://mintty.github.io/).
For mintty, see the [Mintty homepage](http://mintty.github.io/)
(with further screenshots),
the [Mintty manual page](http://mintty.github.io/mintty.1.html),
<br>and the [Mintty Wiki](https://github.com/mintty/mintty/wiki),
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)).

1
VERSION Normal file
View File

@@ -0,0 +1 @@
0.7.9

BIN
WSL % in Mintty.lnk Executable file

Binary file not shown.

BIN
WSL -l in Mintty.lnk Executable file

Binary file not shown.

BIN
WSL ~ in Mintty.lnk Executable file

Binary file not shown.

BIN
add to context menu.lnk Executable file

Binary file not shown.

159
config-distros.sh Executable file
View File

@@ -0,0 +1,159 @@
#! /bin/sh
contextmenu=false
remove=false
case "$1" in
-contextmenu) contextmenu=true
shift;;
-contextmenu-remove)
contextmenu=true
remove=true
shift;;
-shortcuts-remove)
remove=true
shift;;
esac
# test w/o WSL: call this script with REGTOOLFAKE=true dash config-distros.sh
if ${REGTOOLFAKE:-false}
then
regtool () {
case "$1" in
-*) shift;;
esac
key=`echo $2 | sed -e 's,.*{\(.*\)}.*,\1,' -e t -e d`
case "$1.$2" in
list.*) if $contextmenu
then echo "{0}"
else echo "{1}"; echo "{2}"
fi;;
get.*/DistributionName) echo "distro$key";;
get.*/BasePath) echo "C:\\Program\\{$key}\\State";;
get.*/PackageFamilyName) echo "distro{$key}";;
get.*/PackageFullName) echo "C:\\Program\\{$key}";;
esac
}
fi
# dash built-in echo enforces interpretation of \t etc
echoc () {
cmd /c echo $*
}
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 %distro% in current directory>> %1.bat
echo %target% -i "%icon%" %minttyargs% %bridgeargs%>> %1.bat
echo Created %1.bat
/EOB
PATH=/bin:$PATH
lxss="/HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Lxss"
schema="/HKEY_CURRENT_USER/Software/Classes/Local Settings/Software/Microsoft/Windows/CurrentVersion/AppModel/SystemAppData"
(regtool list "$lxss" 2>/dev/null || echo "No WSL packages registered" >&2) |
while read guid
do
case $guid in
{*)
distro=`regtool get "$lxss/$guid/DistributionName"`
case "$distro" in
Legacy) name="Bash on Windows"
launch=
launcher="$SYSTEMROOT/System32/bash.exe"
;;
*) name="$distro"
launch="$distro"
launcher="$LOCALAPPDATA/Microsoft/WindowsApps/$distro.exe"
;;
esac
basepath=`regtool get "$lxss/$guid/BasePath"`
if package=`regtool -q get "$lxss/$guid/PackageFamilyName"`
then instdir=`regtool get "$schema/$package/Schemas/PackageFullName"`
if [ -r "$PROGRAMFILES/WindowsApps/$instdir/images/icon.ico" ]
then icon="%PROGRAMFILES%/WindowsApps/$instdir/images/icon.ico"
else icon="%LOCALAPPDATA%/wsltty/wsl.ico"
fi
root="$basepath/rootfs"
else icon="%LOCALAPPDATA%/lxss/bash.ico"
root="$basepath"
fi
echoc "distro $distro"
echoc "- guid $guid"
echoc "- (launcher $launcher)"
echoc "- icon $icon"
echoc "- root $root"
target='%LOCALAPPDATA%\wsltty\bin\mintty.exe'
minttyargs='--wsl --rootfs="'"$root"'" -h err --configdir="%APPDATA%\wsltty" -o Locale=C -o Charset=UTF-8 /bin/wslbridge '
#if [ -z "$launch" ]
#then bridgeargs='-t /bin/bash'
#else bridgeargs='-l "'"$launch"'" -t /bin/bash'
#fi
bridgeargs='--distro-guid "'"$guid"'" -t /bin/bash'
export target minttyargs bridgeargs icon
export distro
if $contextmenu
then
# create context menu entry
#cmd /C mkcontext "$name"
direckey='HKEY_CURRENT_USER\Software\Classes\Directory'
if $remove
then
reg delete "$direckey\\shell\\$name" /f
reg delete "$direckey\\Background\\shell\\$name" /f
else
reg add "$direckey\\shell\\$name" /d "$name in Mintty Here" /f
reg add "$direckey\\shell\\$name" /v Icon /d "$icon" /f
cmd /C reg add "$direckey\\shell\\$name\\command" /d "\"$target\" -i \"$icon\" --dir \"%1\" $minttyargs $brigdeargs" /f
reg add "$direckey\\Background\\shell\\$name" /d "$name in Mintty Here" /f
reg add "$direckey\\Background\\shell\\$name" /v Icon /d "$icon" /f
cmd /C reg add "$direckey\\Background\\shell\\$name\\command" /d "\"$target\" -i \"$icon\" $minttyargs $brigdeargs" /f
fi
else
if $remove
then
cmd /C del "%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\$name ~ in Mintty.lnk"
cmd /C del "%LOCALAPPDATA%\\Microsoft\\WindowsApps\\$name.bat"
cmd /C del "%LOCALAPPDATA%\\Microsoft\\WindowsApps\\$name~.bat"
else
# create desktop/start menu shortcut
cscript /nologo mkshortcut.vbs "/name:$name in Mintty"
# copy to Start Menu WSLtty subfolder
rem cmd /C mkdir "%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\WSLtty\\WinUser"
cmd /C copy "$name in Mintty.lnk" "%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\WSLtty"
# create command-line launch script
cmd /C mkbat.bat "$name"
#cmd /C mkbat.bat "$name in Mintty"
# copy to WSLtty home and to WindowsApps launch folder
cmd /C copy "$name.bat" "%LOCALAPPDATA%\\wsltty\\$name.bat"
cmd /C copy "$name.bat" "%LOCALAPPDATA%\\Microsoft\\WindowsApps\\$name.bat"
# prepare versions to target WSL home directory
bridgeargs="-C~ $bridgeargs"
# create optional addition desktop shortcut
cscript /nologo mkshortcut.vbs "/name:$name ~ in Mintty"
# copy to Start Menu
cmd /C copy "$name ~ in Mintty.lnk" "%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs"
# create command-line launch script
cmd /C mkbat.bat "$name~"
#cmd /C mkbat.bat "$name~ in Mintty"
# copy to WSLtty home and to WindowsApps launch folder
cmd /C copy "$name~.bat" "%LOCALAPPDATA%\\wsltty\\$name~.bat"
cmd /C copy "$name~.bat" "%LOCALAPPDATA%\\Microsoft\\WindowsApps\\$name~.bat"
fi
fi;;
esac
done

BIN
configure WSL shortcuts.lnk Executable file

Binary file not shown.

View File

@@ -1,71 +1,146 @@
rem @echo off
@echo off
set refinstalldir=%%LOCALAPPDATA%%\wsltty
set installdir=%LOCALAPPDATA%\wsltty
set refconfigdir=%%APPDATA%%\wsltty
set configdir=%APPDATA%\wsltty
set oldroot=%installdir%
set oldhomedir=%installdir%\home\%USERNAME%
set oldconfigdir=%oldhomedir%\.config\mintty
if not "%1" == "" set refinstalldir=%1 && set installdir=%1
if not "%2" == "" set refconfigdir=%2 && set configdir=%2
:deploy
mkdir "%LOCALAPPDATA%\wsltty"
copy LICENSE.mintty "%LOCALAPPDATA%\wsltty"
copy LICENSE.wslbridge "%LOCALAPPDATA%\wsltty"
copy uninstall.bat "%LOCALAPPDATA%\wsltty"
mkdir "%installdir%"
copy LICENSE.mintty "%installdir%"
copy LICENSE.wslbridge "%installdir%"
copy wsl.bat "%LOCALAPPDATA%\wsltty"
rem does not work without admin rights:
rem copy wsl.bat "%SYSTEMROOT%\System32"
echo @echo off> setdirs.bat
echo set refinstalldir=%refinstalldir%>> setdirs.bat
echo set installdir=%installdir%>> setdirs.bat
echo set refconfigdir=%refconfigdir%>> setdirs.bat
echo set configdir=%configdir%>> setdirs.bat
copy setdirs.bat + uninstall.bat "%installdir%\uninstall.bat"
mkdir "%LOCALAPPDATA%\wsltty\bin"
copy cygwin1.dll "%LOCALAPPDATA%\wsltty\bin"
copy cygwin-console-helper.exe "%LOCALAPPDATA%\wsltty\bin"
rem copy dash.exe "%LOCALAPPDATA%\wsltty\bin"
copy mintty.exe "%LOCALAPPDATA%\wsltty\bin"
copy wslbridge.exe "%LOCALAPPDATA%\wsltty\bin"
copy wslbridge-backend "%LOCALAPPDATA%\wsltty\bin"
copy setdirs.bat + wsl.bat "%installdir%\wsl.bat"
copy setdirs.bat + wsl.bat "%LOCALAPPDATA%\Microsoft\WindowsApps\wsl.bat"
copy setdirs.bat + wsl~.bat "%installdir%\wsl~.bat"
copy setdirs.bat + wsl~.bat "%LOCALAPPDATA%\Microsoft\WindowsApps\wsl~.bat"
copy setdirs.bat + wsl-l.bat "%installdir%\wsl-l.bat"
copy setdirs.bat + wsl-l.bat "%LOCALAPPDATA%\Microsoft\WindowsApps\wsl-l.bat"
rem create "home directory" to enable storage of config file
mkdir "%LOCALAPPDATA%\wsltty\home
mkdir "%LOCALAPPDATA%\wsltty\home\%USERNAME%"
copy "add to context menu.lnk" "%installdir%"
copy "remove from context menu.lnk" "%installdir%"
copy "configure WSL shortcuts.lnk" "%installdir%"
copy wsl.ico "%installdir%"
copy config-distros.sh "%installdir%"
copy mkshortcut.vbs "%installdir%"
rem clean up previous installation
del "%installdir%\config-context-menu.bat"
mkdir "%installdir%\bin"
copy cygwin1.dll "%installdir%\bin"
copy cygwin-console-helper.exe "%installdir%\bin"
copy dash.exe "%installdir%\bin"
copy regtool.exe "%installdir%\bin"
copy mintty.exe "%installdir%\bin"
copy zoo.exe "%installdir%\bin"
copy wslbridge.exe "%installdir%\bin"
copy wslbridge-backend "%installdir%\bin"
rem create system config directory and copy config archive
mkdir "%installdir%\usr\share\mintty\lang"
copy po.zoo "%installdir%\usr\share\mintty\lang"
:shortcuts
rem create Desktop Shorcut
copy "Bash on UoW in Mintty.lnk" "%USERPROFILE%\Desktop"
rem generate shortcuts
rem create Start Menu Shortcut
copy "Bash on UoW in Mintty.lnk" "%APPDATA%\Microsoft\Windows\Start Menu"
rem set icon=%%LOCALAPPDATA%%\lxss\bash.ico
set lxicon=%%LOCALAPPDATA%%\lxss\bash.ico
set icon=%%LOCALAPPDATA%%\wsltty\wsl.ico
if exist "%installdir%\wsl.ico" goto iconok
if exist "%lxicon" copy "%lxicon" "%installdir%\wsl.ico"
:iconok
set target=%refinstalldir%\bin\mintty.exe
set minttyargs=--wsl -h err --configdir="%refconfigdir%" -o Locale=C -o Charset=UTF-8 /bin/wslbridge
set bridgeargs=-t /bin/bash
cscript mkshortcut.vbs "/name:WSL %% in Mintty"
set bridgeargs=-C~ -t /bin/bash
cscript mkshortcut.vbs "/name:WSL ~ in Mintty"
set bridgeargs=-t /bin/bash -l
cscript mkshortcut.vbs "/name:WSL -l in Mintty"
rem create Start Menu Folder
set smf=%APPDATA%\Microsoft\Windows\Start Menu\Programs\WSLtty
mkdir "%smf%"
copy "wsltty home & help.url" "%smf%"
copy "add to context menu.lnk" "%smf%"
copy "remove from context menu.lnk" "%smf%"
copy "configure WSL shortcuts.lnk" "%smf%"
rem clean up previous installation
rmdir /S /Q "%smf%\context menu shortcuts"
rem create launch shortcuts for default WSL distro
copy "WSL %% in Mintty.lnk" "%installdir%"
copy "WSL %% in Mintty.lnk" "%smf%"
copy "WSL ~ in Mintty.lnk" "%installdir%"
copy "WSL ~ in Mintty.lnk" "%smf%"
copy "WSL -l in Mintty.lnk" "%installdir%"
copy "WSL -l in Mintty.lnk" "%smf%"
rem clean up previous installation
del "%smf%\WSL Bash %% in Mintty.lnk"
del "%smf%\WSL Bash ~ in Mintty.lnk"
del "%smf%\WSL Bash -l in Mintty.lnk"
goto sysconfig
rem create Desktop Shorcuts
copy "WSL %% in Mintty.lnk" "%USERPROFILE%\Desktop"
copy "WSL ~ in Mintty.lnk" "%USERPROFILE%\Desktop"
:explorer
:sysconfig
rem Explorer context menu
set userdirname=HKEY_CURRENT_USER\Software\Classes\Directory\shell
set userdirpane=HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell
rem unpack config files in system config directory
cd /D "%installdir%\usr\share\mintty\lang"
"%installdir%\bin\zoo" xO po
rem WSL in Mintty
set label=WSL in Mintty
rem set here=in this directory
set here=Here
rem WSL icon
set icon=%LOCALAPPDATA%\lxss\bash.ico
:migrate configuration
rem WSL target shell
set shell=/bin/bash
rem migrate old config resource files to new config dir
if exist "%configdir%" goto configfile
if not exist "%oldconfigdir%" goto configfile
if exist "%oldhomedir%\.minttyrc" copy "%oldhomedir%\.minttyrc" "%oldconfigdir%\config" && del "%oldhomedir%\.minttyrc"
xcopy /E /I /Y "%oldconfigdir%" "%configdir%" && rmdir /S /Q "%oldconfigdir%"
rmdir "%oldhomedir%\.config"
:configfile
if exist "%configdir%\config" goto deloldhome
if exist "%oldhomedir%\.minttyrc" copy "%oldhomedir%\.minttyrc" "%configdir%\config" && del "%oldhomedir%\.minttyrc"
:deloldhome
rmdir "%oldhomedir%"
rmdir "%oldroot%\home"
rem Mintty invocation
set cmd=%LOCALAPPDATA%\wsltty\bin\mintty.exe
set cset=-o Locale=C -o Charset=UTF-8
set icon=%LOCALAPPDATA%\lxss\bash.ico
set arg=/bin/wslbridge -t %shell%
set target0=\"%cmd%\" %cset% -i \"%icon%\" %arg%
rem set target1=\"%cmd%\" %cset% -i \"%icon%\" /bin/dash -c \"cd '%%1'; exec %arg%\"
set target1=\"%cmd%\" %cset% -i \"%icon%\" --dir \"%%1\" %arg%
reg add "%userdirname%\wsltty" /d "%label% %here%" /f
reg add "%userdirname%\wsltty" /v Icon /d "%icon%" /f
reg add "%userdirname%\wsltty\command" /d "%target1%" /f
reg add "%userdirpane%\wsltty" /d "%label% %here%" /f
reg add "%userdirpane%\wsltty" /v Icon /d "%icon%" /f
reg add "%userdirpane%\wsltty\command" /d "%target0%" /f
:userconfig
rem create user config directory and subfolders
mkdir "%configdir%\lang"
mkdir "%configdir%\sounds"
mkdir "%configdir%\themes"
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"
rem distro-specific stuff: shortcuts and launch scripts
cd "%installdir%"
bin\dash.exe "%installdir%\config-distros.sh"
bin\dash.exe "%installdir%\config-distros.sh" -contextmenu
:end

128
makefile
View File

@@ -1,9 +1,36 @@
#############################################################################
# default: generate all
all: wslbridge mintty cygwin wsltty pkg
# build a wsltty installer package:
# configure ver=... and minttyver= in this makefile
# make targets:
# make [all] to build a distributable installer (default)
# make pkg to build an installer, bypassing the system checks
# make wsltty to build an installer using the local copy of mintty
ver=0.6.2
wslbridgever=0.2.0
all: check pkg
# wsltty release
ver=1.7.9
# mintty release version
minttyver=2.7.9
#minttyver=master
# wslbridge backend version
wslbridgever=0.2.3
# wslbridge frontend version
# release 0.2.0 does not have cygwin_internal(CW_SYNC_WINENV) yet;
# therefore using "master" below
#wslbridge-frontend=wslbridge-frontend
# release 0.2.1 is updated and complete, no separate frontend build needed:
#wslbridge-frontend=
#wslbridge-commit=master
# use --distro-guid option:
wslbridge-frontend=wslbridge-frontend
wslbridge-commit=cb22e3f6f989cefe5b6599d3c04422ded74db664
#############################################################################
# target checking and some defs
TARGET := $(shell $(CC) -dumpmachine)
@@ -19,51 +46,102 @@ else
$(error Target '$(TARGET)' not supported)
endif
wget=curl -R -L -O --connect-timeout 55
wget=curl -R -L --connect-timeout 55 -O
wgeto=curl -R -L --connect-timeout 55
#############################################################################
# system check;
# for now, let's enforce Cygwin 32-Bit as the container for wsltty
# just in case there is a 32-Bit WSL released (-> 32 bit), and to ensure
# the path name drag-and-drop adaptation works (-> cygwin, not msys)
check:
# checking suitable host environment; run `make pkg` to bypass
# check cygwin (vs msys) for proper drag-and-drop paths:
uname | grep CYGWIN
# check 32 bit (vs 64 bit) to ensure 32-Bit Windows support, just in case:
#uname -m | grep i686
# check 64 bit (vs 32 bit) to provide 64-Bit stability support:
uname -m | grep x86_64
#############################################################################
# generation
wslbridge:
wslbridge: wslbridge-backend $(wslbridge-frontend)
wslbridge-backend:
$(wget) https://github.com/rprichard/wslbridge/releases/download/$(wslbridgever)/wslbridge-$(wslbridgever)-$(sys).tar.gz
tar xvzf wslbridge-$(wslbridgever)-$(sys).tar.gz
mkdir -p bin
cp wslbridge-$(wslbridgever)-$(sys)/wslbridge* bin/
cp wslbridge-$(wslbridgever)-$(sys)/LICENSE.txt LICENSE.wslbridge
tr -d '\015' < wslbridge-$(wslbridgever)-$(sys)/LICENSE.txt > LICENSE.wslbridge
mintty:
$(wget) https://github.com/mintty/mintty/archive/master.zip
mv master.zip mintty-master.zip
unzip -o mintty-master.zip
cd mintty-master/src; make LDFLAGS="-static -static-libgcc -s"
wslbridge-frontend:
$(wgeto) https://github.com/rprichard/wslbridge/archive/$(wslbridge-commit).zip -o wslbridge-$(wslbridge-commit).zip
unzip -o wslbridge-$(wslbridge-commit).zip
cd wslbridge-$(wslbridge-commit)/frontend; make
strip wslbridge-$(wslbridge-commit)/out/wslbridge.exe
mkdir -p bin
cp mintty-master/bin/mintty.exe bin/
cp mintty-master/LICENSE LICENSE.mintty
cp wslbridge-$(wslbridge-commit)/out/wslbridge.exe bin/
tr -d '\015' < wslbridge-$(wslbridge-commit)/LICENSE.txt > LICENSE.wslbridge
mintty: mintty-get mintty-build
mintty-get:
$(wgeto) https://github.com/mintty/mintty/archive/$(minttyver).zip -o mintty-$(minttyver).zip
unzip -o mintty-$(minttyver).zip
mintty-build:
cd mintty-$(minttyver)/src; make LDFLAGS="-static -static-libgcc -s" VERSION_SUFFIX=" wsltty $(ver)"
mkdir -p bin
cp mintty-$(minttyver)/bin/mintty.exe bin/
cp mintty-$(minttyver)/LICENSE LICENSE.mintty
cd mintty-$(minttyver)/lang; zoo a po *.po; mv po.zoo ../../
cygwin:
mkdir -p bin
cp /bin/cygwin1.dll bin/
cp /bin/cygwin-console-helper.exe bin/
#cp /bin/dash.exe bin/
cp /bin/dash.exe bin/
cp /bin/regtool.exe bin/
cp /bin/zoo.exe bin/
wsltty:
pkg:
cop: ver
mkdir -p rel
rm -fr rel/wsltty-$(ver)-install.exe
sed -e "s,%version%,$(ver)," makewinx.cfg > rel/wsltty.SED
cp bin/cygwin1.dll rel/
cp bin/cygwin-console-helper.exe rel/
#cp bin/dash.exe rel/
cp bin/dash.exe rel/
cp bin/regtool.exe rel/
cp bin/mintty.exe rel/
cp bin/zoo.exe rel/
cp po.zoo rel/
cp bin/wslbridge.exe rel/
cp bin/wslbridge-backend rel/
cp LICENSE.mintty rel/
cp LICENSE.wslbridge rel/
cp "Bash on UoW in Mintty.lnk" rel/
cp wsl.bat rel/
cp install.bat rel/
cp uninstall.bat 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: cop
cd rel; iexpress /n wsltty.SED
install: cop installbat
installbat:
cd rel; cmd /C install
ver:
echo $(ver) > VERSION
pkg: wslbridge cygwin mintty cab
wsltty: wslbridge cygwin mintty-build cab
#############################################################################
# end

View File

@@ -23,9 +23,9 @@ UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[Strings]
InstallPrompt=Install Mintty terminal for WSL / Ubuntu on Windows?
InstallPrompt=Install Mintty terminal for WSL (Windows Subsystem for Linux)?
DisplayLicense=
FinishMessage=Mintty for WSL installed - for documentation see https://github.com/mintty/mintty/wiki/Tips
FinishMessage=Mintty for WSL installed - for documentation see https://github.com/mintty/wsltty
TargetName=wsltty-%version%-install.exe
FriendlyName=wsltty
AppLaunched=cmd.exe /c install.bat
@@ -39,10 +39,26 @@ FILE3="wslbridge.exe"
FILE4="wslbridge-backend"
FILE5="LICENSE.mintty"
FILE6="LICENSE.wslbridge"
FILE7="Bash on UoW in Mintty.lnk"
FILE8="wsl.bat"
FILE9="install.bat"
FILE10="uninstall.bat"
FILE7="WSL % in Mintty.lnk"
FILE8="WSL ~ in Mintty.lnk"
FILE9="WSL -l in Mintty.lnk"
FILE10="wsl.bat"
FILE11="wsl~.bat"
FILE12="wsl-l.bat"
FILE13="install.bat"
FILE14="uninstall.bat"
FILE15="wsl.ico"
FILE16="add to context menu.lnk"
FILE17="remove from context menu.lnk"
FILE18="wsltty home & help.url"
FILE19="zoo.exe"
FILE20="po.zoo"
FILE21="dash.exe"
FILE22="regtool.exe"
FILE23="config-distros.sh"
FILE24="configure WSL shortcuts.lnk"
FILE25="mkshortcut.vbs"
FILE26="VERSION"
[SourceFiles]
SourceFiles0=.
@@ -59,4 +75,20 @@ SourceFiles0=.
%FILE8%=
%FILE9%=
%FILE10%=
%FILE11%=
%FILE12%=
%FILE13%=
%FILE14%=
%FILE15%=
%FILE16%=
%FILE17%=
%FILE18%=
%FILE19%=
%FILE20%=
%FILE21%=
%FILE22%=
%FILE23%=
%FILE24%=
%FILE25%=
%FILE26%=

57
mkshortcut.vbs Executable file
View File

@@ -0,0 +1,57 @@
rem cscript mkshortcut.vbs [/param:arg] /target:link
rem %
rem /arguments:--wsl -h err -o Locale=C -o Charset=UTF-8 /bin/wslbridge -t /bin/bash
rem ~
rem /arguments:--wsl -h err -o Locale=C -o Charset=UTF-8 /bin/wslbridge -C~ -t /bin/bash
rem -l
rem /arguments:--wsl -h err -o Locale=C -o Charset=UTF-8 /bin/wslbridge -t /bin/bash -l
rem /target:%LOCALAPPDATA%\wsltty\bin\mintty.exe
rem /workingdir:%USERPROFILE%
rem rem /icon:%LOCALAPPDATA%\lxss\bash.ico
rem /icon:%LOCALAPPDATA%\wsltty\wsl.ico
rem General - Name:
name = Wscript.Arguments.Named("name") & ".lnk"
set wshell = WScript.CreateObject("WScript.Shell")
wscript.echo "Creating " & name
set lnk = wshell.CreateShortcut(name)
rem Target:
rem lnk.TargetPath = Wscript.Arguments.Named("target")
rem lnk.Arguments = Wscript.Arguments.Named("arguments")
lnk.TargetPath = wshell.ExpandEnvironmentStrings("%target%")
minttyargs = wshell.ExpandEnvironmentStrings("%minttyargs%")
bridgeargs = wshell.ExpandEnvironmentStrings("%bridgeargs%")
lnk.Arguments = minttyargs & bridgeargs
rem wscript.echo "minttyargs: " & minttyargs
rem wscript.echo lnk.Arguments
rem Start in:
rem lnk.WorkingDirectory = Wscript.Arguments.Named("workingdir")
lnk.WorkingDirectory = "%USERPROFILE%"
rem Icon:
rem icon = Wscript.Arguments.Named("icon")
rem rem iconoffset = Wscript.Arguments.Named("iconoffset")
rem rem icon = icon & ", " & iconoffset
icon = wshell.ExpandEnvironmentStrings("%icon%")
rem wscript.echo "icon: " & icon
lnk.IconLocation = icon
rem rem lnk.IconLocation = "%LOCALAPPDATA%\lxss\bash.ico"
rem lnk.IconLocation = "%LOCALAPPDATA%\wsltty\wsl.ico"
rem Shorcut key:
rem lnk.HotKey = "ALT+CTRL+W"
rem Run:
rem lnk.WindowStyle = 1
rem Comment:
rem lnk.IconLocation = Wscript.Arguments.Named("desc")
rem lnk.Description = "WSLtty"
lnk.Save
wscript.echo "Created " & name
wscript.echo

BIN
remove from context menu.lnk Executable file

Binary file not shown.

View File

@@ -1,27 +1,35 @@
@echo off
:undeploy
rem currently not removing software
rem in any case, at least the config file (home\...) should not be removed
if "%installdir%" == "" set installdir=%LOCALAPPDATA%\wsltty
:shortcuts
rem delete Desktop Shortcut and Start Menu Shortcut
del "%USERPROFILE%\Desktop\Bash on UoW in Mintty.lnk"
del "%APPDATA%\Microsoft\Windows\Start Menu\Bash on UoW in Mintty.lnk"
rem delete Start Menu Folder
set smf=%APPDATA%\Microsoft\Windows\Start Menu\Programs\WSLtty
rmdir /S /Q "%smf%"
rem delete Desktop Shortcuts (not installed anymore)
rem del "%USERPROFILE%\Desktop\WSL % in Mintty.lnk"
rem del "%USERPROFILE%\Desktop\WSL ~ in Mintty.lnk"
:explorer
:start menu
rem delete Explorer context menu
set userdirname=HKEY_CURRENT_USER\Software\Classes\Directory\shell
set userdirpane=HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell
cd %installdir%
bin\dash.exe config-distros.sh -shortcuts-remove
reg delete "%userdirname%\wsltty" /f
reg delete "%userdirpane%\wsltty" /f
:explorer context menu
cd %installdir%
bin\dash.exe config-distros.sh -contextmenu-remove
:undeploy
cd %installdir%
rem currently not removing software
:end

13
wsl-l.bat Executable file
View File

@@ -0,0 +1,13 @@
@echo off
rem Start mintty terminal for WSL with login shell
if "%installdir%" == "" set installdir=%LOCALAPPDATA%\wsltty
if "%configdir%" == "" set configdir=%APPDATA%\wsltty
rem To enable invocation of this script from WIN+R or from cmd.exe,
rem you may want to copy this script into "%SYSTEMROOT%\System32",
rem or include the installation folder "%LOCALAPPDATA%\wsltty" in your PATH
"%installdir%\bin\mintty.exe" --wsl -h err "--configdir=%configdir%" -o Locale=C -o Charset=UTF-8 -i "%LOCALAPPDATA%\wsltty\wsl.ico" /bin/wslbridge -t /bin/bash -l

13
wsl.bat
View File

@@ -1,12 +1,13 @@
@echo off
rem Start mintty terminal for WSL in home directory
rem Start mintty terminal for WSL in current directory
if "%installdir%" == "" set installdir=%LOCALAPPDATA%\wsltty
if "%configdir%" == "" set configdir=%APPDATA%\wsltty
rem To enable invocation of this script from WIN+R or from cmd.exe,
rem you may want to copy this script into "%SYSTEMROOT%\System32"
rem you may want to copy this script into "%SYSTEMROOT%\System32",
rem or include the installation folder "%LOCALAPPDATA%\wsltty" in your PATH
rem You may want a variant of this script without trailing "-l"
rem to start in the current directory from cmd.exe
"%LOCALAPPDATA%\wsltty\bin\mintty.exe" -o Locale=C -o Charset=UTF-8 -i "%LOCALAPPDATA%\lxss\bash.ico" /bin/wslbridge -t /bin/bash -l
"%installdir%\bin\mintty.exe" --wsl -h err "--configdir=%configdir%" -o Locale=C -o Charset=UTF-8 -i "%LOCALAPPDATA%\wsltty\wsl.ico" /bin/wslbridge -t /bin/bash

BIN
wsl.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 KiB

2
wsltty home & help.url Normal file
View File

@@ -0,0 +1,2 @@
[InternetShortcut]
URL=https://github.com/mintty/wsltty

BIN
wsltty.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

13
wsl~.bat Executable file
View File

@@ -0,0 +1,13 @@
@echo off
rem Start mintty terminal for WSL in WSL home directory
if "%installdir%" == "" set installdir=%LOCALAPPDATA%\wsltty
if "%configdir%" == "" set configdir=%APPDATA%\wsltty
rem To enable invocation of this script from WIN+R or from cmd.exe,
rem you may want to copy this script into "%SYSTEMROOT%\System32",
rem or include the installation folder "%LOCALAPPDATA%\wsltty" in your PATH
"%installdir%\bin\mintty.exe" --wsl -h err "--configdir=%configdir%" -o Locale=C -o Charset=UTF-8 -i "%LOCALAPPDATA%\wsltty\wsl.ico" /bin/wslbridge -C~ -t /bin/bash