Skip to content

Commit

Permalink
Fix and enhance enhance_path_recursive
Browse files Browse the repository at this point in the history
  • Loading branch information
daxgames committed Apr 29, 2020
1 parent c9bc1f6 commit 1f5ea5e
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 28 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

bin/*
!bin/Readme.md
opt/*
!opt/Readme.md

vendor/*/*
!vendor/bin/*
Expand Down
22 changes: 16 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 blow 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 blow 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
Expand Down
5 changes: 5 additions & 0 deletions opt/Readme.md
Original file line number Diff line number Diff line change
@@ -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.
6 changes: 4 additions & 2 deletions vendor/init.bat
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,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
Expand Down Expand Up @@ -261,9 +263,9 @@ endlocal

:PATH_ENHANCE
%lib_path% enhance_path "%CMDER_ROOT%\vendor\bin"
%lib_path% enhance_path_recursive "%CMDER_ROOT%\bin" %max_depth%
%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

Expand Down
61 changes: 41 additions & 20 deletions vendor/lib/lib_path.cmd
Original file line number Diff line number Diff line change
Expand Up @@ -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%
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -150,52 +159,64 @@ exit /b
exit 1
)

if "%~2" gtr "1" (
set "max_depth=%~2"
set "depth=%~2"
set "max_depth=%~3"

if "%~4" neq "" if /i "%~4" == "append" (
set "position=%~4"
) else (
set "max_depth=1"
set "position="
)

if "%~3" neq "" if /i "%~3" == "append" (
set "position=%~3"
dir "%add_path%" | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL
if "%ERRORLEVEL%" == "0" (
set "add_to_path=%add_path%"
) else (
set "position="
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:;;=;%"
if "%fast_init%" == "1" (
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
set /a "depth=%depth%+1"
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
Expand Down

0 comments on commit 1f5ea5e

Please sign in to comment.