diff --git a/launcher/src/CmderLauncher.cpp b/launcher/src/CmderLauncher.cpp index 0cf1c41..7f505e1 100644 --- a/launcher/src/CmderLauncher.cpp +++ b/launcher/src/CmderLauncher.cpp @@ -299,8 +299,8 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr // Set path to Cmder user ConEmu config file PathCombine(userCfgPath, userConfigDirPath, L"user-ConEmu.xml"); } - - if ( PathFileExists(cpuCfgPath) || use_user_cfg == false ) // config/[cpu specific terminal emulator config] file exists or /m was specified on command line, use machine specific config. + + if (wcscmp(cpuCfgPath, L"") != 0 && (PathFileExists(cpuCfgPath) || use_user_cfg == false)) // config/[host specific terminal emulator config] file exists or /m was specified on command line, use machine specific config. { if (cfgRoot.length() == 0) // '/c [path]' was NOT specified { @@ -325,7 +325,7 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr } } } - else // [terminal emulator config] file does not exist, copy config/[cpu specific terminal emulator config] file to [terminal emulator config] file + else // [terminal emulator config] file does not exist, copy config/[host specific terminal emulator config] file to [terminal emulator config] file { if (!CopyFile(cpuCfgPath, cfgPath, FALSE)) { @@ -348,7 +348,7 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr } } } - else if (PathFileExists(userCfgPath)) // config/user[terminal emulator config] file exists, use it. + else if (wcscmp(userCfgPath, L"") != 0 && PathFileExists(userCfgPath)) // config/user[terminal emulator config] file exists, use it. { if (cfgRoot.length() == 0) // '/c [path]' was NOT specified { @@ -451,12 +451,12 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr { MessageBox(NULL, (GetLastError() == ERROR_ACCESS_DENIED) - ? L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied." + ? L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied." : L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP); exit(1); } } - else if (PathFileExists(cfgPath)) // This is a first time Cmder.exe run and [terminal emulator config] file exists, copy [terminal emulator config] file to config/user_[terminal emulator config] file. + else if (wcscmp(cfgPath, L"") != 0 && PathFileExists(cfgPath)) // This is a first time Cmder.exe run and [terminal emulator config] file exists, copy [terminal emulator config] file to config/user_[terminal emulator config] file. { if (!CopyFile(cfgPath, userCfgPath, FALSE)) { @@ -480,9 +480,9 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml"); } - else if (wcscmp(defaultCfgPath, L"") == 0) // '/c [path]' was specified and 'vendor/[terminal emulator config].default' config exists, copy Cmder 'vendor/[terminal emulator config].default' file to '[user specified path]/config/user_[terminal emulator config]'. + else if (wcscmp(defaultCfgPath, L"") != 0) // '/c [path]' was specified and 'vendor/[terminal emulator config].default' config exists, copy Cmder 'vendor/[terminal emulator config].default' file to '[user specified path]/config/user_[terminal emulator config]'. { - if (!CopyFile(defaultCfgPath, userCfgPath, FALSE)) + if ( ! CopyFile(defaultCfgPath, userCfgPath, FALSE)) { if (PathFileExists(windowsTerminalDir)) { diff --git a/launcher/src/version.rc2.sample b/launcher/src/version.rc2.sample index b809c36..e8d509b 100644 --- a/launcher/src/version.rc2.sample +++ b/launcher/src/version.rc2.sample @@ -1,9 +1,8 @@ /** - * WARNING: do NOT modify this file! the content of this file should be - * automatically generated before AppVeyor builds using the - * respective .ps1 Powershell scripts. - * + * WARNING: This file should NOT be manually modified! + * The contents will be automatically generated using the `.ps1` PowerShell scripts, + * during builds by the CI. */ ///////////////////////////////////////////////////////////////////////////// diff --git a/vendor/bin/create-cmdercfg.cmd b/vendor/bin/create-cmdercfg.cmd new file mode 100644 index 0000000..cc8c711 --- /dev/null +++ b/vendor/bin/create-cmdercfg.cmd @@ -0,0 +1,3 @@ +@echo off + +powershell -executionpolicy bypass -f "%cmder_root%\vendor\bin\create-cmdercfg.ps1" -shell cmd -outfile "%CMDER_CONFIG_DIR%\user_init.cmd" diff --git a/vendor/bin/excd.cmd b/vendor/bin/excd.cmd index c957740..a4ac4bd 100644 --- a/vendor/bin/excd.cmd +++ b/vendor/bin/excd.cmd @@ -1,6 +1,8 @@ -@if "%~1"=="/?" (@cd %*) -@set excd=%* -@set excd=%excd:"=% -@if "%excd:~0,1%"=="~" (@set excd=%userprofile%\%excd:~1%) -@if not "%~1"=="/d" (@set excd_param="/d") else (@set excd_param=) -@cd %excd_param% "%excd%" +@echo off +set excd=%* +set excd=%excd:"=% +set excd_param=/d +if /i "%excd:~0,2%"=="/d" set "excd=%excd:~2%" +if "%excd:~0,1%"=="~" (set excd=%userprofile%\%excd:~1%) +if "%excd:~0,1%"=="/" (set excd_param=) +cd %excd_param% %excd% diff --git a/vendor/init.bat b/vendor/init.bat index 2de5c81..fafb0ee 100644 --- a/vendor/init.bat +++ b/vendor/init.bat @@ -478,7 +478,7 @@ if "%CMDER_ALIASES%" == "1" ( ) :: Add aliases to the environment -type "%user_aliases%" | findstr /b /l /i "history=cat " >nul +type "%user_aliases%" | %WINDIR%\System32\findstr /b /l /i "history=cat " >nul if "%ERRORLEVEL%" == "0" ( echo Migrating alias 'history' to new Clink 1.x.x... call "%CMDER_ROOT%\vendor\bin\alias.cmd" /d history diff --git a/vendor/lib/lib_base.cmd b/vendor/lib/lib_base.cmd index d86a7fc..f7420ef 100644 --- a/vendor/lib/lib_base.cmd +++ b/vendor/lib/lib_base.cmd @@ -10,9 +10,8 @@ if "%~1" == "/h" ( exit /b -:help :::=============================================================================== -:::show_subs - shows all sub routines in a .bat/.cmd file with documentation +:::help - shows all sub routines in a .bat/.cmd file with documentation :::. :::include: :::. @@ -20,16 +19,15 @@ exit /b :::. :::usage: :::. -::: %lib_base% show_subs "file" +::: %lib_base% help "file" :::. :::options: :::. ::: file full path to file containing lib_routines to display -:::. :::------------------------------------------------------------------------------- - for /f "tokens=* delims=:" %%a in ('type "%~1" ^| %WINDIR%\System32\findstr /i /r "^:::"') do ( - rem echo a="%%a" +:help + for /f "tokens=* delims=:" %%a in ('%WINDIR%\System32\findstr /i /r "^:::" "%~1"') do ( if "%%a"=="." ( echo. ) else if /i "%%a" == "usage" ( @@ -44,9 +42,13 @@ exit /b pause exit /b -:cmder_shell :::=============================================================================== -:::show_subs - shows all sub routines in a .bat/.cmd file with documentation +:::cmder_shell - Initializes the Cmder shell environment variables +:::. +:::description: +:::. +::: This routine sets up the Cmder shell environment by detecting the +::: command shell and initializing related variables. :::. :::include: :::. @@ -55,15 +57,30 @@ exit /b :::usage: :::. ::: %lib_base% cmder_shell -:::. -:::options: -:::. -::: file full path to file containing lib_routines to display -:::. :::------------------------------------------------------------------------------- + +:cmder_shell call :detect_comspec %ComSpec% exit /b +:::=============================================================================== +:::detect_comspec - Detects the command shell being used::: +:::. +:::description: +:::. +::: This function sets the CMDER_SHELL variable to the name of the +::: detected command shell. It also initializes the CMDER_CLINK and +::: CMDER_ALIASES variables if they are not already defined. +:::. +:::include: +:::. +::: call "lib_base.cmd" +:::. +:::usage: +:::. +::: %lib_base% detect_comspec %ComSpec% +:::------------------------------------------------------------------------------- + :detect_comspec set CMDER_SHELL=%~n1 if not defined CMDER_CLINK ( @@ -74,6 +91,27 @@ exit /b ) exit /b +:::=============================================================================== +:::update_legacy_aliases - Updates the legacy alias definitions in the user_aliases file +:::. +:::description: +:::. +::: This function checks if the user_aliases file contains the marker +::: ";= Add aliases below here". If the marker is not found, it creates +::: an initial user_aliases store by copying the default user_aliases file +::: from the CMDER_ROOT directory. If the CMDER_USER_CONFIG environment +::: variable is defined, it creates a backup of the existing user_aliases +::: file before copying the default file. +:::. +:::include: +:::. +::: call "lib_base.cmd" +:::. +:::usage: +:::. +::: %lib_base% update_legacy_aliases +:::------------------------------------------------------------------------------- + :update_legacy_aliases type "%user_aliases%" | %WINDIR%\System32\findstr /i ";= Add aliases below here" >nul if "%errorlevel%" == "1" ( diff --git a/vendor/lib/lib_git.cmd b/vendor/lib/lib_git.cmd index de963ce..7b3bc47 100644 --- a/vendor/lib/lib_git.cmd +++ b/vendor/lib/lib_git.cmd @@ -12,7 +12,6 @@ if "%~1" == "/h" ( exit /b -:read_version :::=============================================================================== :::read_version - Get the git.exe version :::. @@ -34,6 +33,7 @@ exit /b ::: GIT_VERSION_[GIT SCOPE] Env variable containing Git semantic version string :::------------------------------------------------------------------------------- +:read_version :: clear the variables set GIT_VERSION_%~1= @@ -64,7 +64,6 @@ exit /b exit /b -:parse_version :::=============================================================================== :::parse_version - Parse semantic version string 'x.x.x.x' and return the pieces :::. @@ -89,6 +88,7 @@ exit /b ::: [SCOPE]_BUILD Scoped Build version. :::------------------------------------------------------------------------------- +:parse_version :: process a `x.x.x.xxxx.x` formatted string %print_debug% :parse_version "ARGV[1]=%~1, ARGV[2]=%~2" @@ -111,9 +111,8 @@ exit /b :endlocal_set_git_version -:validate_version :::=============================================================================== -:::validate_version - Validate semantic version string 'x.x.x.x'. +:::validate_version - Validate semantic version string 'x.x.x.x' :::. :::include: :::. @@ -129,6 +128,7 @@ exit /b ::: [VERSION] Semantic version String. Ex: 1.2.3.4 :::------------------------------------------------------------------------------- +:validate_version :: now parse the version information into the corresponding variables %print_debug% :validate_version "ARGV[1]=%~1, ARGV[2]=%~2" @@ -143,9 +143,8 @@ exit /b ) exit /b -:compare_versions :::=============================================================================== -:::compare_version - Compare semantic versions return latest version. +:::compare_version - Compare semantic versions and return latest version :::. :::include: :::. @@ -161,6 +160,7 @@ exit /b ::: [SCOPE2] Example: VENDOR :::------------------------------------------------------------------------------- +:compare_versions :: checks all major, minor, patch and build variables for the given arguments. :: whichever binary that has the most recent version will be used based on the return code. @@ -185,7 +185,12 @@ exit /b endlocal & exit /b 0 :::=============================================================================== -:::is_git_shim +:::is_git_shim - Check if the directory has a git.shim file +:::. +:::description: +:::. +::: Shim is a small helper program for Scoop that calls the executable configured in git.shim file +::: See: github.com/ScoopInstaller/Shim and github.com/cmderdev/cmder/pull/1905 :::. :::include: :::. @@ -202,7 +207,7 @@ exit /b :is_git_shim pushd "%~1" - :: check if there's shim - and if yes follow the path + :: check if there is a shim file - if yes, read the actual executable path setlocal enabledelayedexpansion if exist git.shim ( for /F "tokens=2 delims== " %%I in (git.shim) do ( @@ -219,7 +224,7 @@ exit /b exit /b :::=============================================================================== -:::compare_git_versions +:::compare_git_versions - Compare the user git version against the vendored version :::. :::include: :::. @@ -253,7 +258,7 @@ exit /b :: if the user provided git executable is not found IF ERRORLEVEL -255 IF NOT ERRORLEVEL -254 ( :: if not exist "%git_executable%" ( - %print_debug% ":compare_git_versions" "No git at "%git_executable%" found." + %print_debug% ":compare_git_versions" "No git at '%git_executable%' found." set test_dir= ) ) @@ -262,7 +267,7 @@ exit /b exit /b :::=============================================================================== -:::get_user_git_version - get the version information for the user provided git binary +:::get_user_git_version - Get the version information for the user provided git binary :::. :::include: :::. @@ -278,5 +283,4 @@ exit /b %lib_git% read_version USER "%test_dir%" 2>nul %print_debug% ":get_user_git_version" "get_user_git_version GIT_VERSION_USER: %GIT_VERSION_USER%" %lib_git% validate_version USER %GIT_VERSION_USER% - exit /b - + exit /b diff --git a/vendor/lib/lib_path.cmd b/vendor/lib/lib_path.cmd index 7cfcaa7..4a9f8b9 100644 --- a/vendor/lib/lib_path.cmd +++ b/vendor/lib/lib_path.cmd @@ -1,6 +1,5 @@ @echo off - call "%~dp0lib_base.cmd" call "%%~dp0lib_console" set lib_path=call "%~dp0lib_path.cmd" @@ -11,6 +10,13 @@ if "%~1" == "/h" ( call :%* ) +setlocal enabledelayedexpansion +if not defined find_pathext ( + set "find_pathext=!PATHEXT:;= !" + set "find_pathext=!find_pathext:.=\.!" +) +endlocal & set "find_pathext=%find_pathext%" + exit /b :enhance_path @@ -32,13 +38,12 @@ exit /b :::options: ::: ::: append Append to the path env variable rather than pre-pend. -::B +::: ::: :::output: ::: ::: path Sets the path env variable if required. :::------------------------------------------------------------------------------- - if "%~1" neq "" ( set "add_path=%~1" ) else ( @@ -52,7 +57,8 @@ exit /b set "position=" ) - dir "%add_path%" | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL + dir "%add_path%" 2>NUL | findstr -i -e "%find_pathext%" >NUL + if "%ERRORLEVEL%" == "0" ( set "add_to_path=%add_path%" ) else ( @@ -81,20 +87,20 @@ exit /b echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!;" call :set_found ) - %print_debug% :enhance_path "Env Var INSIDE PATH !find_query! - found=!found!" + %print_debug% :enhance_path "Env Var INSIDE PATH !find_query! - found=!found!" if /i "!position!" == "append" ( if "!found!" == "0" ( echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!\"$" call :set_found ) - %print_debug% :enhance_path "Env Var END PATH !find_query! - found=!found!" + %print_debug% :enhance_path "Env Var END PATH !find_query! - found=!found!" ) else ( if "!found!" == "0" ( echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:"^\"!find_query!;" call :set_found ) - %print_debug% :enhance_path "Env Var BEGIN PATH !find_query! - found=!found!" + %print_debug% :enhance_path "Env Var BEGIN PATH !find_query! - found=!found!" ) endlocal & set found=%found% @@ -129,13 +135,12 @@ exit /b exit /b :changed - %print_debug% :enhance_path "END Env Var - PATH=%path%" - %print_debug% :enhance_path "Env Var %find_query% - found=%found%" + %print_debug% :enhance_path "END Env Var - PATH=%path%" + %print_debug% :enhance_path "Env Var %find_query% - found=%found%" exit /b exit /b - :set_found if "%ERRORLEVEL%" == "0" ( set found=1 @@ -144,8 +149,8 @@ exit /b exit /b :enhance_path_recursive - call :set_path_recursive "%~1" "%~2" "%~3" - exit /b + call :set_path_recursive "%~1" "%~2" "%~3" + exit /b :set_path_recursive :::=============================================================================== @@ -190,7 +195,7 @@ exit /b set "position=" ) - dir "%add_path%" 2>NUL | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL + dir "%add_path%" 2>NUL | findstr -i -e "%find_pathext%" >NUL if "%ERRORLEVEL%" == "0" ( set "add_to_path=%add_path%" @@ -201,10 +206,10 @@ exit /b if "%fast_init%" == "1" ( if "%add_to_path%" neq "" ( if "%position%" == "append" ( - set "path=%path%;%add_to_path%" + set "path=%path%;%add_to_path%" ) else ( - set "path=%add_to_path%;%path%" - ) + set "path=%add_to_path%;%path%" + ) ) ) @@ -213,19 +218,19 @@ exit /b exit /b ) - %print_debug% :set_path_recursive "Env Var - add_path=%add_to_path%" - %print_debug% :set_path_recursive "Env Var - position=%position%" - %print_debug% :set_path_recursive "Env Var - depth=%depth%" - %print_debug% :set_path_recursive "Env Var - max_depth=%max_depth%" + %print_debug% :set_path_recursive "Env Var - add_path=%add_to_path%" + %print_debug% :set_path_recursive "Env Var - position=%position%" + %print_debug% :set_path_recursive "Env Var - depth=%depth%" + %print_debug% :set_path_recursive "Env Var - max_depth=%max_depth%" if %max_depth% gtr %depth% ( if "%add_to_path%" neq "" ( %print_debug% :set_path_recursive "Adding parent directory - '%add_to_path%'" if "%position%" == "append" ( - set "path=%path%;%add_to_path%" + set "path=%path%;%add_to_path%" ) else ( - set "path=%add_to_path%;%path%" - ) + set "path=%add_to_path%;%path%" + ) ) call :set_depth call :loop_depth @@ -235,7 +240,7 @@ exit /b exit /b -: set_depth +:set_depth set /a "depth=%depth%+1" exit /b @@ -245,10 +250,9 @@ exit /b ) for /d %%i in ("%add_path%\*") do ( - %print_debug% :set_path_recursive "Env Var BEFORE - depth=%depth%" + %print_debug% :set_path_recursive "Env Var BEFORE - depth=%depth%" %print_debug% :set_path_recursive "Found Subdirectory - '%%~fi'" call :set_path_recursive "%%~fi" %depth% %max_depth% %position% - %print_debug% :set_path_recursive "Env Var AFTER- depth=%depth%" + %print_debug% :set_path_recursive "Env Var AFTER- depth=%depth%" ) exit /b - diff --git a/vendor/lib/lib_profile.cmd b/vendor/lib/lib_profile.cmd index 850db14..050beac 100644 --- a/vendor/lib/lib_profile.cmd +++ b/vendor/lib/lib_profile.cmd @@ -12,26 +12,26 @@ if "%~1" == "/h" ( exit /b -:run_profile_d :::=============================================================================== -:::run_profile_d - Run all scripts in the passed dir path -::: +:::run_profile_d - Run all scripts in the passed directory path +:::. :::include: -::: +:::. ::: call "lib_profile.cmd" -::: +:::. :::usage: -::: +:::. ::: %lib_profile% "[dir_path]" -::: +:::. :::required: -::: +:::. ::: [dir_path] Fully qualified directory path containing init *.cmd|*.bat. ::: Example: "c:\bin" -::: +:::. ::: path Sets the path env variable if required. :::------------------------------------------------------------------------------- +:run_profile_d if not exist "%~1" ( mkdir "%~1" ) @@ -43,4 +43,3 @@ exit /b ) popd exit /b - diff --git a/vendor/psmodules/Cmder.ps1 b/vendor/psmodules/Cmder.ps1 index 79a053f..c9a11df 100644 --- a/vendor/psmodules/Cmder.ps1 +++ b/vendor/psmodules/Cmder.ps1 @@ -18,7 +18,8 @@ function readVersion($gitPath) { } function isGitShim($gitPath) { - # check if there's shim - and if yes follow the path + # check if there is a shim file - if yes, read the actual executable path + # See: github.com/ScoopInstaller/Shim if (Test-Path "${gitPath}\git.shim") { $shim = (get-content "${gitPath}\git.shim") @@ -178,27 +179,27 @@ function getGitStatusSetting() { } function yOrn( $question ) { - Do { - $Answer = Read-Host -Prompt "`n${question}? (y/n) " - } - Until ($Answer -eq 'y' -or $Answer -eq 'n' -or $Answer -eq 'yes' -or $Answer -eq 'no') + Do { + $Answer = Read-Host -Prompt "`n${question}? (y/n) " + } + Until ($Answer -eq 'y' -or $Answer -eq 'n' -or $Answer -eq 'yes' -or $Answer -eq 'no') - return $Answer + return $Answer } function templateExpand($template_filename, $outfile) { - $template = Get-Content "$template_filename" -Raw + $template = Get-Content "$template_filename" -Raw - $expanded = Invoke-Expression "@`"`r`n$template`r`n`"@" + $expanded = Invoke-Expression "@`"`r`n$template`r`n`"@" - $overwrite = 'y' - if ((test-path "$outfile")) { - $overwrite = yOrn "'$outfile' already exists do you want to overwrite it" - } + $overwrite = 'y' + if ((test-path "$outfile")) { + $overwrite = yOrn "'$outfile' already exists do you want to overwrite it" + } - if ($overwrite -match 'y') { - $expanded | out-file -ErrorAction silentlycontinue -encoding ascii "$outfile" - } else { - write-host "Skipping Cmder '$shell' config generation at user request!" - } + if ($overwrite -match 'y') { + $expanded | out-file -ErrorAction silentlycontinue -encoding ascii "$outfile" + } else { + write-host "Skipping Cmder '$shell' config generation at user request!" + } } diff --git a/vendor/sources.json b/vendor/sources.json index e16ee1b..1a62384 100644 --- a/vendor/sources.json +++ b/vendor/sources.json @@ -6,13 +6,13 @@ }, { "name": "git-for-windows", - "version": "2.45.1.windows.1", - "url": "https://github.com/git-for-windows/git/releases/download/v2.45.1.windows.1/PortableGit-2.45.1-64-bit.7z.exe" + "version": "2.47.0.windows.1", + "url": "https://github.com/git-for-windows/git/releases/download/v2.47.0.windows.1/PortableGit-2.47.0-64-bit.7z.exe" }, { "name": "clink", - "version": "1.6.14", - "url": "https://github.com/chrisant996/clink/releases/download/v1.6.14/clink.1.6.14.93b83f.zip" + "version": "1.7.3", + "url": "https://github.com/chrisant996/clink/releases/download/v1.7.3/clink.1.7.3.f8fb96.zip" }, { "name": "conemu-maximus5", @@ -21,7 +21,7 @@ }, { "name": "clink-completions", - "version": "0.5.2", - "url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.5.2.zip" + "version": "0.6.0", + "url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.0.zip" } ]