mirror of
				https://github.com/cmderdev/cmder.git
				synced 2025-11-04 11:22:13 +08:00 
			
		
		
		
	Merge pull request #2311 from daxgames/fix_path_enh_recurs
Fix and enhance enhance_path_recursive
This commit is contained in:
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -3,6 +3,8 @@
 | 
			
		||||
 | 
			
		||||
bin/*
 | 
			
		||||
!bin/Readme.md
 | 
			
		||||
opt/*
 | 
			
		||||
!opt/Readme.md
 | 
			
		||||
 | 
			
		||||
vendor/*/*
 | 
			
		||||
!vendor/bin/*
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								README.md
									
									
									
									
									
								
							@@ -23,19 +23,29 @@ The Cmder's user interface is also designed to be more eye pleasing, and you can
 | 
			
		||||
### Shared Cmder install with Non-Portable Individual User Config
 | 
			
		||||
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
 | 
			
		||||
2. Extract the archive to a shared location.
 | 
			
		||||
3. (optional) Place your own executable files into the `%cmder_root%\bin` folder to be injected into your PATH.
 | 
			
		||||
4. (optional) Create `%userprofile%\cmder_config\bin` folder to be injected into individual users PATH.  Default is to auto create this on first run.
 | 
			
		||||
5. (optional) Place your own executable files into the `%userprofile%\cmder_config\bin` folder to be injected into your PATH.
 | 
			
		||||
6. Run `Cmder.exe` with `/C` command line argument. Example: `cmder.exe /C %userprofile%\cmder_config`
 | 
			
		||||
3. (optional) Place your own executable files and custom app folders into the `%cmder_root%\bin`. See: [opt/README.md](./bin/README)
 | 
			
		||||
   - This folder to be injected into your PATH by default.
 | 
			
		||||
   - See `/max_depth [1-5]` in 'Command Line Arguments for `init.bat`' table to add subdirectories recursively.
 | 
			
		||||
4. (optional) Place your own custom app folders into the `%cmder_root%\opt`. See: [opt/README.md](./opt/README)
 | 
			
		||||
   - This folder will NOT be injected into your PATH so you have total control of what gets added.
 | 
			
		||||
5. Run `Cmder.exe` with `/C` command line argument. Example: `cmder.exe /C %userprofile%\cmder_config`
 | 
			
		||||
   * This will create the following directory structure if it is missing.
 | 
			
		||||
 | 
			
		||||
     ```
 | 
			
		||||
     c:\users\[username]\cmder_config
 | 
			
		||||
     ├───bin
 | 
			
		||||
     └───config
 | 
			
		||||
         └───profile.d
 | 
			
		||||
     ├───config
 | 
			
		||||
     │   └───profile.d
 | 
			
		||||
     └───opt
 | 
			
		||||
     ```
 | 
			
		||||
 | 
			
		||||
  - (optional) Place your own executable files and custom app folders into `%userprofile%\cmder_config\bin`.
 | 
			
		||||
    - This folder to be injected into your PATH by default.
 | 
			
		||||
    - See `/max_depth [1-5]` in 'Command Line Arguments for `init.bat`' table to add subdirectories recursively.
 | 
			
		||||
  - (optional) Place your own custom app folders into the `%user_profile%\cmder_config\opt`.
 | 
			
		||||
    - This folder will NOT be injected into your PATH so you have total control of what gets added.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Both the shared install and the individual user config locations can contain a full set of init and profile.d scripts enabling shared config with user overrides.  See below.
 | 
			
		||||
 | 
			
		||||
## Cmder.exe Command Line Arguments
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								opt/Readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								opt/Readme.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
## Bin
 | 
			
		||||
 | 
			
		||||
This folder is for optional user packages and will not be automatically injected into the PATH.
 | 
			
		||||
 | 
			
		||||
Use `%lib_path% enhance_path "%cmder_root%\[path to folder]"` in `%cmder_root%\config\user_profile.cmd` or `%cmder_root%\config\profile.d\*.cmd` to add to the path.
 | 
			
		||||
							
								
								
									
										4
									
								
								vendor/bin/cexec.cmd
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/bin/cexec.cmd
									
									
									
									
										vendored
									
									
								
							@@ -19,8 +19,8 @@ set "currenArgu=%~1"
 | 
			
		||||
if /i "%currenArgu%" equ "/setPath" (
 | 
			
		||||
  :: set %flag_exists% shortcut
 | 
			
		||||
  endlocal
 | 
			
		||||
  set "ccall=call %~dp0cexec.cmd"
 | 
			
		||||
  set "cexec=%~dp0cexec.cmd"
 | 
			
		||||
  set "ccall=call ^"%~dp0cexec.cmd^""
 | 
			
		||||
  set "cexec=^"%~dp0cexec.cmd^""
 | 
			
		||||
) else if /i "%currenArgu%" == "/?" (
 | 
			
		||||
  goto :help
 | 
			
		||||
) else if /i "%currenArgu%" equ "/help" (
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								vendor/init.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								vendor/init.bat
									
									
									
									
										vendored
									
									
								
							@@ -9,13 +9,23 @@ set CMDER_INIT_START=%time%
 | 
			
		||||
:: !!! 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.
 | 
			
		||||
set verbose_output=0
 | 
			
		||||
set debug_output=0
 | 
			
		||||
set time_init=0
 | 
			
		||||
set fast_init=0
 | 
			
		||||
set max_depth=1
 | 
			
		||||
:: Add *nix tools to end of path. 0 turns off *nix tools.
 | 
			
		||||
set nix_tools=1
 | 
			
		||||
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
 | 
			
		||||
@@ -120,6 +130,8 @@ goto var_loop
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
@@ -154,6 +166,12 @@ if "%CMDER_CLINK%" == "1" (
 | 
			
		||||
  %lib_console% verbose_output "WARNING: Incompatible 'ComSpec/Shell' Detetected Skipping Clink Injection!"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if "%CMDER_CONFIGURED%" == "1" (
 | 
			
		||||
  echo Cmder is already configured, skipping Cmder Init!
 | 
			
		||||
 | 
			
		||||
  goto CMDER_CONFIGURED
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
:: Prepare for git-for-windows
 | 
			
		||||
 | 
			
		||||
:: I do not even know, copypasted from their .bat
 | 
			
		||||
@@ -261,9 +279,11 @@ endlocal
 | 
			
		||||
 | 
			
		||||
:PATH_ENHANCE
 | 
			
		||||
%lib_path% enhance_path "%CMDER_ROOT%\vendor\bin"
 | 
			
		||||
%lib_path% enhance_path_recursive "%CMDER_ROOT%\bin" %max_depth%
 | 
			
		||||
 | 
			
		||||
: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%" %max_depth%
 | 
			
		||||
  %lib_path% enhance_path_recursive "%CMDER_USER_BIN%" 0 %max_depth%
 | 
			
		||||
)
 | 
			
		||||
%lib_path% enhance_path "%CMDER_ROOT%" append
 | 
			
		||||
 | 
			
		||||
@@ -367,6 +387,8 @@ if "%CMDER_ALIASES%" == "1" if exist "%CMDER_ROOT%\bin\alias.bat" if exist "%CMD
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
set initialConfig=
 | 
			
		||||
 | 
			
		||||
:CMDER_CONFIGURED
 | 
			
		||||
set CMDER_CONFIGURED=1
 | 
			
		||||
 | 
			
		||||
set CMDER_INIT_END=%time%
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										63
									
								
								vendor/lib/lib_path.cmd
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										63
									
								
								vendor/lib/lib_path.cmd
									
									
									
									
										vendored
									
									
								
							@@ -51,17 +51,26 @@ exit /b
 | 
			
		||||
        set "position="
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    dir "%add_path%" | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL
 | 
			
		||||
    if "%ERRORLEVEL%" == "0" (
 | 
			
		||||
        set "add_to_path=%add_path%"
 | 
			
		||||
    ) else (
 | 
			
		||||
        set "add_to_path="
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    if "%fast_init%" == "1" (
 | 
			
		||||
      if "%position%" == "append" (
 | 
			
		||||
        set "PATH=%PATH%;%add_path%"
 | 
			
		||||
        set "PATH=%PATH%;%add_to_path%"
 | 
			
		||||
      ) else (
 | 
			
		||||
        set "PATH=%add_path%;%PATH%"
 | 
			
		||||
        set "PATH=%add_to_path%;%PATH%"
 | 
			
		||||
      )
 | 
			
		||||
      goto :end_enhance_path
 | 
			
		||||
    ) else if "add_to_path" equ "" (
 | 
			
		||||
      goto :end_enhance_path
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    set found=0
 | 
			
		||||
    set "find_query=%add_path%"
 | 
			
		||||
    set "find_query=%add_to_path%"
 | 
			
		||||
    set "find_query=%find_query:\=\\%"
 | 
			
		||||
    set "find_query=%find_query: =\ %"
 | 
			
		||||
    set OLD_PATH=%PATH%
 | 
			
		||||
@@ -90,11 +99,11 @@ exit /b
 | 
			
		||||
 | 
			
		||||
    if "%found%" == "0" (
 | 
			
		||||
        if /i "%position%" == "append" (
 | 
			
		||||
            %lib_console% debug_output :enhance_path "Appending '%add_path%'"
 | 
			
		||||
            set "PATH=%PATH%;%add_path%"
 | 
			
		||||
            %lib_console% debug_output :enhance_path "Appending '%add_to_path%'"
 | 
			
		||||
            set "PATH=%PATH%;%add_to_path%"
 | 
			
		||||
        ) else (
 | 
			
		||||
            %lib_console% debug_output :enhance_path "Prepending '%add_path%'"
 | 
			
		||||
            set "PATH=%add_path%;%PATH%"
 | 
			
		||||
            %lib_console% debug_output :enhance_path "Prepending '%add_to_path%'"
 | 
			
		||||
            set "PATH=%add_to_path%;%PATH%"
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        set found=1
 | 
			
		||||
@@ -150,20 +159,26 @@ exit /b
 | 
			
		||||
        exit 1
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    if "%~2" gtr "1" (
 | 
			
		||||
        set "max_depth=%~2"
 | 
			
		||||
    ) else (
 | 
			
		||||
        set "max_depth=1"
 | 
			
		||||
    )
 | 
			
		||||
    set "depth=%~2"
 | 
			
		||||
    set "max_depth=%~3"
 | 
			
		||||
 | 
			
		||||
    if "%~3" neq "" if /i "%~3" == "append" (
 | 
			
		||||
        set "position=%~3"
 | 
			
		||||
    if "%~4" neq "" if /i "%~4" == "append" (
 | 
			
		||||
        set "position=%~4"
 | 
			
		||||
    ) else (
 | 
			
		||||
        set "position="
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    dir "%add_path%" | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL
 | 
			
		||||
    if "%ERRORLEVEL%" == "0" (
 | 
			
		||||
        set "add_to_path=%add_path%"
 | 
			
		||||
    ) else (
 | 
			
		||||
        set "add_to_path="
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    if "%fast_init%" == "1" (
 | 
			
		||||
      call :enhance_path "%add_path%" %position%
 | 
			
		||||
        if "%add_to_path%" neq "" (
 | 
			
		||||
            call :enhance_path "%add_to_path%" %position%
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    set "PATH=%PATH:;;=;%"
 | 
			
		||||
@@ -171,20 +186,22 @@ exit /b
 | 
			
		||||
      exit /b
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    if "%depth%" == "" set depth=0
 | 
			
		||||
 | 
			
		||||
    %lib_console% debug_output  :enhance_path_recursive "Env Var - add_path=%add_path%"
 | 
			
		||||
    %lib_console% debug_output  :enhance_path_recursive "Env Var - add_path=%add_to_path%"
 | 
			
		||||
    %lib_console% debug_output  :enhance_path_recursive "Env Var - position=%position%"
 | 
			
		||||
    %lib_console% debug_output  :enhance_path_recursive "Env Var - depth=%depth%"
 | 
			
		||||
    %lib_console% debug_output  :enhance_path_recursive "Env Var - max_depth=%max_depth%"
 | 
			
		||||
 | 
			
		||||
    if %max_depth% gtr %depth% (
 | 
			
		||||
        %lib_console% debug_output :enhance_path_recursive "Adding parent directory - '%add_path%'"
 | 
			
		||||
        call :enhance_path "%add_path%" %position%
 | 
			
		||||
        if "%add_to_path%" neq "" (
 | 
			
		||||
            %lib_console% debug_output :enhance_path_recursive "Adding parent directory - '%add_to_path%'"
 | 
			
		||||
            call :enhance_path "%add_to_path%" %position%
 | 
			
		||||
        )
 | 
			
		||||
        call :set_depth
 | 
			
		||||
        call :loop_depth
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    set "PATH=%PATH%"
 | 
			
		||||
 | 
			
		||||
    exit /b
 | 
			
		||||
 | 
			
		||||
: set_depth
 | 
			
		||||
@@ -192,10 +209,14 @@ exit /b
 | 
			
		||||
    exit /b
 | 
			
		||||
 | 
			
		||||
:loop_depth
 | 
			
		||||
    if %depth% == %max_depth% (
 | 
			
		||||
        exit /b
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    for /d %%i in ("%add_path%\*") do (
 | 
			
		||||
        %lib_console% debug_output  :enhance_path_recursive "Env Var BEFORE - depth=%depth%"
 | 
			
		||||
        %lib_console% debug_output :enhance_path_recursive "Found Subdirectory - '%%~fi'"
 | 
			
		||||
        call :enhance_path_recursive "%%~fi" %max_depth% %position%
 | 
			
		||||
        call :enhance_path_recursive "%%~fi" %depth% %max_depth% %position%
 | 
			
		||||
        %lib_console% debug_output  :enhance_path_recursive "Env Var AFTER- depth=%depth%"
 | 
			
		||||
    )
 | 
			
		||||
    exit /b
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user