diff --git a/README.md b/README.md index d50c61f..15e7267 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ You may find some Monokai color schemes for mintty to match Cmder [here](https:/ | `/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-liases.cmd` | | `/v` | Enables verbose output. | not set | -| (custom arguments) | User defined arguments processed by `flag_exists`. Type `%flag_exists% /?` for more useage. | 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: @@ -247,39 +247,53 @@ Uncomment and edit the below line in the script to use Cmder config even when la # CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder. ``` -### Handling with custom arguments when using init.bat +### Customizing user sessions using `init.bat` custom arguments. -You can pass custom arguments to `init.bat` and use `%flag_exists%` to detect it. +You can pass custom arguments to `init.bat` and use `cexec.cmd` in your `user_profile.cmd` to evaluate these +arguments then execute commands based on a particular flag being detected or not. -It is useful when you have multiple modes to execute cmder. +`init.bat` creates two shortcuts for using `cexec.cmd` in your profile scripts. -If you use - -```batch - -init.bat /startNotepad +#### `%ccall%` - Evaluates flags, runs commands if found, and returns to the calling script and continues. ``` +ccall=call C:\Users\user\cmderdev\vendor\bin\cexec.cmd +``` -to start init.bat with custom argument(`/startNotepad`) and put +Example: `%ccall% /startnotepad start notepad.exe` -```batch - -call %flag_exists% "/startNotepad" "start" "notepad.exe"` +#### `%cexec%` - Evaluates flags, runs commands if found, and does not return to the calling script. ``` - -into `/config/user-profile.cmd`, then `notepad.exe` will be executed, and once you use - -```batch - -init.bat - +cexec=C:\Users\user\cmderdev\vendor\bin\cexec.cmd ``` -the `notepad.exe` won't be executed. +Example: `%cexec% /startnotepad start notepad.exe` -To see detailed usage of `%flag_exists%`, type `%flag_exists% /?` in cmder. +It is useful when you have multiple tasks to execute `cmder` and need it to initialize +the session differently depending on the task chosen. + +To conditionally start `notepad.exe` when you start a specific `cmder` task: + +* Press win+alt+t +* Click `+` to add a new task. +* Add the below to the `Commands` block: + + ```batch + + cmd.exe /k ""%ConEmuDir%\..\init.bat" /startnotepad" + + ``` + +* Add the below to your `%cmder_root%\config\user_profile.cmd` + + ```batch + + %ccall% "/startNotepad" "start" "notepad.exe"` + + ``` + +To see detailed usage of `cexec`, type `cexec /?` in cmder. ### Integrating Cmder with [Hyper](https://github.com/zeit/hyper), [Microsoft VS Code](https://code.visualstudio.com/), and your favorite IDEs diff --git a/vendor/lib/flag_exists.cmd b/vendor/bin/cexec.cmd similarity index 69% rename from vendor/lib/flag_exists.cmd rename to vendor/bin/cexec.cmd index c144340..3193f4f 100644 --- a/vendor/lib/flag_exists.cmd +++ b/vendor/bin/cexec.cmd @@ -19,7 +19,8 @@ set "currenArgu=%~1" if /i "%currenArgu%" equ "/setPath" ( :: set %flag_exists% shortcut endlocal - set "flag_exists=%~dp0flag_exists" + set "ccall=call %~dp0cexec.cmd" + set "cexec=%~dp0cexec.cmd" ) else if /i "%currenArgu%" == "/?" ( goto :help ) else if /i "%currenArgu%" equ "/help" ( @@ -54,15 +55,17 @@ set "feFlagName=%feFlagName% " echo %CMDER_USER_FLAGS% | find /i "%feFlagName%">nul if "%ERRORLEVEL%" == "0" ( if "%feNOT%" == "false" ( - call %feCommand% %feParam% + endlocal && call %feCommand% %feParam% + exit /b 0 ) ) else ( if "%feNOT%" == "true" ( - call %feCommand% %feParam% + endlocal && call %feCommand% %feParam% + exit /b 0 ) ) endlocal -exit /b +exit /b 1 :wrongSyntax echo The syntax of the command is incorrect. @@ -74,22 +77,22 @@ exit /b :help echo. -echo %%flag_exists%% +echo CExec - Conditional Exec echo. echo Handles with custom arguments for cmder's init.bat. echo written by xiazeyu, inspired DRSDavidSoft. echo. echo Usage: echo. -echo %%flag_exists%% [/setPath] [NOT] flagName command/program [parameters] +echo cexec /setPath [NOT] flagName command/program [parameters] echo. -echo setPath Generate a global varible %%flag_exists%% for +echo /setPath Generate a global varibles %%ccall%% and %%cexec%% for echo quicker use. Following arguments will be ignored. echo. -echo NOT Specifies that %%flag_exists%% should carry out +echo NOT Specifies that cexec should carry out echo the command only if the flag is missing. echo. -echo flagName Specifies which flag name is to detect. It's recommand +echo /[flagName] Specifies which flag name is to detect. It's recommand echo to use a pair of double quotation marks to wrap echo your flag name to avoid exceed expectation. echo. @@ -104,24 +107,25 @@ echo to wrap your flag name to avoid exceed expectation. echo. echo Examples: echo. -echo these examples are expected to be writted in /config/user-profile.cmd -echo it will use the environment varible "CMDER_USER_FLAGS" +echo These examples are expected to be written in %cmder_root%/config/user-profile.cmd +echo CExec evaluates the environment varible "CMDER_USER_FLAGS" and conditionally +echo caries out actions based on flags that are passed. echo. echo Case 1: echo. -echo The following command in user-profile.cmd would execute "notepad.exe" +echo The following command in `user_profile.cmd` would execute "notepad.exe" and continue running the `user_profile.cmd` echo. -echo call %%flag_exists%% "/startNotepad" "start" "notepad.exe" +echo "%ccall%" "/startNotepad" "start" "notepad.exe" echo. -echo if you pass parameter to init.bat like: +echo If you pass parameter to init.bat like: echo. echo init.bat /startNotepad echo. echo Case 2: echo. -echo The following command in user-profile.cmd would execute "notepad.exe" +echo The following command in `user_profile.cmd` would execute "notepad.exe" and stop running the `user_profile.cmd` echo. -echo call %%flag_exists%% NOT "/dontStartNotepad" "start" "notepad.exe" +echo "%cexec%" NOT "/dontStartNotepad" "start" "notepad.exe" echo. echo UNLESS you pass parameter to init.bat like: echo. diff --git a/vendor/init.bat b/vendor/init.bat index f2f3880..9365bd9 100644 --- a/vendor/init.bat +++ b/vendor/init.bat @@ -7,7 +7,6 @@ :: !!! 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. -endlocal set verbose_output=0 set debug_output=0 set max_depth=1 @@ -29,6 +28,7 @@ if not defined CMDER_ROOT ( :: 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" @@ -332,10 +332,6 @@ if not exist "%initialConfig%" ( echo :: use this file to run your own startup commands echo :: use in front of the command to prevent printing the command echo. -echo :: the next two lines is for "%%flag_exists%%" shortcut, a custom arguments handler -echo :: don't remove it if you need it -echo call "%%cmder_root%%/vendor/lib/flag_exists" "/setPath" -echo. echo :: uncomment this to have the ssh agent load when cmder starts echo :: call "%%GIT_INSTALL_ROOT%%/cmd/start-ssh-agent.cmd" echo. @@ -347,9 +343,9 @@ echo :: you can add your plugins to the cmder path like so echo :: set "PATH=%%CMDER_ROOT%%\vendor\whatever;%%PATH%%" echo. echo :: arguments in this batch are passed from init.bat, you can quickly parse them like so: -echo :: more useage can be seen by typing "%%flag_exists%% /?" +echo :: more useage can be seen by typing "cexec /?" echo. -echo :: %%flag_exists%% "/customOption" "command/program" +echo :: %%ccall%% "/customOption" "command/program" echo. echo @echo off ) >"%initialConfig%" diff --git a/vendor/lib/lib_profile.cmd b/vendor/lib/lib_profile.cmd index 98bc9f0..9bf08b9 100644 --- a/vendor/lib/lib_profile.cmd +++ b/vendor/lib/lib_profile.cmd @@ -44,3 +44,4 @@ exit /b ) popd exit /b +