Created
January 29, 2020 22:39
-
-
Save xzn/ac5dde31153f398a6e51e4a018b13e89 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@echo off | |
setlocal EnableDelayedExpansion | |
set "WD=%__CD__%" | |
if NOT EXIST "%WD%msys-2.0.dll" set "WD=%~dp0usr\bin\" | |
set "LOGINSHELL=bash" | |
set /a msys2_shiftCounter=0 | |
rem To activate windows native symlinks uncomment next line | |
REM set MSYS=winsymlinks:nativestrict | |
rem Set debugging program for errors | |
rem set MSYS=error_start:%WD%../../mingw64/bin/qtcreator.exe^|-debug^|^<process-id^> | |
rem To export full current PATH from environment into MSYS2 use '-use-full-path' parameter | |
rem or uncomment next line | |
REM set MSYS2_PATH_TYPE=inherit | |
:checkparams | |
rem Remove double quotes to prevent syntax error when passing parameters with quotes to bash | |
set msys2_param=x%~1 | |
set msys2_param=%msys2_param:"=% | |
rem Help option | |
if "%msys2_param%" == "x-help" ( | |
call :printhelp "%~nx0" | |
exit /b %ERRORLEVEL% | |
) | |
if "%msys2_param%" == "x--help" ( | |
call :printhelp "%~nx0" | |
exit /b %ERRORLEVEL% | |
) | |
if "%msys2_param%" == "x-?" ( | |
call :printhelp "%~nx0" | |
exit /b %ERRORLEVEL% | |
) | |
if "%msys2_param%" == "x/?" ( | |
call :printhelp "%~nx0" | |
exit /b %ERRORLEVEL% | |
) | |
rem Shell types | |
if "%msys2_param%" == "x-msys" shift& set /a msys2_shiftCounter+=1& set MSYSTEM=MSYS& goto :checkparams | |
if "%msys2_param%" == "x-msys2" shift& set /a msys2_shiftCounter+=1& set MSYSTEM=MSYS& goto :checkparams | |
if "%msys2_param%" == "x-mingw32" shift& set /a msys2_shiftCounter+=1& set MSYSTEM=MINGW32& goto :checkparams | |
if "%msys2_param%" == "x-mingw64" shift& set /a msys2_shiftCounter+=1& set MSYSTEM=MINGW64& goto :checkparams | |
if "%msys2_param%" == "x-mingw" shift& set /a msys2_shiftCounter+=1& (if exist "%WD%..\..\mingw64" (set MSYSTEM=MINGW64) else (set MSYSTEM=MINGW32))& goto :checkparams | |
rem Console types | |
if "%msys2_param%" == "x-mintty" shift& set /a msys2_shiftCounter+=1& set MSYSCON=mintty.exe& goto :checkparams | |
if "%msys2_param%" == "x-conemu" shift& set /a msys2_shiftCounter+=1& set MSYSCON=conemu& goto :checkparams | |
if "%msys2_param%" == "x-defterm" shift& set /a msys2_shiftCounter+=1& set MSYSCON=defterm& goto :checkparams | |
rem Other parameters | |
if "%msys2_param%" == "x-full-path" shift& set /a msys2_shiftCounter+=1& set MSYS2_PATH_TYPE=inherit& goto :checkparams | |
if "%msys2_param%" == "x-use-full-path" shift& set /a msys2_shiftCounter+=1& set MSYS2_PATH_TYPE=inherit& goto :checkparams | |
if "%msys2_param%" == "x-here" shift& set /a msys2_shiftCounter+=1& set CHERE_INVOKING=enabled_from_arguments& goto :checkparams | |
rem Remove double quotes here as well | |
set msys2_param2=x%~2 | |
set msys2_param2=%msys2_param2:"=% | |
if "%msys2_param%" == "x-where" ( | |
if "%msys2_param2%" == "x" ( | |
echo Working directory is not specified for -where parameter. 1>&2 | |
exit /b 2 | |
) | |
cd /d "%~2" || ( | |
echo Cannot set specified working diretory "%~2". 1>&2 | |
exit /b 2 | |
) | |
set CHERE_INVOKING=enabled_from_arguments | |
rem Increment msys2_shiftCounter by number of words in argument (as cmd.exe saw it). | |
rem (Note that this form of FOR IN loop uses same delimiters as parameters.) | |
set msys2_arg="%~2" | |
for %%a in ("!msys2_arg!") do set /a msys2_shiftCounter+=1 | |
)& shift& shift& set /a msys2_shiftCounter+=1& goto :checkparams | |
if "%msys2_param%" == "x-no-start" shift& set /a msys2_shiftCounter+=1& set MSYS2_NOSTART=yes& goto :checkparams | |
if "%msys2_param%" == "x-shell" ( | |
if "%msys2_param2%" == "x" ( | |
echo Shell not specified for -shell parameter. 1>&2 | |
exit /b 2 | |
) | |
set LOGINSHELL="%~2" | |
set msys2_arg="%~2" | |
for %%a in ("!msys2_arg!") do set /a msys2_shiftCounter+=1 | |
)& shift& shift& set /a msys2_shiftCounter+=1& goto :checkparams | |
rem Collect remaining command line arguments to be passed to shell | |
set msys2_full_cmd=%* | |
for /f "tokens=%msys2_shiftCounter%,* delims=,;= " %%i in ("!msys2_full_cmd!") do set SHELL_ARGS=%%j | |
rem Clean up working variables | |
set msys2_arg= | |
set msys2_shiftCounter= | |
set msys2_full_cmd= | |
rem Setup proper title | |
if "%MSYSTEM%" == "MINGW32" ( | |
set "CONTITLE=MinGW x32" | |
) else if "%MSYSTEM%" == "MINGW64" ( | |
set "CONTITLE=MinGW x64" | |
) else ( | |
set "CONTITLE=MSYS2 MSYS" | |
) | |
if "x%MSYSCON%" == "xmintty.exe" goto startmintty | |
if "x%MSYSCON%" == "xconemu" goto startconemu | |
if "x%MSYSCON%" == "xdefterm" goto startsh | |
if NOT EXIST "%WD%mintty.exe" goto startsh | |
set MSYSCON=mintty.exe | |
:startmintty | |
if not defined MSYS2_NOSTART ( | |
start "%CONTITLE%" "%WD%mintty" -i /msys2.ico -t "%CONTITLE%" "/usr/bin/%LOGINSHELL%" --login %SHELL_ARGS% | |
) else ( | |
"%WD%mintty" -i /msys2.ico -t "%CONTITLE%" "/usr/bin/%LOGINSHELL%" --login %SHELL_ARGS% | |
) | |
exit /b %ERRORLEVEL% | |
:startconemu | |
call :conemudetect || ( | |
echo ConEmu not found. Exiting. 1>&2 | |
exit /b 1 | |
) | |
if not defined MSYS2_NOSTART ( | |
start "%CONTITLE%" "%ComEmuCommand%" /Here /Icon "%WD%..\..\msys2.ico" /cmd "%WD%\%LOGINSHELL%" --login %SHELL_ARGS% | |
) else ( | |
"%ComEmuCommand%" /Here /Icon "%WD%..\..\msys2.ico" /cmd "%WD%\%LOGINSHELL%" --login %SHELL_ARGS% | |
) | |
exit /b %ERRORLEVEL% | |
:startsh | |
set MSYSCON= | |
if not defined MSYS2_NOSTART ( | |
start "%CONTITLE%" "%WD%\%LOGINSHELL%" --login %SHELL_ARGS% | |
) else ( | |
"%WD%\%LOGINSHELL%" --login %SHELL_ARGS% | |
) | |
exit /b %ERRORLEVEL% | |
:EOF | |
exit /b 0 | |
:conemudetect | |
set ComEmuCommand= | |
if defined ConEmuDir ( | |
if exist "%ConEmuDir%\ConEmu64.exe" ( | |
set "ComEmuCommand=%ConEmuDir%\ConEmu64.exe" | |
set MSYSCON=conemu64.exe | |
) else if exist "%ConEmuDir%\ConEmu.exe" ( | |
set "ComEmuCommand=%ConEmuDir%\ConEmu.exe" | |
set MSYSCON=conemu.exe | |
) | |
) | |
if not defined ComEmuCommand ( | |
ConEmu64.exe /Exit 2>nul && ( | |
set ComEmuCommand=ConEmu64.exe | |
set MSYSCON=conemu64.exe | |
) || ( | |
ConEmu.exe /Exit 2>nul && ( | |
set ComEmuCommand=ConEmu.exe | |
set MSYSCON=conemu.exe | |
) | |
) | |
) | |
if not defined ComEmuCommand ( | |
FOR /F "tokens=*" %%A IN ('reg.exe QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ConEmu64.exe" /ve 2^>nul ^| find "REG_SZ"') DO ( | |
set "ComEmuCommand=%%A" | |
) | |
if defined ComEmuCommand ( | |
call set "ComEmuCommand=%%ComEmuCommand:*REG_SZ =%%" | |
set MSYSCON=conemu64.exe | |
) else ( | |
FOR /F "tokens=*" %%A IN ('reg.exe QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ConEmu.exe" /ve 2^>nul ^| find "REG_SZ"') DO ( | |
set "ComEmuCommand=%%A" | |
) | |
if defined ComEmuCommand ( | |
call set "ComEmuCommand=%%ComEmuCommand:*REG_SZ =%%" | |
set MSYSCON=conemu.exe | |
) | |
) | |
) | |
if not defined ComEmuCommand exit /b 2 | |
exit /b 0 | |
:printhelp | |
echo Usage: | |
echo %~1 [options] [login shell parameters] | |
echo. | |
echo Options: | |
echo -mingw32 ^| -mingw64 ^| -msys[2] Set shell type | |
echo -defterm ^| -mintty ^| -conemu Set terminal type | |
echo -here Use current directory as working | |
echo directory | |
echo -where DIRECTORY Use specified DIRECTORY as working | |
echo directory | |
echo -[use-]full-path Use full current PATH variable | |
echo instead of trimming to minimal | |
echo -no-start Do not use "start" command and | |
echo return login shell resulting | |
echo errorcode as this batch file | |
echo resulting errorcode | |
echo -shell SHELL Set login shell | |
echo -help ^| --help ^| -? ^| /? Display this help and exit | |
echo. | |
echo Any parameter that cannot be treated as valid option and all | |
echo following parameters are passed as login shell command parameters. | |
echo. | |
exit /b 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment