mirror of
				https://github.com/cmderdev/cmder.git
				synced 2025-10-31 17:32:27 +08:00 
			
		
		
		
	Update init.bat
This commit is contained in:
		
							
								
								
									
										409
									
								
								vendor/init.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										409
									
								
								vendor/init.bat
									
									
									
									
										vendored
									
									
								
							| @@ -1,408 +1 @@ | ||||
| @echo off | ||||
|  | ||||
| set CMDER_INIT_START=%time% | ||||
|  | ||||
| :: Init Script for cmd.exe | ||||
| :: Created as part of cmder project | ||||
|  | ||||
| :: !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED | ||||
| :: !!! Use "%CMDER_ROOT%\config\user_profile.cmd" to add your own startup commands | ||||
|  | ||||
| :: Use /v command line arg or set to > 0 for verbose output to aid in debugging. | ||||
| if not defined verbose_output set verbose_output=0 | ||||
|  | ||||
| :: Use /d command line arg or set to 1 for debug output to aid in debugging. | ||||
| if not defined debug_output set debug_output=0 | ||||
|  | ||||
| :: Use /t command line arg or set to 1 to display init time. | ||||
| if not defined time_init set time_init=0 | ||||
|  | ||||
| :: Use /f command line arg to speed up init at the expense of some functionality. | ||||
| if not defined fast_init set fast_init=0 | ||||
|  | ||||
| :: Use /max_depth 1-5 to set max recurse depth for calls to `enhance_path_recursive` | ||||
| if not defined max_depth set max_depth=1 | ||||
|  | ||||
| :: Add *nix tools to end of path. 0 turns off *nix tools, 2 adds *nix tools to the front of thr path. | ||||
| if not defined nix_tools set nix_tools=1 | ||||
|  | ||||
| set "CMDER_USER_FLAGS= " | ||||
|  | ||||
| :: Find root dir | ||||
| if not defined CMDER_ROOT ( | ||||
|     if defined ConEmuDir ( | ||||
|         for /f "delims=" %%i in ("%ConEmuDir%\..\..") do ( | ||||
|             set "CMDER_ROOT=%%~fi" | ||||
|         ) | ||||
|     ) else ( | ||||
|         for /f "delims=" %%i in ("%~dp0\..") do ( | ||||
|             set "CMDER_ROOT=%%~fi" | ||||
|         ) | ||||
|     ) | ||||
| ) | ||||
|  | ||||
| :: Remove trailing '\' from %CMDER_ROOT% | ||||
| if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%" | ||||
|  | ||||
| call "%cmder_root%\vendor\bin\cexec.cmd" /setpath | ||||
| call "%cmder_root%\vendor\lib\lib_base" | ||||
| call "%cmder_root%\vendor\lib\lib_path" | ||||
| call "%cmder_root%\vendor\lib\lib_console" | ||||
| call "%cmder_root%\vendor\lib\lib_git" | ||||
| call "%cmder_root%\vendor\lib\lib_profile" | ||||
|  | ||||
| :var_loop | ||||
|     if "%~1" == "" ( | ||||
|         goto :start | ||||
|     ) else if /i "%1" == "/f" ( | ||||
|         set fast_init=1 | ||||
|     ) else if /i "%1" == "/t" ( | ||||
|         set time_init=1 | ||||
|     ) else if /i "%1"=="/v" ( | ||||
|         set verbose_output=1 | ||||
|     ) else if /i "%1"=="/d" ( | ||||
|         set debug_output=1 | ||||
|     ) else if /i "%1" == "/max_depth" ( | ||||
|         if "%~2" geq "1" if "%~2" leq "5" ( | ||||
|             set "max_depth=%~2" | ||||
|             shift | ||||
|         ) else ( | ||||
|             %lib_console% show_error "'/max_depth' requires a number between 1 and 5!" | ||||
|             exit /b | ||||
|         ) | ||||
|     ) else if /i "%1" == "/c" ( | ||||
|         if exist "%~2" ( | ||||
|             if not exist "%~2\bin" mkdir "%~2\bin" | ||||
|             set "cmder_user_bin=%~2\bin" | ||||
|             if not exist "%~2\config\profile.d" mkdir "%~2\config\profile.d" | ||||
|             set "cmder_user_config=%~2\config" | ||||
|             shift | ||||
|         ) | ||||
|     ) else if /i "%1" == "/user_aliases" ( | ||||
|         if exist "%~2" ( | ||||
|             set "user_aliases=%~2" | ||||
|             shift | ||||
|         ) | ||||
|     ) else if /i "%1" == "/git_install_root" ( | ||||
|         if exist "%~2" ( | ||||
|             set "GIT_INSTALL_ROOT=%~2" | ||||
|             shift | ||||
|         ) else ( | ||||
|             %lib_console% show_error "The Git install root folder "%~2", you specified does not exist!" | ||||
|             exit /b | ||||
|         ) | ||||
|     ) else if /i "%1"=="/nix_tools" ( | ||||
|         if "%2" equ "0" ( | ||||
|             REM Do not add *nix tools to path | ||||
|             set nix_tools=0 | ||||
|             shift | ||||
|         ) else if "%2" equ "1" ( | ||||
|             REM Add *nix tools to end of path | ||||
|             set nix_tools=1 | ||||
|             shift | ||||
|         ) else if "%2" equ "2" ( | ||||
|             REM Add *nix tools to front of path | ||||
|             set nix_tools=2 | ||||
|             shift | ||||
|         ) | ||||
|     ) else if /i "%1" == "/home" ( | ||||
|         if exist "%~2" ( | ||||
|             set "HOME=%~2" | ||||
|             shift | ||||
|         ) else ( | ||||
|             %lib_console% show_error The home folder "%2", you specified does not exist! | ||||
|             exit /b | ||||
|         ) | ||||
|     ) else if /i "%1" == "/svn_ssh" ( | ||||
|         set SVN_SSH=%2 | ||||
|         shift | ||||
|     ) else ( | ||||
|       set "CMDER_USER_FLAGS=%1 %CMDER_USER_FLAGS%" | ||||
|     ) | ||||
|     shift | ||||
| goto var_loop | ||||
|  | ||||
| :start | ||||
| :: Sets CMDER_SHELL, CMDER_CLINK, CMDER_ALIASES | ||||
| %lib_base% cmder_shell | ||||
| %lib_console% debug_output init.bat "Env Var - CMDER_ROOT=%CMDER_ROOT%" | ||||
| %lib_console% debug_output init.bat "Env Var - debug_output=%debug_output%" | ||||
|  | ||||
| if defined CMDER_USER_CONFIG ( | ||||
|     %lib_console% debug_output init.bat "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '%CMDER_USER_CONFIG%'!" | ||||
|  | ||||
|     if not exist "%CMDER_USER_CONFIG%\opt" md "%CMDER_USER_CONFIG%\opt" | ||||
| ) | ||||
|  | ||||
| :: Pick right version of clink | ||||
| if "%PROCESSOR_ARCHITECTURE%"=="x86" ( | ||||
|     set clink_architecture=x86 | ||||
|     set architecture_bits=32 | ||||
| ) else ( | ||||
|     set clink_architecture=x64 | ||||
|     set architecture_bits=64 | ||||
| ) | ||||
|  | ||||
| if "%CMDER_CLINK%" == "1" ( | ||||
|   %lib_console% verbose_output "Injecting Clink!" | ||||
|  | ||||
|   :: Run clink | ||||
|   if defined CMDER_USER_CONFIG ( | ||||
|     if not exist "%CMDER_USER_CONFIG%\settings" ( | ||||
|       echo Generating clink initial settings in "%CMDER_USER_CONFIG%\settings" | ||||
|       copy "%CMDER_ROOT%\vendor\clink_settings.default" "%CMDER_USER_CONFIG%\settings" | ||||
|       echo Additional *.lua files in "%CMDER_USER_CONFIG%" are loaded on startup.\ | ||||
|     ) | ||||
|     "%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_USER_CONFIG%" --scripts "%CMDER_ROOT%\vendor" | ||||
|   ) else ( | ||||
|     if not exist "%CMDER_ROOT%\config\settings" ( | ||||
|       echo Generating clink initial settings in "%CMDER_ROOT%\config\settings" | ||||
|       copy "%CMDER_ROOT%\vendor\clink_settings.default" "%CMDER_ROOT%\config\settings" | ||||
|       echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup. | ||||
|     ) | ||||
|     "%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor" | ||||
|   ) | ||||
| ) else ( | ||||
|   %lib_console% verbose_output "WARNING: Incompatible 'ComSpec/Shell' Detetected Skipping Clink Injection!" | ||||
| ) | ||||
|  | ||||
| if "%CMDER_CONFIGURED%" GTR "1" ( | ||||
|   %lib_console% verbose_output "Cmder is already configured, skipping Cmder Init!" | ||||
|  | ||||
|   goto USER_ALIASES | ||||
| ) else if "%CMDER_CONFIGURED%" == "1" ( | ||||
|   %lib_console% verbose_output "Cmder is already configured, skipping to Cmder User Init!" | ||||
|  | ||||
|   goto USER_CONFIG_START | ||||
| ) | ||||
|  | ||||
| :: Prepare for git-for-windows | ||||
|  | ||||
| :: I do not even know, copypasted from their .bat | ||||
| set PLINK_PROTOCOL=ssh | ||||
| if not defined TERM set TERM=cygwin | ||||
|  | ||||
| :: The idea: | ||||
| :: * if the users points as to a specific git, use that | ||||
| :: * test if a git is in path and if yes, use that | ||||
| :: * last, use our vendored git | ||||
| :: also check that we have a recent enough version of git by examining the version string | ||||
| if defined GIT_INSTALL_ROOT ( | ||||
|     if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" goto :SPECIFIED_GIT | ||||
| ) else if "%fast_init%" == "1" ( | ||||
|     if exist "%CMDER_ROOT%\vendor\git-for-windows\cmd\git.exe" ( | ||||
|       %lib_console% debug_output "Skipping Git Auto-Detect!" | ||||
|       goto :VENDORED_GIT | ||||
|     ) | ||||
| ) | ||||
|  | ||||
| %lib_console% debug_output init.bat "Looking for Git install root..." | ||||
|  | ||||
| :: get the version information for vendored git binary | ||||
| %lib_git% read_version VENDORED "%CMDER_ROOT%\vendor\git-for-windows\cmd" | ||||
| %lib_git% validate_version VENDORED %GIT_VERSION_VENDORED% | ||||
|  | ||||
| :: check if git is in path... | ||||
| for /F "delims=" %%F in ('where git.exe 2^>nul') do ( | ||||
|     :: get the absolute path to the user provided git binary | ||||
|     %lib_git% is_git_shim "%%~dpF" | ||||
|     %lib_git% get_user_git_version | ||||
|     %lib_git% compare_git_versions | ||||
|  | ||||
|     if defined GIT_INSTALL_ROOT ( | ||||
|         goto :FOUND_GIT | ||||
|     ) | ||||
| ) | ||||
|  | ||||
| :: our last hope: our own git... | ||||
| :VENDORED_GIT | ||||
| if exist "%CMDER_ROOT%\vendor\git-for-windows" ( | ||||
|     set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows" | ||||
|     %lib_console% debug_output "Using vendored Git '%GIT_VERSION_VENDORED%'..." | ||||
|     goto :CONFIGURE_GIT | ||||
| ) else ( | ||||
|     goto :NO_GIT | ||||
| ) | ||||
|  | ||||
| :SPECIFIED_GIT | ||||
| %lib_console% debug_output "Using /GIT_INSTALL_ROOT..." | ||||
| goto :CONFIGURE_GIT | ||||
|  | ||||
| :FOUND_GIT | ||||
| %lib_console% debug_output "Using found Git '%GIT_VERSION_USER%' from '%GIT_INSTALL_ROOT%..." | ||||
| goto :CONFIGURE_GIT | ||||
|  | ||||
| :CONFIGURE_GIT | ||||
| %lib_console% debug_output "Using Git from '%GIT_INSTALL_ROOT%..." | ||||
| :: Add git to the path | ||||
| rem add the unix commands at the end to not shadow windows commands like more | ||||
| if %nix_tools% equ 1 ( | ||||
|     %lib_console% verbose_output "Preferring Windows commands" | ||||
|     set "path_position=append" | ||||
| ) else ( | ||||
|     %lib_console% verbose_output "Preferring *nix commands" | ||||
|     set "path_position=" | ||||
| ) | ||||
|  | ||||
| if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" %lib_path% enhance_path "%GIT_INSTALL_ROOT%\cmd" %path_position% | ||||
| if %nix_tools% geq 1 ( | ||||
|     if exist "%GIT_INSTALL_ROOT%\mingw32" ( | ||||
|         %lib_path% enhance_path "%GIT_INSTALL_ROOT%\mingw32\bin" %path_position% | ||||
|     ) else if exist "%GIT_INSTALL_ROOT%\mingw64" ( | ||||
|         %lib_path% enhance_path "%GIT_INSTALL_ROOT%\mingw64\bin" %path_position% | ||||
|     ) | ||||
|  | ||||
|     %lib_path% enhance_path "%GIT_INSTALL_ROOT%\usr\bin" %path_position% | ||||
| ) | ||||
|  | ||||
| :: define SVN_SSH so we can use git svn with ssh svn repositories | ||||
| if not defined SVN_SSH set "SVN_SSH=%GIT_INSTALL_ROOT:\=\\%\\bin\\ssh.exe" | ||||
|  | ||||
| :: Find locale.exe: From the git install root, from the path, using the git installed env, or fallback using the env from the path. | ||||
| if not defined git_locale if exist "%GIT_INSTALL_ROOT%\usr\bin\locale.exe" set git_locale="%GIT_INSTALL_ROOT%\usr\bin\locale.exe" | ||||
| if not defined git_locale for /F "tokens=* delims=" %%F in ('where locale.exe 2^>nul') do ( if not defined git_locale  set git_locale="%%F" ) | ||||
| if not defined git_locale if exist "%GIT_INSTALL_ROOT%\usr\bin\env.exe" set git_locale="%GIT_INSTALL_ROOT%\usr\bin\env.exe" /usr/bin/locale | ||||
| if not defined git_locale for /F "tokens=* delims=" %%F in ('where env.exe 2^>nul') do ( if not defined git_locale  set git_locale="%%F" /usr/bin/locale ) | ||||
|  | ||||
| if defined git_locale ( | ||||
|   %lib_console% debug_output init.bat "Env Var - git_locale=%git_locale%" | ||||
|   if not defined LANG ( | ||||
|       for /F "delims=" %%F in ('%git_locale% -uU 2') do ( | ||||
|           set "LANG=%%F" | ||||
|       ) | ||||
|   ) | ||||
| ) | ||||
|  | ||||
| %lib_console% debug_output init.bat "Env Var - GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%" | ||||
| %lib_console% debug_output init.bat "Found Git in: '%GIT_INSTALL_ROOT%'" | ||||
| goto :PATH_ENHANCE | ||||
|  | ||||
| :NO_GIT | ||||
| :: Skip this if GIT WAS FOUND else we did 'endlocal' above! | ||||
| endlocal | ||||
|  | ||||
| :PATH_ENHANCE | ||||
| %lib_path% enhance_path "%CMDER_ROOT%\vendor\bin" | ||||
|  | ||||
| :USER_CONFIG_START | ||||
| %lib_path% enhance_path_recursive "%CMDER_ROOT%\bin" 0 %max_depth% | ||||
| if defined CMDER_USER_BIN ( | ||||
|   %lib_path% enhance_path_recursive "%CMDER_USER_BIN%" 0 %max_depth% | ||||
| ) | ||||
| %lib_path% enhance_path "%CMDER_ROOT%" append | ||||
|  | ||||
| :: Drop *.bat and *.cmd files into "%CMDER_ROOT%\config\profile.d" | ||||
| :: to run them at startup. | ||||
| %lib_profile% run_profile_d "%CMDER_ROOT%\config\profile.d" | ||||
| if defined CMDER_USER_CONFIG ( | ||||
|   %lib_profile% run_profile_d "%CMDER_USER_CONFIG%\profile.d" | ||||
| ) | ||||
|  | ||||
| :USER_ALIASES | ||||
| :: Allows user to override default aliases store using profile.d | ||||
| :: scripts run above by setting the 'aliases' env variable. | ||||
| :: | ||||
| :: Note: If overriding default aliases store file the aliases | ||||
| :: must also be self executing, see '.\user_aliases.cmd.default', | ||||
| :: and be in profile.d folder. | ||||
| if not defined user_aliases ( | ||||
|   if defined CMDER_USER_CONFIG ( | ||||
|      set "user_aliases=%CMDER_USER_CONFIG%\user_aliases.cmd" | ||||
|   ) else ( | ||||
|      set "user_aliases=%CMDER_ROOT%\config\user_aliases.cmd" | ||||
|   ) | ||||
| ) | ||||
|  | ||||
| if "%CMDER_ALIASES%" == "1" ( | ||||
|   REM The aliases environment variable is used by alias.bat to id | ||||
|   REM the default file to store new aliases in. | ||||
|   if not defined aliases ( | ||||
|     set "aliases=%user_aliases%" | ||||
|   ) | ||||
|  | ||||
|   REM Make sure we have a self-extracting user_aliases.cmd file | ||||
|   if not exist "%user_aliases%" ( | ||||
|       echo Creating initial user_aliases store in "%user_aliases%"... | ||||
|       copy "%CMDER_ROOT%\vendor\user_aliases.cmd.default" "%user_aliases%" | ||||
|   ) else ( | ||||
|     %lib_base% update_legacy_aliases | ||||
|   ) | ||||
|  | ||||
|   :: Update old 'user_aliases' to new self executing 'user_aliases.cmd' | ||||
|   if exist "%CMDER_ROOT%\config\aliases" ( | ||||
|     echo Updating old "%CMDER_ROOT%\config\aliases" to new format... | ||||
|     type "%CMDER_ROOT%\config\aliases" >> "%user_aliases%" | ||||
|     del "%CMDER_ROOT%\config\aliases" | ||||
|   ) else if exist "%user_aliases%.old_format" ( | ||||
|     echo Updating old "%user_aliases%" to new format... | ||||
|     type "%user_aliases%.old_format" >> "%user_aliases%" | ||||
|     del "%user_aliases%.old_format" | ||||
|   ) | ||||
| ) | ||||
|  | ||||
| :: Add aliases to the environment | ||||
| call "%user_aliases%" | ||||
|  | ||||
| if "%CMDER_CONFIGURED%" gtr "1" goto CMDER_CONFIGURED | ||||
|  | ||||
| :: See vendor\git-for-windows\README.portable for why we do this | ||||
| :: A | ||||
| :: A | ||||
| :: Basically we need to execute this post-install.bat because we are | ||||
| :: manually extracting the archive rather than executing the 7z sfx | ||||
| if exist "%GIT_INSTALL_ROOT%\post-install.bat" ( | ||||
|     echo Running Git for Windows one time Post Install.... | ||||
|     pushd "%GIT_INSTALL_ROOT%\" | ||||
|     "%GIT_INSTALL_ROOT%\git-cmd.exe" --no-needs-console --no-cd --command=post-install.bat | ||||
|     popd | ||||
| ) | ||||
|  | ||||
| :: Set home path | ||||
| if not defined HOME set "HOME=%USERPROFILE%" | ||||
| %lib_console% debug_output init.bat "Env Var - HOME=%HOME%" | ||||
|  | ||||
| set "initialConfig=%CMDER_ROOT%\config\user_profile.cmd" | ||||
| if exist "%CMDER_ROOT%\config\user_profile.cmd" ( | ||||
|     REM Create this file and place your own command in there | ||||
|     %lib_console% debug_output init.bat "Calling - %CMDER_ROOT%\config\user_profile.cmd" | ||||
|     call "%CMDER_ROOT%\config\user_profile.cmd" | ||||
| ) | ||||
|  | ||||
| if defined CMDER_USER_CONFIG ( | ||||
|   set "initialConfig=%CMDER_USER_CONFIG%\user_profile.cmd" | ||||
|   if exist "%CMDER_USER_CONFIG%\user_profile.cmd" ( | ||||
|       REM Create this file and place your own command in there | ||||
|       %lib_console% debug_output init.bat "Calling - %CMDER_USER_CONFIG%\user_profile.cmd | ||||
|       call "%CMDER_USER_CONFIG%\user_profile.cmd" | ||||
|   ) | ||||
| ) | ||||
|  | ||||
| if not exist "%initialConfig%" ( | ||||
|     echo Creating user startup file: "%initialConfig%" | ||||
|     copy "%CMDER_ROOT%\vendor\user_profile.cmd.default" "%initialConfig%" | ||||
| ) | ||||
|  | ||||
| if "%CMDER_ALIASES%" == "1" if exist "%CMDER_ROOT%\bin\alias.bat" if exist "%CMDER_ROOT%\vendor\bin\alias.cmd" ( | ||||
|   echo Cmder's 'alias' command has been moved into "%CMDER_ROOT%\vendor\bin\alias.cmd" | ||||
|   echo to get rid of this message either: | ||||
|   echo. | ||||
|   echo Delete the file "%CMDER_ROOT%\bin\alias.bat" | ||||
|   echo. | ||||
|   echo or | ||||
|   echo. | ||||
|   echo If you have customized it and want to continue using it instead of the included version | ||||
|   echo   * Rename "%CMDER_ROOT%\bin\alias.bat" to "%CMDER_ROOT%\bin\alias.cmd". | ||||
|   echo   * Search for 'user-aliases' and replace it with 'user_aliases'. | ||||
| ) | ||||
|  | ||||
| set initialConfig= | ||||
|  | ||||
| :CMDER_CONFIGURED | ||||
| if not defined CMDER_CONFIGURED set CMDER_CONFIGURED=1 | ||||
|  | ||||
| set CMDER_INIT_END=%time% | ||||
|  | ||||
| if %time_init% gtr 0 ( | ||||
|   "%cmder_root%\vendor\bin\timer.cmd" %CMDER_INIT_START% %CMDER_INIT_END% | ||||
| ) | ||||
| exit /b | ||||
| dtgames@kinggeek.org | ||||
|   | ||||
		Reference in New Issue
	
	Block a user