Add /f for fast init. (#1942)

The below enables Cmder Fast Init mode for `cmd.exe` sessions.  This is more like the Cmder 1.3.5 init process.  See issue #1821 

Cmder Fast Init mode bypasses or disables the following Cmder 1.3.6+ features:

* Git root and version detection.  Defaults to `%cmder_root%\vendor\git-for-windows` if it exists.
* Path enhance validation before path modify so `%Path%` enhancements are forced.
* Recursive path add for `"%CMDER_ROOT%\bin"`
* Recursive path add for `"%CMDER_USER_BIN%\bin"` if `/c [user_config_folder` is specified.
* `/d` switch to enable debug output.
* `/v` switch to enable debug output.

Add `/f` to Cmder task as shown below t enable fast init:

_Note 1: This setting is invalid in Cmder `Powershell` and `Bash` sessions~_

_Note 2: Add `/t` also to see init timer output_

![image](https://user-images.githubusercontent.com/7318053/47957637-052e3880-df90-11e8-93ef-91e1ab696d82.png)

Cuts ~2.4 seconds off of init time.

![image](https://user-images.githubusercontent.com/7318053/47957795-45db8100-df93-11e8-8ae0-551d12c4e2dc.png)
This commit is contained in:
Dax T Games 2018-11-03 20:36:51 -04:00 committed by Benjamin Staneck
parent 5be25f29f8
commit a5bdecca77
6 changed files with 38 additions and 18 deletions

View File

@ -138,17 +138,18 @@ You may find some Monokai color schemes for mintty to match Cmder [here](https:/
##### Command Line Arguments for `init.bat`
| Argument | Description | Default |
| ----------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------- |
| `/c [user cmder root]` | Enables user bin and config folders for 'Cmder as admin' sessions due to non-shared environment. | not set |
| `/d` | Enables debug output. | not set |
| `/git_install_root [file path]` | User specified Git installation root path. | `%CMDER_ROOT%\vendor\Git-for-Windows` |
| `/home [home folder]` | User specified folder path to set `%HOME%` environment variable. | `%userprofile%` |
| `/max_depth [1-5]` | Define max recurse depth when adding to the path for `%cmder_root%\bin` and `%cmder_user_bin%` | 1 |
| `/svn_ssh [path to ssh.exe]` | Define `%SVN_SSH%` so we can use git svn with ssh svn repositories. | `%GIT_INSTALL_ROOT%\bin\ssh.exe` |
| `/user_aliases [file path]` | File path pointing to user aliases. | `%CMDER_ROOT%\config\user-aliases.cmd` |
| `/v` | Enables verbose output. | not set |
| (custom arguments) | User defined arguments processed by `cexec`. Type `cexec /?` for more useage. | not set |
| Argument | Description | Default |
| ----------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------- |
| `/c [user cmder root]` | Enables user bin and config folders for 'Cmder as admin' sessions due to non-shared environment. | not set |
| `/d` | Enables debug output. | not set |
| `/f` | Enables Cmder Fast Init Mode. This disables some features, see pull request [#1492](https://github.com/cmderdev/cmder/pull/1942) for more details. | not set |
| `/git_install_root [file path]` | User specified Git installation root path. | `%CMDER_ROOT%\vendor\Git-for-Windows` |
| `/home [home folder]` | User specified folder path to set `%HOME%` environment variable. | `%userprofile%` |
| `/max_depth [1-5]` | Define max recurse depth when adding to the path for `%cmder_root%\bin` and `%cmder_user_bin%` | 1 |
| `/svn_ssh [path to ssh.exe]` | Define `%SVN_SSH%` so we can use git svn with ssh svn repositories. | `%GIT_INSTALL_ROOT%\bin\ssh.exe` |
| `/user_aliases [file path]` | File path pointing to user aliases. | `%CMDER_ROOT%\config\user-aliases.cmd` |
| `/v` | Enables verbose output. | not set |
| (custom arguments) | User defined arguments processed by `cexec`. Type `cexec /?` for more useage. | not set |
### Cmder Shell User Config
Single user portable configuration is possible using the cmder specific shell config files. Edit the below files to add your own configuration:

11
vendor/init.bat vendored
View File

@ -12,6 +12,7 @@ set cmder_init_start=%time%
set verbose_output=0
set debug_output=0
set time_init=0
set fast_init=0
set max_depth=1
set "CMDER_USER_FLAGS= "
@ -41,7 +42,9 @@ call "%cmder_root%\vendor\lib\lib_profile"
:var_loop
if "%~1" == "" (
goto :start
) else if /i "%1"=="/t" (
) 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
@ -147,6 +150,11 @@ if not defined TERM set TERM=cygwin
setlocal enabledelayedexpansion
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..."
@ -208,7 +216,6 @@ for /F "delims=" %%F in ('where git.exe 2^>nul') do (
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 from '!GIT_INSTALL_ROOT!..."
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\cmd"
goto :CONFIGURE_GIT
) else (
goto :NO_GIT

View File

@ -1,6 +1,6 @@
@echo off
rem set args=%*
if "%fast_init%" == "1" exit /b
call "%~dp0lib_base.cmd"
set lib_console=call "%~dp0lib_console.cmd"

View File

@ -1,11 +1,9 @@
@echo off
call "%~dp0lib_base.cmd"
call "%%~dp0lib_console.cmd"
set lib_git=call "%~dp0lib_git.cmd"
if "%~1" == "/h" (
%lib_base% help "%~0"
) else if "%1" neq "" (

View File

@ -52,6 +52,15 @@ exit /b
set "position="
)
if "%fast_init%" == "1" (
if "%position%" == "append" (
set "PATH=%PATH%;%add_path%"
) else (
set "PATH=%add_path%;%PATH%"
)
goto :end_enhance_path
)
set found=0
set "find_query=%add_path%"
set "find_query=%find_query:\=\\%"
@ -85,6 +94,7 @@ exit /b
%lib_console% debug_output :enhance_path "AFTER Env Var - PATH=!path!"
)
:end_enhance_path
endlocal & set "PATH=%PATH:;;=;%"
exit /b
@ -115,7 +125,6 @@ exit /b
:::.
::: path <out> Sets the path env variable if required.
:::-------------------------------------------------------------------------------
setlocal enabledelayedexpansion
if "%~1" neq "" (
set "add_path=%~1"
@ -136,6 +145,11 @@ exit /b
set "position="
)
if "%fast_init%" == "1" (
call :enhance_path "%add_path%" %position%
goto :end_enhance_path_recursive
)
if "%depth%" == "" set depth=0
%lib_console% debug_output :enhance_path_recursive "Env Var - add_path=%add_path%"
@ -155,5 +169,6 @@ exit /b
)
)
:end_enhance_path_recursive
endlocal & set "PATH=%PATH%"
exit /b

View File

@ -1,6 +1,5 @@
@echo off
call "%~dp0lib_base.cmd"
call "%%~dp0lib_console"
set lib_profile=call "%~dp0lib_profile.cmd"