diff --git a/.gitignore b/.gitignore index bc4fb83..67678bb 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ bin/* !bin/Readme.md +opt/* +!opt/Readme.md vendor/*/* !vendor/bin/* diff --git a/README.md b/README.md index 753e5eb..56f3949 100644 --- a/README.md +++ b/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 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 diff --git a/opt/Readme.md b/opt/Readme.md new file mode 100644 index 0000000..acf5fd7 --- /dev/null +++ b/opt/Readme.md @@ -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. diff --git a/vendor/init.bat b/vendor/init.bat index 6c3acdb..8d36dc0 100644 --- a/vendor/init.bat +++ b/vendor/init.bat @@ -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 @@ -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 diff --git a/vendor/lib/lib_path.cmd b/vendor/lib/lib_path.cmd index a1a8fbe..a8fe253 100644 --- a/vendor/lib/lib_path.cmd +++ b/vendor/lib/lib_path.cmd @@ -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