Compare commits

...

108 Commits

Author SHA1 Message Date
2e77513674 Merge pull request #1947 from daxgames/fix_ignore_config
Fix ignore config
2018-11-10 09:46:25 -05:00
1640e9c01d fixes' 2018-11-10 09:45:23 -05:00
ddbfd1da18 Merge branch 'fix' 2018-11-10 09:38:58 -05:00
bc7c6e97b3 Fixed move of default conemu.xml to the vendor folder 2018-11-10 09:32:44 -05:00
45f05ed8fa Merge pull request #1946 from cmderdev/revert-1945-ignore_config
Revert "Ignore `%cmder_root%\config`"
2018-11-10 09:02:00 -05:00
72b676b939 Revert "Ignore %cmder_root%\config (#1945)"
This reverts commit 637b0fd3ac.
2018-11-10 06:42:27 -05:00
637b0fd3ac Ignore %cmder_root%\config (#1945)
* move default comemu.xml to vendor folder

* ignore all of config folder

* cleanup
2018-11-10 02:40:16 +01:00
ce62db6d33 cleanup 2018-11-08 21:45:21 -05:00
f3ed7b6d1b ignore all of config folder 2018-11-08 21:35:23 -05:00
57e5ae1719 move default comemu.xml to vendor folder 2018-11-08 21:25:42 -05:00
a5bdecca77 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)
2018-11-04 01:36:51 +01:00
5be25f29f8 Initialize time_init to fix init error message 2018-11-03 18:52:26 +01:00
cb78f0486a Remove duplicate Install-Module detection
Block was inserted twice.
2018-11-03 02:15:03 +01:00
f5ac81daa0 Fix typos, remove escaping inside inline code, replace single quote with backtick 2018-11-03 02:14:49 +01:00
da0aea96f8 Fix typo and broken link 2018-11-03 02:14:49 +01:00
3a11d45552 add diag helper scripts and adds to the path (#1918)
These scripts are to help us help our users by getting a relative picture of their environment that they can submit with an incident.
2018-11-02 14:00:40 +01:00
c5a6afbf5b Merge pull request #1905 from narnaud/git_shim
Ensure the right git path is found in case of shim.
2018-10-12 22:55:48 +02:00
a607f0f2d5 Ensure the right git path is found in case of shim.
If the git found is a shim, we need to follow the path to the actual git
directory to set the GIT_INSTALL_ROOT variable.
This happens when installing git via scoop for example.
2018-10-10 07:14:50 +02:00
66da1716bc Merge pull request #1758 from xiazeyu/master
lib to check init.bat's custom args
2018-09-30 18:06:42 +02:00
bfaa194468 Merge pull request #1 from daxgames/cexec
flag_exists.cmd to cexec
2018-09-30 23:17:23 +08:00
c3956e307a Merge pull request #1889 from leochien0102/leochien0102-patch-1
Leochien0102 Fix the 'was unexpected at this time.' at start
2018-09-29 23:15:26 +02:00
3344268c24 Merge pull request #1887 from gaoslin/master
Update init.bat, fix PR #1665
2018-09-29 17:06:53 -04:00
8ff459b309 fixes 2018-09-24 19:07:48 -05:00
103d0a6cea more headers 2018-09-24 18:51:55 -05:00
8dc9bc9ae1 fix the 'was unexpected at this time.'
Change the single quotation marks to double while path concerned
2018-09-21 16:01:52 +08:00
bb4ed4af51 Update init.bat 2018-09-18 17:26:11 +08:00
ae2fda72fd Merge pull request #1884 from daxgames/fix_lua
Fix lua
2018-09-18 03:03:57 +02:00
bda09bc274 init.bat update for cexec 2018-09-16 16:23:22 -05:00
749ce17dbe git prompt yellow 2018-09-16 15:53:49 -05:00
8cf59d1cbf cleanup 2018-09-16 10:21:37 -05:00
1d36ba4ed4 fix user lua and git detection 2018-09-16 10:18:10 -05:00
564ef5220e allow conditionally setting environment variables 2018-09-15 16:25:31 -05:00
f84da84e15 cleanup 2018-09-15 15:12:45 -05:00
86544c9188 readme.md 2018-09-15 15:11:50 -05:00
4aec21ce19 readme.md 2018-09-15 15:10:35 -05:00
0be94725bd readme.md 2018-09-15 15:06:13 -05:00
9dce9d0f62 added exit codes 2018-09-15 13:55:54 -05:00
669e997602 flag_exists.cmd to flag_exec.cmd, also to lib as an option 2018-09-15 12:52:23 -05:00
0730c6e32b Merge branch 'master' into master 2018-09-15 11:28:04 +08:00
0d2e16c653 Merge pull request #1871 from daxgames/user_lua
Embed 'alias' functionality into 'vendor\bin' and Load User Lua files
2018-09-13 22:41:19 +02:00
35eab7a51a Merge pull request #1834 from b0bh00d/master
Refactored the Mercurial prompt code to be more efficient.
2018-09-13 18:07:07 +02:00
2cfa7c45fc ⬆️ ConEmu to 180626
release notes: https://conemu.github.io/en/Whats_New.html
2018-09-13 18:05:36 +02:00
ab0de6d157 ⬆️ Update Git to 2.19.0
Release notes: https://github.com/git-for-windows/git/releases/tag/v2.19.0.windows.1
2018-09-13 17:58:39 +02:00
bd9cff2691 cleanup 2018-09-05 18:07:27 -05:00
7b191d3caf cleanup 2018-09-03 14:54:52 -05:00
277972a7f2 fixed 2018-09-03 12:59:43 -04:00
b1aa687d4f handle start dir args with trailing \" 2018-09-03 11:07:06 -05:00
ec4c815264 cleanup 2018-09-03 06:08:44 -05:00
12b9af99c5 '.gitignore' 2018-09-03 06:05:20 -05:00
d58c6c2070 cleanup 2018-09-02 19:17:16 -05:00
06c7cc969c Merge branch 'user_lua' into tcc 2018-09-02 19:09:49 -05:00
44b4b7a195 '.gitignore' 2018-09-02 19:09:12 -05:00
9869f9a372 cleanup 2018-09-02 18:59:14 -05:00
85c4a5b4af cleanup 2018-09-02 18:56:17 -05:00
3f96336610 verbos output 2018-09-02 18:53:49 -05:00
a8cae77395 Merge branch 'user_lua' into tcc 2018-09-02 18:53:19 -05:00
823eeaf082 cmder_shell settings 2018-09-02 18:18:59 -05:00
823e6fee6e add cmder_shell method 2018-09-02 17:32:20 -05:00
34f8c43d98 replace - with _ in debug-output and verbose-output 2018-09-02 09:16:40 -05:00
352a16f84d trying to get tcc working 2018-09-02 09:04:46 -05:00
541fc16daf Trying to get tcc working 2018-09-01 22:08:00 -05:00
75e6644d2a rename 2018-09-01 18:35:02 -04:00
7d40ea4609 modify message 2018-09-01 18:32:21 -04:00
451fb46ce1 move user-aliases.cmd to user_aliases.cmd 2018-09-01 18:17:09 -04:00
70788dc1e5 gitignore 2018-09-01 17:43:53 -04:00
c25ff75187 move bin\alias.bat to vendor\bin\alias.cmd 2018-09-01 17:39:24 -04:00
059a31618b cleanup 2018-09-01 15:32:43 -04:00
e69e7f9b82 run user lua afer cmder lua 2018-09-01 14:59:40 -04:00
e93231114f Merge remote-tracking branch 'origin' into user_lua 2018-09-01 14:35:41 -04:00
08550751da Merge pull request #1860 from gucong3000/lang
Add %LANG% support
2018-09-01 00:32:02 +02:00
49da3745bc Fix #1806 #1675 (#1870)
## Rename user-profile.* user_profile.* to resolve #1806, #1675

* This is a backward compatible fix and will automatically and silently rename users '%cmder_root%/config/user-profile.\*' to '%cmder_root%/config/user_profile.\*' and '[user_specified_config_root]/user-profile.\*' to '[user_specified_config_root]/user_profile.\*' if the sources exist.

  * Cmder.exe does this for cmd.exe sessions.
  * The init scripts for bash and Powershell handles it for these shells
2018-09-01 00:02:56 +02:00
e4fb0d694b Revert "replace user-aliases with user_aliases"
This reverts commit d91438de47.
2018-08-31 18:41:06 +02:00
798da058cc Merge pull request #1865 from m01ar/master
Dot-Sourcing Error: PowerShell 5.1 and Windows Software Restriction Policy compatibility
2018-08-30 15:24:38 +02:00
d91438de47 replace user-aliases with user_aliases 2018-08-30 15:22:33 +02:00
08e1244fe5 fix some spelling issues 2018-08-30 15:22:28 +02:00
02f4a9dfe5 Merge pull request #1866 from arionkrause/master
Fixed typo
2018-08-30 15:15:29 +02:00
e80ad2356f Fixed typo 2018-08-29 22:07:26 -03:00
21b1f00981 Powershell 5.1 compatibility
Fixes Powershell 5.1 error when Windows Software Restriction Policy is enabled:

bin\vendor\profile.ps1 : Cannot dot-source this command because it was defined in a different language mode. To invoke this command without importing its contents, omit the '.'  operator.
At line:1 char:1
+ . 'bin\vendor\conemu-maximus5\..\profi ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [profile.ps1], NotSupportedException
    + FullyQualifiedErrorId : DotSourceNotSupported,profile.ps1
2018-08-29 14:42:01 +03:00
34bb62409a Update profile.ps1
Fixes Powershell 5.1 error when Windows Software Restriction Policy is enabled:

bin\vendor\profile.ps1 : Cannot dot-source this command because it was defined in a different language mode. To invoke this command without importing its contents, omit the '.'  operator.
At line:1 char:1
+ . 'bin\vendor\conemu-maximus5\..\profi ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [profile.ps1], NotSupportedException
    + FullyQualifiedErrorId : DotSourceNotSupported,profile.ps1
2018-08-29 14:38:59 +03:00
b901a4a569 add LANG support 2018-08-23 11:57:16 +08:00
39f47870a3 chore: unite slash 2018-08-06 16:05:31 +08:00
f4ee915678 docs: update to latest useage 2018-08-06 13:21:45 +08:00
192056e19b Merge branch 'master' into master 2018-08-06 13:14:45 +08:00
f6c2d9c31e refactor: reduce global varible useage, fixed quote issue, added parameters support 2018-08-06 13:09:59 +08:00
b3200efa7e doc: fix typo 2018-08-06 11:25:27 +08:00
b57e146e7a docs: migrated instructions to the wiki pages 2018-07-17 14:11:16 +08:00
0f99f66b42 Refactored the Mercurial prompt code to be more efficient. 2018-07-06 14:34:48 -06:00
4655888690 Merge pull request #1805 from SommerEngineering/patch-1
Fixed spelling in README.md
2018-06-10 20:35:56 +02:00
431c6300e5 Fixed spelling 2018-06-10 12:40:37 +02:00
e3cdf43afc better fix for #1265 2018-06-07 18:29:48 +02:00
6c016788d4 Revert "sanitize dir before assigning to prompt"
This reverts commit 0b2d7bd655.
2018-06-07 17:04:06 +02:00
0b2d7bd655 sanitize dir before assigning to prompt
Fixes #1265
2018-06-07 16:08:53 +02:00
27f51f48a4 Profile.ps1 (#1796)
* Fix GIT_INSTALL_ROOT again

* fix profile.ps1
2018-06-03 00:15:33 +02:00
34554d6b08 Update README
Add formatting to code, path, and executable identifiers to promote readability/scanability.
2018-05-31 14:35:43 +02:00
4df1d744d3 Fix lib base (#1794)
* Fix GIT_INSTALL_ROOT again

* fixed lib_base error

* fix lib help

* fix lib help
2018-05-31 14:35:02 +02:00
40b9ca4e28 Update CHANGELOG.md 2018-05-30 01:17:12 +02:00
861f99d64b rename /bin/have.bat to /vendor/lib/flag_exists.cmd
Please use %flag_exists% instead of using have
2018-05-27 10:22:44 +08:00
6af44441fe Merge branch 'master' of github.com:xiazeyu/cmder 2018-05-18 21:03:07 +08:00
0ce1db97d0 fix: bug when no argument is passed in 2018-05-18 21:02:36 +08:00
0c39d0a799 Merge branch 'master' into master 2018-05-18 20:37:19 +08:00
add82a247b docs: update doc for have.bat 2018-05-18 20:34:10 +08:00
bf6dae4a24 feat: add have.bat as a wrapper 2018-05-18 20:32:05 +08:00
daa94c5462 Optimize comments of using arguments in user-profile.cmd 2018-05-04 20:14:40 +08:00
9a3a8f23d0 Little Changes 2018-05-01 08:57:02 -04:00
99f51b0fc0 fix conflict with init.bat build-in command parser, update user-profile.cmd 2018-05-01 13:02:21 +08:00
a06d4e93ec Pass arguments to user-profile.cmd 2018-04-30 20:31:01 +08:00
9462315789 fix /unregister 2018-03-24 08:57:14 -05:00
864f778099 load user clink 2018-03-24 08:03:28 -05:00
24 changed files with 999 additions and 337 deletions

13
.gitignore vendored
View File

@ -1,21 +1,24 @@
## Those files should be taken from their repositary
bin/*
!bin/Readme.md
vendor/*/*
!vendor/bin/*
!vendor/lib/*
!vendor/*
!vendor/psmodules/PsGet
config/.history
config/*
!config/Readme.md
Thumbs.db
*.exe
*.dll
build/
Version v*
*.bak
config/user-*
config/settings
config/aliases
config/profile.d
.github_changelog_generator
launcher/.vs
launcher/src/version.rc2

View File

@ -1,5 +1,16 @@
# Change Log
## [1.3.6](https://github.com/cmderdev/cmder/tree/v1.3.6) (2018-05-30)
**Updated components:**
* Git updated to v2.17.1.windows.2
* ConEmu updated to 180528
**Updates:**
* Cmder now opens in the in the current working dir
* TBD
## [1.3.6-pre2](https://github.com/cmderdev/cmder/tree/v1.3.6-pre2) (2018-03-01)
**Updated components:**

View File

@ -11,7 +11,7 @@ If you follow them your contribution will likely be pulled in quicker.
## Making Changes
* Make changes in your seperate branch.
* Make changes in your separate branch.
* Check for unnecessary whitespace with `git diff --check` before committing.
* Make sure your commit messages are easy to understand
* Squash your 'Correcting mistakes' commits if you have a lot of them. (See the 'Squashing Commits' link below)
@ -35,4 +35,4 @@ If you follow them your contribution will likely be pulled in quicker.
* [Squashing Commits](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html)
* [General GitHub documentation](http://help.github.com/)
* [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
* [GitHub pull request documentation](http://help.github.com/articles/creating-a-pull-request/)

189
README.md
View File

@ -18,7 +18,7 @@ The Cmder's user interface is also designed to be more eye pleasing, and you can
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
2. Extract the archive. *Note: This path should not be `C:\Program Files` or anywhere else that would require Administrator access for modifying configuration files*
3. (optional) Place your own executable files into the `%cmder_root%\bin` folder to be injected into your PATH.
4. Run Cmder.exe
4. Run `Cmder.exe`
### Shared Cmder install with Non-Portable Individual User Config
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
@ -26,7 +26,7 @@ The Cmder's user interface is also designed to be more eye pleasing, and you can
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`
6. 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.
```
@ -41,12 +41,12 @@ The Cmder's user interface is also designed to be more eye pleasing, and you can
## Cmder.exe Command Line Arguments
| Argument | Description |
| ------------------- | ----------------------------------------------------------------------- |
| /C [user_root_path] | Individual user Cmder root folder. Example: %userprofile%\cmder_config |
| /SINGLE | Start Cmder is single mode. |
| /START [start_path] | Folder path to start in. |
| /TASK [task_name] | Task to start after launch. |
| Argument | Description |
| ------------------- | ----------------------------------------------------------------------- |
| `/C [user_root_path]` | Individual user Cmder root folder. Example: `%userprofile%\cmder_config` |
| `/SINGLE` | Start Cmder in single mode. |
| `/START [start_path]` | Folder path to start in. |
| `/TASK [task_name]` | Task to start after launch. |
## Context Menu Integration
@ -90,24 +90,24 @@ You can open multiple tabs each containing one of the following shells:
| Task | Shell | Description |
| ---- | ----- | ----------- |
| Cmder | cmd.exe | Windows 'cmd.exe' shell enhanced with Git, Git aware prompt, Clink (GNU Readline), and Aliases. |
| Cmder as Admin | cmd.exe | Administrative Windows 'cmd.exe' Cmder shell. |
| PowerShell | powershell.exe | Windows PowerShell enhanced with Git and Git aware prompt . |
| PowerShell as Admin | powershell.exe | Administrative Windows 'powershell.exe' Cmder shell. |
| Bash | bash.exe | Unix/Linux like bash shell running on Windows. |
| Bash as Admin | bash.exe | Administrative Unix/Linux like bash shell running on Windows. |
| Mintty | bash.exe | Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences |
| Mintty as Admin | bash.exe | Administrative Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences |
| Cmder | `cmd.exe` | Windows `cmd.exe` shell enhanced with Git, Git aware prompt, Clink (GNU Readline), and Aliases. |
| Cmder as Admin | `cmd.exe` | Administrative Windows `cmd.exe` Cmder shell. |
| PowerShell | `powershell.exe` | Windows PowerShell enhanced with Git and Git aware prompt . |
| PowerShell as Admin | `powershell.exe` | Administrative Windows `powershell.exe` Cmder shell. |
| Bash | `bash.exe` | Unix/Linux like bash shell running on Windows. |
| Bash as Admin | `bash.exe` | Administrative Unix/Linux like bash shell running on Windows. |
| Mintty | `bash.exe` | Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences |
| Mintty as Admin | `bash.exe` | Administrative Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences |
Cmder, PowerShell, and Bash tabs all run on top of the Windows Console API and work as you might expect in Cmder with access to use ConEmu's color schemes, key bindings and other settings defined in the ConEmu Settings dialog.
⚠ *NOTE:* Only the full edition of Cmder comes with a pre-installed bash, using a vendored [git-for-windows](https://gitforwindows.org/) installation. The pre-configured Bash tabs may not work on Cmder mini eidition without additional configuration.
⚠ *NOTE:* Only the full edition of Cmder comes with a pre-installed bash, using a vendored [git-for-windows](https://gitforwindows.org/) installation. The pre-configured Bash tabs may not work on Cmder mini edition without additional configuration.
You may however, choose to use an external installation of bash, such as Microsoft's [Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) (called WSL) or the [Cygwin](https://cygwin.com/) project which provides POSIX support on windows.
⚠ *NOTE:* Mintty tabs use a program called 'mintty' as the terminal emulator that is not based on the Windows Console API, rather it's rendered graphically by ConEmu. Mintty differs from the other tabs in that it supports xterm/xterm-256color TERM types, and does not work with ConEmu settings like color schemes and key bindings. As such, some differences in functionality are to be expected, such as Cmder not being able to apply a system-wide configuration to it.
⚠ *NOTE:* Mintty tabs use a program called 'mintty' as the terminal emulator that is not based on the Windows Console API, rather it's rendered graphically by ConEmu. Mintty differs from the other tabs in that it supports xterm/xterm-256color TERM types, and does not work with ConEmu settings like color schemes and key bindings. As such, some differences in functionality are to be expected, such as Cmder not being able to apply a system-wide configuration to it.
As a result mintty specific config is done via the '[%USERPROFILE%|$HOME]/.minttyrc' file. You may read more about Mintty and its config file [here](https://github.com/mintty/mintty).
As a result mintty specific config is done via the `[%USERPROFILE%|$HOME]/.minttyrc` file. You may read more about Mintty and its config file [here](https://github.com/mintty/mintty).
An example of setting Cmder portable terminal colors for mintty:
@ -117,18 +117,18 @@ From a bash/mintty shell:
cd $CMDER_ROOT/vendor
git clone https://github.com/karlin/mintty-colors-solarized.git
cd mintty-colors-solarized/
echo source \$CMDER_ROOT/vendor/mintty-colors-solarized/mintty-solarized-dark.sh>>$CMDER_ROOT/config/user-profile.sh
echo source \$CMDER_ROOT/vendor/mintty-colors-solarized/mintty-solarized-dark.sh>>$CMDER_ROOT/config/user_profile.sh
```
You may find some Monokai color schemes for mintty to match Cmder [here](https://github.com/PhilipDaniels/mintty/blob/master/themes/Monokai) or [here](https://github.com/oumu/mintty-color-schemes/blob/master/base16-monokai-mod.minttyrc).
### Changing Cmder Default 'cmd.exe' Shell Startup Behaviour Using Task Arguments
### Changing Cmder Default `cmd.exe` Shell Startup Behaviour Using Task Arguments
1. Press <kbd>Win</kbd> + <kbd>Alt</kbd> + <kbd>T</kbd>
1. Click either:
* `1. {cmd::Cmder as Admin}`
* `2. {cmd::Cmder}`
1. Add command line argumentswhere specified below:
1. Add command line arguments where specified below:
*Note: Pay attention to the quotes!*
@ -138,80 +138,82 @@ 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-liases.cmd' |
| /v | Enables verbose output. | 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:
| Shell | Cmder Portable User Config |
| ------------- | ----------------------------------------- |
| Cmder | %CMDER_ROOT%\\config\\user-profile.cmd |
| PowerShell | $ENV:CMDER_ROOT\\config\\user-profile.ps1 |
| Bash/Mintty | $CMDER_ROOT/config/user-profile.sh |
| Cmder | `%CMDER_ROOT%\config\user_profile.cmd` |
| PowerShell | `$ENV:CMDER_ROOT\config\user_profile.ps1` |
| Bash/Mintty | `$CMDER_ROOT/config/user_profile.sh` |
Note: Bash and Mintty sessions will also source the '$HOME/.bashrc' file if it exists after it sources '$CMDER_ROOT/config/user-profile.sh'.
Note: Bash and Mintty sessions will also source the `$HOME/.bashrc` file if it exists after it sources `$CMDER_ROOT/config/user_profile.sh`.
You can write *.cmd|*.bat, *.ps1, and *.sh scripts and just drop them in the %CMDER_ROOT%\config\profile.d folder to add startup config to Cmder.
You can write `*.cmd|*.bat`, `*.ps1`, and `*.sh` scripts and just drop them in the `%CMDER_ROOT%\config\profile.d` folder to add startup config to Cmder.
| Shell | Cmder 'Profile.d' Scripts |
| Shell | Cmder `Profile.d` Scripts |
| ------------- | --------------------------------------------------|
| Cmder | %CMDER_ROOT%\\config\\profile.d\\\*.bat and *.cmd |
| PowerShell | $ENV:CMDER_ROOT\\config\\profile.d\\\*.ps1 |
| Bash/Mintty | $CMDER_ROOT/config/profile.d/*.sh |
| Cmder | `%CMDER_ROOT%\config\profile.d\*.bat and *.cmd` |
| PowerShell | `$ENV:CMDER_ROOT\config\profile.d\*.ps1` |
| Bash/Mintty | `$CMDER_ROOT/config/profile.d/*.sh` |
### Aliases
#### Cmder(Cmd.exe) Aliases
#### Cmder(`Cmd.exe`) Aliases
You can define simple aliases for `cmd.exe` sessions with a command like `alias name=command`. Cmd.exe aliases support optional parameters through the `$1-9` or the `$*` special characters so the alias `vi=vim.exe $*` typed as `vi [filename]` will open `[filename]` in `vim.exe`.
Cmd.exe aliases can also be more complex. See: [DOSKEY.EXE documentation](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/doskey.mspx?mfr=true) for additional details on complex aliases/macros for 'cmd.exe'
Cmd.exe aliases can also be more complex. See: [DOSKEY.EXE documentation](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/doskey.mspx?mfr=true) for additional details on complex aliases/macros for `cmd.exe`
Aliases defined using the `alias.bat` command will automatically be saved in the `%CMDER_ROOT%\config\user-aliases.cmd` file
To make an alias and/or any other profile settings permanent add it to one of the following:
Note: These are loaded in this order by '$CMDER_ROOT/vendor/init.bat'. Anyhing stored in '%CMDER_ROOT%' will be a portable setting and will follow cmder to another machine.
Note: These are loaded in this order by `$CMDER_ROOT/vendor/init.bat`. Anything stored in `%CMDER_ROOT%` will be a portable setting and will follow cmder to another machine.
* '%CMDER_ROOT%\\config\\profile.d\\\*.cmd and \*.bat'
* '%CMDER_ROOT%\\config\\user-aliases.cmd'
* '%CMDER_ROOT%\\config\\user-profile.cmd'
* `%CMDER_ROOT%\config\profile.d\*.cmd` and `\*.bat`
* `%CMDER_ROOT%\config\user-aliases.cmd`
* `%CMDER_ROOT%\config\user_profile.cmd`
#### Bash.exe|Mintty.exe Aliases
Bash shells support simple and complex aliases with optional parameters natively so they work a little different. Typing `alias name=command` will create an alias only for the current running session.
To make an alias and/or any other profile settings permanent add it to one of the following:
Note: These are loaded in this order by '$CMDER_ROOT/vendor/git-for-windows/etc/profile.d/cmder.sh'. Anyhing stored in '$CMDER_ROOT' will be a portable setting and will follow cmder to another machine.
Note: These are loaded in this order by `$CMDER_ROOT/vendor/git-for-windows/etc/profile.d/cmder.sh`. Anything stored in `$CMDER_ROOT` will be a portable setting and will follow cmder to another machine.
* '$CMDER_ROOT/config/profile.d/*.sh'
* '$CMDER_ROOT/config/user-profile.sh'
* '$HOME/.bashrc'
* `$CMDER_ROOT/config/profile.d/*.sh`
* `$CMDER_ROOT/config/user_profile.sh`
* `$HOME/.bashrc`
If you add bash aliases to `$CMDER_ROOT/config/user-profile.sh` they will be portable and follow your Cmder folder if you copy it to another machine. `$HOME/.bashrc` defined aliases are not portable.
If you add bash aliases to `$CMDER_ROOT/config/user_profile.sh` they will be portable and follow your Cmder folder if you copy it to another machine. `$HOME/.bashrc` defined aliases are not portable.
#### PowerShell.exe Aliases
PowerShell has native simple alias support, for example `[new-alias | set-alias] alias command`, so complex aliases with optional parameters are not supported in PowerShell sessions. Type `get-help [new-alias|set-alias] -full` for help on PowerShell aliases.
To make an alias and/or any other profile settings permanent add it to one of the following:
Note: These are loaded in this order by '$ENV:CMDER_ROOT\\vendor\\user-profile.ps1'. Anyhing stored in '$ENV:CMDER_ROOT' will be a portable setting and will follow cmder to another machine.
Note: These are loaded in this order by `$ENV:CMDER_ROOT\vendor\user_profile.ps1`. Anything stored in `$ENV:CMDER_ROOT` will be a portable setting and will follow cmder to another machine.
* '$ENV:CMDER_ROOT\\config\\profile.d\\\*.ps1'
* '$ENV:CMDER_ROOT\\config\\user-profile.ps1'
* `$ENV:CMDER_ROOT\config\profile.d\*.ps1`
* `$ENV:CMDER_ROOT\config\user_profile.ps1`
### SSH Agent
To start the vendored SSH agent simply call `start-ssh-agent`, which is in the `vendor/git-for-windows/cmd` folder.
If you want to run SSH agent on startup, include the line `@call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd"` in `%CMDER_ROOT%/config/user-profile.cmd` (usually just uncomment it).
If you want to run SSH agent on startup, include the line `@call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd"` in `%CMDER_ROOT%/config/user_profile.cmd` (usually just uncomment it).
### Vendored Git
@ -223,22 +225,22 @@ You may use your favorite version of Git by including its path in the `%PATH%` e
You may run bash (the default shell used on Linux, macOS and GNU/Hurd) externally on Cmder, using the following instructions:
1. Setup a new task by pressing '<kbd>Win</kbd> +<kbd>Alt</kbd> + <kbd>T</kbd>'.
1. Click the '+' button to add a task.
1. Setup a new task by pressing <kbd>Win</kbd> +<kbd>Alt</kbd> + <kbd>T</kbd>.
1. Click the `+` button to add a task.
1. Name the new task in the top text box.
1. Provide task parameters, this is optional.
1. Add ```cmd /c "[path_to_external_env]\bin\bash --login -i" -new_console``` to the `Commands` text box.
1. Add `cmd /c "[path_to_external_env]\bin\bash --login -i" -new_console` to the `Commands` text box.
**Recommended Optional Steps:**
Copy the 'vendor/cmder_exinit' file to the Cygwin/Babun, MSys2, or Git for Windows SDK environments ```/etc/profile.d/``` folder to use portable settings in the $CMDER_ROOT/config folder.
Copy the `vendor/cmder_exinit` file to the Cygwin/Babun, MSys2, or Git for Windows SDK environments `/etc/profile.d/` folder to use portable settings in the `$CMDER_ROOT/config` folder.
Note: MinGW could work if the init scripts include profile.d but this has not been tested.
Note: MinGW could work if the init scripts include `profile.d` but this has not been tested.
The destination file extension depends on the shell you use in that environment. For example:
* bash - Copy to /etc/profile.d/cmder_exinit.sh
* zsh - Copy to /etc/profile.d/cmder_exinit.zsh
* bash - Copy to `/etc/profile.d/cmder_exinit.sh`
* zsh - Copy to `/etc/profile.d/cmder_exinit.zsh`
Uncomment and edit the below line in the script to use Cmder config even when launched from outside Cmder.
@ -246,7 +248,56 @@ 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.
```
### Integrating Cmder with [Hyper](https://github.com/zeit/hyper), [Microsoft VS Code](https://code.visualstudio.com/), and your favorite IDEs
### Customizing user sessions using `init.bat` custom arguments.
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.
`init.bat` creates two shortcuts for using `cexec.cmd` in your profile scripts.
#### `%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
```
Example: `%ccall% /startnotepad start notepad.exe`
#### `%cexec%` - Evaluates flags, runs commands if found, and does not return to the calling script.
```
cexec=C:\Users\user\cmderdev\vendor\bin\cexec.cmd
```
Example: `%cexec% /startnotepad start notepad.exe`
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 <kbd>win</kbd>+<kbd>alt</kbd>+<kbd>t</kbd>
* 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
Cmder by default comes with a vendored ConEmu installation as the underlying terminal emulator, as stated [here](https://conemu.github.io/en/cmder.html).
However, Cmder can in fact run in a variety of other terminal emulators, and even integrated IDEs. Assuming you have the latest version of Cmder, follow the following instructions to get Cmder working with your own terminal emulator.
@ -257,26 +308,26 @@ For instructions on how to integrate Cmder with your IDE, please read our [Wiki
The process of upgrading Cmder depends on the version/build you are currently running.
If you have a `[cmder_root]/config/user-conemu.xml`, you are running a newer version of Cmder, follow the below process:
If you have a `[cmder_root]/config/user-conemu.xml`, you are running a newer version of Cmder, follow the below process:
1. Exit all Cmder sessions and relaunch `[cmder_root]/cmder.exe`, this backs up your existing `[cmder_root]/vendor/conemu-maximus5/conemu.xml` to `[cmder_root]/config/user-conemu.xml`.
* The `[cmder_root]/config/user-conemu.xml` contains any custom settings you have made using the 'Setup Tasks' settings dialog.
2. Exit all Cmder sessions and backup any files you have manually edited under `[cmder_root]/vendor`.
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in '[cmder_root]/config' folder.
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in `[cmder_root]/config` folder.
3. Delete the `[cmder_root]/vendor` folder.
4. Extract the new `cmder.zip` or `cmder_mini.zip` into `[cmder_root]/` overwriting all files when prompted.
If you do not have a `[cmder_root]/config/user-conemu.xml`, you are running an older version of cmder, follow the below process:
If you do not have a `[cmder_root]/config/user-conemu.xml`, you are running an older version of cmder, follow the below process:
1. Exit all Cmder sessions and backup `[cmder_root]/vendor/conemu-maximus5/conemu.xml` to `[cmder_root]/config/user-conemu.xml`.
2. Backup any files you have manually edited under `[cmder_root]/vendor`.
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in '[cmder_root]/config' folder.
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in `[cmder_root]/config` folder.
3. Delete the `[cmder_root]/vendor` folder.
4. Extract the new `cmder.zip` or `cmder_mini.zip` into `[cmder_root]/` overwriting all files when prompted.

View File

@ -9,6 +9,7 @@
#include <iostream>
#pragma comment(lib, "Shlwapi.lib")
#pragma warning( disable : 4091 )
#ifndef UNICODE
#error "Must be compiled with unicode support."
@ -85,6 +86,10 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
wchar_t userConfigDirPath[MAX_PATH] = { 0 };
wchar_t userBinDirPath[MAX_PATH] = { 0 };
wchar_t userProfiledDirPath[MAX_PATH] = { 0 };
wchar_t userProfilePath[MAX_PATH] = { 0 };
wchar_t legacyUserProfilePath[MAX_PATH] = { 0 };
wchar_t userAliasesPath[MAX_PATH] = { 0 };
wchar_t legacyUserAliasesPath[MAX_PATH] = { 0 };
wchar_t args[MAX_PATH * 2 + 256] = { 0 };
std::wstring cmderStart = path;
@ -104,12 +109,54 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
PathCombine(icoPath, exeDir, L"icons\\cmder.ico");
PathCombine(configDirPath, exeDir, L"config");
/*
Convert legacy user-profile.cmd to new name user_profile.cmd
*/
PathCombine(legacyUserProfilePath, configDirPath, L"user-profile.cmd");
if (PathFileExists(legacyUserProfilePath))
{
PathCombine(userProfilePath, configDirPath, L"user_profile.cmd");
char *lPr = (char *)malloc(MAX_PATH);
char *pR = (char *)malloc(MAX_PATH);
size_t i;
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
legacyUserProfilePath, (size_t)MAX_PATH);
wcstombs_s(&i, pR, (size_t)MAX_PATH,
userProfilePath, (size_t)MAX_PATH);
rename(lPr, pR);
}
/*
Convert legacy user-aliases.cmd to new name user_aliases.cmd
*/
PathCombine(legacyUserAliasesPath, configDirPath, L"user-aliases.cmd");
if (PathFileExists(legacyUserAliasesPath))
{
PathCombine(userAliasesPath, configDirPath, L"user_aliases.cmd");
char *lPr = (char *)malloc(MAX_PATH);
char *pR = (char *)malloc(MAX_PATH);
size_t i;
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
legacyUserAliasesPath, (size_t)MAX_PATH);
wcstombs_s(&i, pR, (size_t)MAX_PATH,
userAliasesPath, (size_t)MAX_PATH);
rename(lPr, pR);
}
/*
Was -c [path] specified?
*/
if (wcscmp(userConfigDirPath, L"") == 0)
{
// No - It wasn't.
PathCombine(userConfigDirPath, exeDir, L"config");
}
else
{
// Yes - It was.
PathCombine(userBinDirPath, userConfigDirPath, L"bin");
SHCreateDirectoryEx(0, userBinDirPath, 0);
@ -118,111 +165,161 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
PathCombine(userProfiledDirPath, userConfigDirPath, L"profile.d");
SHCreateDirectoryEx(0, userProfiledDirPath, 0);
/*
Convert legacy user-profile.cmd to new name user_profile.cmd
*/
PathCombine(legacyUserProfilePath, userConfigDirPath, L"user-profile.cmd");
if (PathFileExists(legacyUserProfilePath))
{
PathCombine(userProfilePath, userConfigDirPath, L"user_profile.cmd");
char *lPr = (char *)malloc(MAX_PATH);
char *pR = (char *)malloc(MAX_PATH);
size_t i;
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
legacyUserProfilePath, (size_t)MAX_PATH);
wcstombs_s(&i, pR, (size_t)MAX_PATH,
userProfilePath, (size_t)MAX_PATH);
rename(lPr, pR);
}
/*
Convert legacy user-aliases.cmd to new name user_aliases.cmd
*/
PathCombine(legacyUserAliasesPath, userConfigDirPath, L"user-aliases.cmd");
if (PathFileExists(legacyUserAliasesPath))
{
PathCombine(userAliasesPath, userConfigDirPath, L"user_aliases.cmd");
char *lPr = (char *)malloc(MAX_PATH);
char *pR = (char *)malloc(MAX_PATH);
size_t i;
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
legacyUserAliasesPath, (size_t)MAX_PATH);
wcstombs_s(&i, pR, (size_t)MAX_PATH,
userAliasesPath, (size_t)MAX_PATH);
rename(lPr, pR);
}
}
// Set path to vendored ConEmu config file
PathCombine(cfgPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.xml");
// Set path to Cmder default ConEmu config file
PathCombine(defaultCfgPath, exeDir, L"config\\ConEmu.xml");
PathCombine(defaultCfgPath, exeDir, L"vendor\\ConEmu.xml.default");
// Check for machine-specific then user config source file.
PathCombine(cpuCfgPath, userConfigDirPath, L"ConEmu-%COMPUTERNAME%.xml");
ExpandEnvironmentStrings(cpuCfgPath, cpuCfgPath, sizeof(cpuCfgPath) / sizeof(cpuCfgPath[0]));
// Set path to Cmder user ConEmu config file
PathCombine(userCfgPath, userConfigDirPath, L"user-ConEmu.xml");
if (PathFileExists(cpuCfgPath)) {
if (PathFileExists(cfgPath)) {
if (PathFileExists(cpuCfgPath)) // config/ConEmu-%COMPUTERNAME%.xml file exists, use it.
{
if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml file exists, copy vendor/conemu-maximus5/ConEmu.xml to config/ConEmu-%COMPUTERNAME%.xml.
{
if (!CopyFile(cfgPath, cpuCfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy ConEmu.xml file to ConEmu-%COMPUTERNAME%.xml backup location! Restart Cmder as Administrator."
: L"Failed to copy ConEmu.xml file to ConEmu-%COMPUTERNAME%.xml backup location!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml! Access Denied."
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
else
else // vendor/conemu-maximus5/ConEmu.xml config file does not exist, copy config/ConEmu-%COMPUTERNAME%.xml to vendor/conemu-maximus5/ConEmu.xml file
{
if (!CopyFile(cpuCfgPath, cfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy ConEmu-%COMPUTERNAME%.xml file to vendored ConEmu.xml location! Restart Cmder as Administrator."
: L"Failed to copy ConEmu-%COMPUTERNAME%.xml file to vendored ConEmu.xml location!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy conig/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
: L"Failed to copy config/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
}
else if (PathFileExists(userCfgPath)) {
if (PathFileExists(cfgPath)) {
else if (PathFileExists(userCfgPath)) // config/user_conemu.xml exists, use it.
{
if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml.
{
if (!CopyFile(cfgPath, userCfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy ConEmu.xml file to backup location! Restart Cmder as Administrator."
: L"Failed to copy ConEmu.xml file to backup location!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied."
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
else
else // vendor/conemu-maximus5/ConEmu.xml does not exist, copy config/user-conemu.xml to vendor/conemu-maximus5/ConEmu.xml
{
if (!CopyFile(userCfgPath, cfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy ConEmu.xml file to vendored ConEmu.xml location! Restart Cmder as Administrator."
: L"Failed to copy ConEmu.xml file to vendored ConEmu.xml location!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
: L"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
}
else if (PathFileExists(cfgPath)) {
else if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml
{
if (!CopyFile(cfgPath, userCfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy ConEmu.xml file to user-conemu.xml backup location! Restart Cmder as Administrator."
: L"Failed to copy ConEmu.xml file to user-conemu.xml backup location!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied."
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
else {
if (!CopyFile(defaultCfgPath, cfgPath, FALSE))
else // vendor/ConEmu.xml config exists, copy Cmder vendor/ConEmu.xml file to vendor/conemu-maximus5/ConEmu.xml.
{
if ( ! CopyFile(defaultCfgPath, cfgPath, FALSE))
{
ShowErrorAndExit(GetLastError(), __WFUNCTION__, __LINE__);
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy Cmder default ConEmu.xml file to vendored ConEmu.xml location! Restart Cmder as Administrator."
: L"Failed to copy Cmder default ConEmu.xml file to vendored ConEmu.xml location!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
: L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
SYSTEM_INFO sysInfo;
GetNativeSystemInfo(&sysInfo);
if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
{
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu64.exe");
}
else {
else
{
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.exe");
}
if (is_single_mode)
{
if (!streqi(cmderTask.c_str(), L"")) {
if (!streqi(cmderTask.c_str(), L""))
{
swprintf_s(args, L"%s /single /Icon \"%s\" /Title Cmder /dir \"%s\" /run {%s}", args, icoPath, cmderStart.c_str(), cmderTask.c_str());
}
else {
else
{
swprintf_s(args, L"%s /single /Icon \"%s\" /Title Cmder /dir \"%s\"", args, icoPath, cmderStart.c_str());
}
}
else
{
if (!streqi(cmderTask.c_str(), L"")) {
if (!streqi(cmderTask.c_str(), L""))
{
swprintf_s(args, L"/Icon \"%s\" /Title Cmder /dir \"%s\" /run {%s}", icoPath, cmderStart.c_str(), cmderTask.c_str());
}
else {
else
{
swprintf_s(args, L"%s /Icon \"%s\" /Title Cmder /dir \"%s\"", args, icoPath, cmderStart.c_str());
}
}
@ -361,8 +458,8 @@ cmderOptions GetOption()
for (int i = 1; i < argCount; i++)
{
// MessageBox(NULL, szArgList[i], L"Arglist contents", MB_OK);
// MessageBox(NULL, szArgList[i], L"Arglist contents", MB_OK);
if (_wcsicmp(L"/c", szArgList[i]) == 0)
{
TCHAR userProfile[MAX_PATH];
@ -373,20 +470,28 @@ cmderOptions GetOption()
cmderOptions.cmderCfgRoot = cmderCfgRoot;
if (szArgList[i + 1] != NULL && szArgList[i + 1][0] != '/') {
if (szArgList[i + 1] != NULL && szArgList[i + 1][0] != '/')
{
cmderOptions.cmderCfgRoot = szArgList[i + 1];
i++;
}
}
else if (_wcsicmp(L"/start", szArgList[i]) == 0)
{
int len = wcslen(szArgList[i + 1]);
if (wcscmp(&szArgList[i + 1][len - 1], L"\"") == 0)
{
szArgList[i + 1][len - 1] = '\0';
}
if (PathFileExists(szArgList[i + 1]))
{
cmderOptions.cmderStart = szArgList[i + 1];
i++;
}
else {
MessageBox(NULL, szArgList[i + 1], L"/START - Folder doses not exist!", MB_OK);
else
{
MessageBox(NULL, szArgList[i + 1], L"/START - Folder does not exist!", MB_OK);
}
}
else if (_wcsicmp(L"/task", szArgList[i]) == 0)
@ -415,7 +520,7 @@ cmderOptions GetOption()
{
cmderOptions.unRegisterApp = true;
cmderOptions.registerApp = false;
if (szArgList[i + 1] != NULL)
if (szArgList[i + 1] != NULL)
{
if (_wcsicmp(L"all", szArgList[i + 1]) == 0 || _wcsicmp(L"user", szArgList[i + 1]) == 0)
{
@ -424,11 +529,26 @@ cmderOptions GetOption()
}
}
}
else if (cmderOptions.cmderStart == L"" && PathFileExists(szArgList[i]))
else if (cmderOptions.cmderStart == L"")
{
cmderOptions.cmderStart = szArgList[i];
int len = wcslen(szArgList[i]);
if (wcscmp(&szArgList[i][len - 1], L"\"") == 0)
{
szArgList[i][len - 1] = '\0';
}
if (PathFileExists(szArgList[i]))
{
cmderOptions.cmderStart = szArgList[i];
i++;
}
else
{
MessageBox(NULL, szArgList[i], L"Folder does not exist!", MB_OK);
}
}
else {
else
{
MessageBox(NULL, L"Unrecognized parameter.\n\nValid options:\n\n /c [CMDER User Root Path]\n\n /task [ConEmu Task Name]\n\n [/start [Start in Path] | [Start in Path]]\n\n /single\n\nor\n\n /register [USER | ALL]\n\nor\n\n /unregister [USER | ALL]\n", MB_TITLE, MB_OK);
cmderOptions.error = true;
}
@ -450,7 +570,8 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
cmderOptions cmderOptions = GetOption();
if (cmderOptions.registerApp == true) {
if (cmderOptions.registerApp == true)
{
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM);
}

View File

@ -508,7 +508,7 @@
<value name="Name" type="string" data="{PowerShell::PowerShell as Admin}"/>
<value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data=" /icon &quot;%CMDER_ROOT%\icons\cmder.ico&quot;"/>
<value name="Cmd1" type="string" data="*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command &quot;Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''&quot;"/>
<value name="Cmd1" type="string" data="*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command &quot;Invoke-Expression 'Import-Module ''%ConEmuDir%\..\profile.ps1'''&quot;"/>
<value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/>
<value name="Flags" type="dword" data="00000000"/>
@ -517,7 +517,7 @@
<value name="Name" type="string" data="{PowerShell::PowerShell}"/>
<value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data=" /icon &quot;%CMDER_ROOT%\icons\cmder.ico&quot;"/>
<value name="Cmd1" type="string" data="PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command &quot;Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''&quot;"/>
<value name="Cmd1" type="string" data="PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command &quot;Invoke-Expression 'Import-Module ''%ConEmuDir%\..\profile.ps1'''&quot;"/>
<value name="Cmd2" type="string" data="&quot;%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe&quot;"/>
<value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/>

View File

@ -2,7 +2,7 @@
if "%ALIASES%" == "" (
set ALIASES="%CMDER_ROOT%\config\user-aliases.cmd"
set ALIASES="%CMDER_ROOT%\config\user_aliases.cmd"
)
setlocal enabledelayedexpansion
@ -50,7 +50,7 @@ goto parseargument
)
rem #endregion parseargument
if "%ALIASES%" neq "%CMDER_ROOT%\config\user-aliases.cmd" (
if "%ALIASES%" neq "%CMDER_ROOT%\config\user_aliases.cmd" (
set _x=!_x:/f "%ALIASES%" =!
if not exist "%ALIASES%" (
@ -117,9 +117,9 @@ echo.Options:
echo.
echo. /d [alias] Delete an [alias].
echo. /f [macrofile] Path to the [macrofile] you want to store the new alias in.
echo. Default: %cmder_root%\config\user-aliases.cmd
echo. Default: %cmder_root%\config\user_aliases.cmd
echo. /reload Reload the aliases file. Can be used with /f argument.
echo. Default: %cmder_root%\config\user-aliases.cmd
echo. Default: %cmder_root%\config\user_aliases.cmd
echo.
echo. If alias is called with no parameters, it will display the list of existing aliases.
echo.

135
vendor/bin/cexec.cmd vendored Normal file
View File

@ -0,0 +1,135 @@
@echo off
setlocal
if "%~1" equ "" goto :wrongSyntax
if not defined CMDER_USER_FLAGS (
:: in case nothing was passed to %CMDER_USER_FLAGS%
set "CMDER_USER_FLAGS= "
)
set "feNot=false"
goto :parseArgument
:doShift
shift
:parseArgument
set "currenArgu=%~1"
if /i "%currenArgu%" equ "/setPath" (
:: set %flag_exists% shortcut
endlocal
set "ccall=call %~dp0cexec.cmd"
set "cexec=%~dp0cexec.cmd"
) else if /i "%currenArgu%" == "/?" (
goto :help
) else if /i "%currenArgu%" equ "/help" (
goto :help
) else if /i "%currenArgu%" equ "/h" (
goto :help
) else if /i "%currenArgu%" equ "NOT" (
set "feNot=true"
goto :doShift
) else (
if "%~1" equ "" goto :wrongSyntax
if "%~2" equ "" goto :wrongSyntax
set "feFlagName=%~1"
set "feCommand=%~2"
if not "%~3" equ "" (
set "feParam=%~3"
)
goto :detect
)
:detect
:: to avoid erroneous deteciton like "/do" "/doNOT", which both have a "/do"
:: we added a space after the flag name, like "/do ", which won't match "/doN"
set "feFlagName=%feFlagName% "
:: echo.
:: echo %CMDER_USER_FLAGS%
:: echo %feNOT%
:: echo %feFlagName%
:: echo %feCommand%
:: echo %feParam%
:: echo.
echo %CMDER_USER_FLAGS% | find /i "%feFlagName%">nul
if "%ERRORLEVEL%" == "0" (
if "%feNOT%" == "false" (
endlocal && call %feCommand% %feParam%
exit /b 0
)
) else (
if "%feNOT%" == "true" (
endlocal && call %feCommand% %feParam%
exit /b 0
)
)
endlocal
exit /b 1
:wrongSyntax
echo The syntax of the command is incorrect.
echo.
echo use /? for help
echo.
endlocal
exit /b
:help
echo.
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 cexec /setPath [NOT] flagName command/program [parameters]
echo.
echo /setPath Generate a global varibles %%ccall%% and %%cexec%% for
echo quicker use. Following arguments will be ignored.
echo.
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 to use a pair of double quotation marks to wrap
echo your flag name to avoid exceed expectation.
echo.
echo command/program Specifies the command to carry out if the
echo argument name is detected. It's recommand to
echo use a pair of double quotation marks to
echo wrap your command to avoid exceed expectation.
echo.
echo parameters These are the parameters passed to the command/program.
echo It's recommand to use a pair of double quotation marks
echo to wrap your flag name to avoid exceed expectation.
echo.
echo Examples:
echo.
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" and continue running the `user_profile.cmd`
echo.
echo "%ccall%" "/startNotepad" "start" "notepad.exe"
echo.
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" and stop running the `user_profile.cmd`
echo.
echo "%cexec%" NOT "/dontStartNotepad" "start" "notepad.exe"
echo.
echo UNLESS you pass parameter to init.bat like:
echo.
echo init.bat /dontStartNotepad
echo.
endlocal
exit /b

41
vendor/bin/cmder_diag.cmd vendored Normal file
View File

@ -0,0 +1,41 @@
@echo off
echo ------------------------------------
echo dir "%cmder_root%"
echo ------------------------------------
dir "%cmder_root%"
echo.
echo ------------------------------------
echo dir "%cmder_root%\vendor"
echo ------------------------------------
dir "%cmder_root%\vendor"
echo.
echo ------------------------------------
echo dir /s "%cmder_root%\bin"
echo ------------------------------------
dir /s "%cmder_root%\bin"
echo.
echo ------------------------------------
echo dir /s "%cmder_root%\config"
echo ------------------------------------
dir /s "%cmder_root%\config"
echo.
echo ------------------------------------
echo set
echo ------------------------------------
set
echo.
echo ------------------------------------
echo where git
echo ------------------------------------
where git
echo.
echo ------------------------------------
echo Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!
echo ------------------------------------

39
vendor/bin/cmder_diag.ps1 vendored Normal file
View File

@ -0,0 +1,39 @@
write-host ------------------------------------
write-host get-childitem "$env:CMDER_ROOT"
write-host ------------------------------------
get-childitem "$env:CMDER_ROOT"
write-host ''
write-host ------------------------------------
write-host get-childitem "$env:CMDER_ROOT/vendor"
write-host ------------------------------------
get-childitem "$env:CMDER_ROOT/vendor"
write-host ''
write-host ------------------------------------
write-host get-childitem -s "$env:CMDER_ROOT/bin"
write-host ------------------------------------
get-childitem -s "$env:CMDER_ROOT/bin"
write-host ''
write-host ------------------------------------
write-host get-childitem -s "$env:CMDER_ROOT/config"
write-host ------------------------------------
get-childitem -s "$env:CMDER_ROOT/config"
write-host ''
write-host ------------------------------------
write-host get-childitem env:
write-host ------------------------------------
get-childitem env: |ft -autosize -wrap
write-host ''
write-host ------------------------------------
write-host get-command git
write-host ------------------------------------
get-command git
write-host ''
write-host ------------------------------------
write-host Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!
write-host ------------------------------------

39
vendor/bin/cmder_diag.sh vendored Normal file
View File

@ -0,0 +1,39 @@
echo ------------------------------------
echo ls -la "$CMDER_ROOT"
echo ------------------------------------
ls -la "$CMDER_ROOT"
echo ''
echo ------------------------------------
echo ls -la "$CMDER_ROOT/vendor"
echo ------------------------------------
ls -la "$CMDER_ROOT/vendor"
echo ''
echo ------------------------------------
echo ls -la /s "$CMDER_ROOT/bin"
echo ------------------------------------
ls -laR /s "$CMDER_ROOT/bin"
echo ''
echo ------------------------------------
echo ls -la /s "$CMDER_ROOT/config"
echo ------------------------------------
ls -laR /s "$CMDER_ROOT/config"
echo ''
echo ------------------------------------
echo env
echo ------------------------------------
env
echo ''
echo ------------------------------------
echo which git
echo ------------------------------------
which git
echo ''
echo ------------------------------------
echo Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!
echo ------------------------------------

22
vendor/bin/timer.cmd vendored Normal file
View File

@ -0,0 +1,22 @@
@echo off
set start=%~1
set end=%~2
set options="tokens=1-4 delims=:.,"
for /f %options% %%a in ("%start%") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100
for /f %options% %%a in ("%end%") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100
set /a hours=%end_h%-%start_h%
set /a mins=%end_m%-%start_m%
set /a secs=%end_s%-%start_s%
set /a ms=%end_ms%-%start_ms%
if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms%
if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs%
if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins%
if %hours% lss 0 set /a hours = 24%hours%
if 1%ms% lss 100 set ms=0%ms%
:: Mission accomplished
set /a totalsecs = %hours%*3600 + %mins%*60 + %secs%
echo Elapsed Time: %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)

98
vendor/clink.lua vendored
View File

@ -41,13 +41,19 @@ local function set_prompt_filter()
-- color codes: "\x1b[1;37;40m"
local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;39;40m{lamb} \x1b[0m"
local lambda = "λ"
cwd = string.gsub(cwd, "%%", "{percent}")
cmder_prompt = string.gsub(cmder_prompt, "{cwd}", cwd)
if env ~= nil then
lambda = "("..env..") "..lambda
end
clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", lambda)
end
local function percent_prompt_filter()
clink.prompt.value = string.gsub(clink.prompt.value, "{percent}", "%%")
end
---
-- Resolves closest directory location for specified directory.
-- Navigates subsequently up one level and tries to find specified directory
@ -216,6 +222,21 @@ local function get_git_status()
return true
end
---
-- Gets the conflict status
-- @return {bool} indicating true for conflict, false for no conflicts
---
function get_git_conflict()
local file = io.popen("git diff --name-only --diff-filter=U 2>nul")
for line in file:lines() do
file:close()
return true;
end
file:close()
return false
end
---
-- Get the status of working dir
-- @return {bool}
@ -235,7 +256,7 @@ end
-- Get the status of working dir
-- @return {bool}
---
function get_svn_status()
local function get_svn_status()
local file = io.popen("svn status -q")
for line in file:lines() do
file:close()
@ -251,7 +272,8 @@ local function git_prompt_filter()
-- Colors for git status
local colors = {
clean = "\x1b[1;37;40m",
dirty = "\x1b[31;1m",
dirty = "\x1b[33;3m",
conflict = "\x1b[31;1m"
}
local git_dir = get_git_dir()
@ -261,12 +283,18 @@ local function git_prompt_filter()
local color
if branch then
-- Has branch => therefore it is a git folder, now figure out status
if get_git_status() then
local gitStatus = get_git_status()
local gitConflict = get_git_conflict()
color = colors.dirty
if gitStatus then
color = colors.clean
else
color = colors.dirty
end
if gitConflict then
color = colors.conflict
end
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", color.."("..branch..")")
return false
end
@ -279,31 +307,40 @@ end
local function hg_prompt_filter()
-- Colors for mercurial status
local colors = {
clean = "\x1b[1;37;40m",
dirty = "\x1b[31;1m",
}
local result = ""
if get_hg_dir() then
-- if we're inside of mercurial repo then try to detect current branch
local branch = get_hg_branch()
local color
if branch then
-- Has branch => therefore it is a mercurial folder, now figure out status
if get_hg_status() then
color = colors.clean
else
color = colors.dirty
local hg_dir = get_hg_dir()
if hg_dir then
-- Colors for mercurial status
local colors = {
clean = "\x1b[1;37;40m",
dirty = "\x1b[31;1m",
}
-- 'hg id' gives us BOTH the branch name AND an indicator that there
-- are uncommitted changes, in one fast(er) call
local pipe = io.popen("hg id 2>&1")
local output = pipe:read('*all')
local rc = { pipe:close() }
if output ~= nil and
string.sub(output,1,7) ~= "abort: " and -- not an HG working copy
string.sub(output,1,12) ~= "000000000000" and -- empty wc (needs update)
(not string.find(output, "is not recognized")) then -- 'hg' not in path
local color = colors.clean
-- split elements on space delimiter
local items = {}
for i in string.gmatch(output, "%S+") do
table.insert(items, i)
end
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", color.."("..branch..")")
return false
-- if the repo hash ends with '+', the wc has uncommitted changes
if string.sub(items[1], -1, -1) == "+" then color = colors.dirty end
-- substitute the branch in directly -- already WITH parentheses. :)
result = color .. items[2] -- string.sub(items[2], 1, string.len(items[2]) - 1)
end
end
-- No mercurial present or not in mercurial file
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", "")
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", result)
return false
end
@ -340,6 +377,7 @@ clink.prompt.register_filter(set_prompt_filter, 1)
clink.prompt.register_filter(hg_prompt_filter, 50)
clink.prompt.register_filter(git_prompt_filter, 50)
clink.prompt.register_filter(svn_prompt_filter, 50)
clink.prompt.register_filter(percent_prompt_filter, 51)
local completions_dir = clink.get_env('CMDER_ROOT')..'/vendor/clink-completions/'
for _,lua_module in ipairs(clink.find_files(completions_dir..'*.lua')) do
@ -351,3 +389,13 @@ for _,lua_module in ipairs(clink.find_files(completions_dir..'*.lua')) do
dofile(filename)
end
end
if clink.get_env('CMDER_USER_CONFIG') then
local cmder_config_dir = clink.get_env('CMDER_ROOT')..'/config/'
for _,lua_module in ipairs(clink.find_files(cmder_config_dir..'*.lua')) do
local filename = cmder_config_dir..lua_module
-- use dofile instead of require because require caches loaded modules
-- so config reloading using Alt-Q won't reload updated modules.
dofile(filename)
end
end

35
vendor/cmder.sh vendored
View File

@ -1,6 +1,6 @@
# DO NOT EDIT THIS FILE IT WILL BE OVERWRITTEN ON UPDATE
#
# Add portable user customizations ${CMDER_ROOT}/config/user-profile.sh,
# Add portable user customizations ${CMDER_ROOT}/config/user_profile.sh,
# these customizations will follow Cmder if $CMDER_ROOT is copied
# to another machine.
#
@ -45,7 +45,7 @@ if [[ ! "$PATH" =~ "${GIT_INSTALL_ROOT}/bin:" ]] ; then
PATH=${GIT_INSTALL_ROOT}/bin:$PATH
fi
PATH=${CMDER_ROOT}/bin:$PATH:${CMDER_ROOT}
PATH=${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}
export PATH
@ -63,21 +63,34 @@ if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
runProfiled "${CMDER_USER_CONFIG}/profile.d"
fi
initialConfig="${CMDER_ROOT}/config/user-profile.sh"
if [ -f "${CMDER_ROOT}/config/user-profile.sh" ] ; then
. "${CMDER_ROOT}/config/user-profile.sh"
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
fi
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
. "${CMDER_ROOT}/config/user_profile.sh"
fi
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
initialConfig="${CMDER_USER_CONFIG}/user-profile.sh"
if [ -f "${CMDER_USER_CONFIG}/user-profile.sh" ] ; then
. "${CMDER_USER_CONFIG}/user-profile.sh"
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
fi
export PATH=${CMDER_USER_CONFIG}/bin:$PATH
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
. "${CMDER_USER_CONFIG}/user_profile.sh"
fi
fi
if [ ! -f "${initialConfig}" ] ; then
echo Creating user startup file: "${initialConfig}"
cat <<-eof >"${initialConfig}"
if [ ! -f "${CmderUserProfilePath}" ] ; then
echo Creating user startup file: "${CmderUserProfilePath}"
cat <<-eof >"${CmderUserProfilePath}"
# use this file to run your own startup commands for msys2 bash'
# To add a new vendor to the path, do something like:

62
vendor/cmder_exinit vendored
View File

@ -1,4 +1,4 @@
# Copy this file to your non integrated *nix-like environment,
# Copy this file to your non integrated *nix-like environment,
# Cygwin/MSys2/Git for Windows SDK, installs '/etc/profile.d/'
# folder to integrate the externally installed Unix like environment
# into Cmder so it has access to settings stored in Cmder/config
@ -15,7 +15,7 @@
# These customizations will follow Cmder if $CMDER_ROOT is copied
# to another machine.
#
# Add system specific users customizations to $HOME/.bashrc, these
# Add system specific users customizations to $HOME/.bashrc, these
# customizations will not follow Cmder to another machine.
# # Uncomment and edit the CMDER_ROOT line to use Cmder/config even when launched
@ -58,45 +58,57 @@ fi
if [ ! "$CMDER_ROOT" = "" ] ; then
# Remove any trailing '/'
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
echo "Using \"CMDER_ROOT\" at \"${CMDER_ROOT}\"."
export CMDER_ROOT
PATH=${CMDER_ROOT}/bin:$PATH:${CMDER_ROOT}
PATH=${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}
export PATH
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
# to source them at startup.
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
mkdir -p "${CMDER_ROOT}/config/profile.d"
fi
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
runProfiled "${CMDER_ROOT}/config/profile.d"
fi
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
runProfiled "${CMDER_USER_CONFIG}/profile.d"
fi
if [ -f "${CMDER_ROOT}/config/user-profile.sh" ] ; then
. "${CMDER_ROOT}/config/user-profile.sh"
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
fi
if [ -f "${CMDER_USER_CONFIG}/user-profile.sh" ] ; then
. "${CMDER_USER_CONFIG}/user-profile.sh"
else
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
initialProfile="${CMDER_USER_CONFIG}/user-profile.sh"
else
initialProfile="${CMDER_ROOT}/config/user-profile.sh"
fi
echo Creating user startup file: "${initialProfile}"
cat <<-eof >"${initialProfile}"
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
. "${CMDER_ROOT}/config/user_profile.sh"
fi
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
fi
export PATH=${CMDER_USER_CONFIG}/bin:$PATH
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
. "${CMDER_USER_CONFIG}/user_profile.sh"
fi
fi
if [ ! -f "${CmderUserProfilePath}" ] ; then
echo Creating user startup file: "${CmderUserProfilePath}"
cat <<-eof >"${CmderUserProfilePath}"
# use this file to run your own startup commands for msys2 bash'
# To add a new vendor to the path, do something like:

234
vendor/init.bat vendored
View File

@ -1,15 +1,20 @@
@echo off
set cmder_init_start=%time%
:: Init Script for cmd.exe
:: Created as part of cmder project
:: !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
:: !!! Use "%CMDER_ROOT%\config\user-profile.cmd" to add your own startup commands
:: !!! 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 verbose_output=0
set debug_output=0
set time_init=0
set fast_init=0
set max_depth=1
set "CMDER_USER_FLAGS= "
:: Find root dir
if not defined CMDER_ROOT (
@ -27,6 +32,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"
@ -36,10 +42,14 @@ call "%cmder_root%\vendor\lib\lib_profile"
:var_loop
if "%~1" == "" (
goto :start
) 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
set verbose_output=1
) else if /i "%1"=="/d" (
set debug-output=1
set debug_output=1
) else if /i "%1" == "/max_depth" (
if "%~2" geq "1" if "%~2" leq "5" (
set "max_depth=%~2"
@ -58,7 +68,7 @@ call "%cmder_root%\vendor\lib\lib_profile"
)
) else if /i "%1" == "/user_aliases" (
if exist "%~2" (
set "user-aliases=%~2"
set "user_aliases=%~2"
shift
)
) else if /i "%1" == "/git_install_root" (
@ -80,16 +90,20 @@ call "%cmder_root%\vendor\lib\lib_profile"
) else if /i "%1" == "/svn_ssh" (
set SVN_SSH=%2
shift
) else (
set "CMDER_USER_FLAGS=%1 %CMDER_USER_FLAGS%"
)
shift
goto var_loop
:start
%lib_console% debug-output init.bat "Env Var - CMDER_ROOT=%CMDER_ROOT%"
%lib_console% debug-output init.bat "Env Var - debug-output=%debug-output%"
:: Sets CMDER_SHELL, CMDER_CLINK, CMDER_ALIASES
%lib_base% cmder_shell
%lib_console% debug_output init.bat "Env Var - CMDER_ROOT=%CMDER_ROOT%"
%lib_console% debug_output init.bat "Env Var - debug_output=%debug_output%"
if defined CMDER_USER_CONFIG (
%lib_console% debug-output init.bat "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '%CMDER_USER_CONFIG%'!"
%lib_console% debug_output init.bat "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '%CMDER_USER_CONFIG%'!"
)
:: Pick right version of clink
@ -101,21 +115,25 @@ if "%PROCESSOR_ARCHITECTURE%"=="x86" (
set architecture_bits=64
)
:: Tell the user about the clink config files...
if defined "%CMDER_USER_CONFIG%\settings" if not exist "%CMDER_USER_CONFIG%\settings" (
echo Generating clink initial settings in "%CMDER_USER_CONFIG%\settings"
echo Additional *.lua files in "%CMDER_USER_CONFIG%" are loaded on startup.\
if "%CMDER_CLINK%" == "1" (
%lib_console% verbose_output "Injecting Clink!"
} else if not exist "%CMDER_ROOT%\config\settings" (
echo Generating clink initial settings in "%CMDER_ROOT%\config\settings"
echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup.
)
:: Run clink
if defined CMDER_USER_CONFIG (
:: Run clink
if defined CMDER_USER_CONFIG (
if not exist "%CMDER_USER_CONFIG%\settings" (
echo Generating clink initial settings in "%CMDER_USER_CONFIG%\settings"
echo Additional *.lua files in "%CMDER_USER_CONFIG%" are loaded on startup.\
)
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_USER_CONFIG%" --scripts "%CMDER_ROOT%\vendor"
) else (
) else (
if not exist "%CMDER_ROOT%\config\settings" (
echo Generating clink initial settings in "%CMDER_ROOT%\config\settings"
echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup.
)
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
)
) else (
%lib_console% verbose_output "WARNING: Incompatible 'ComSpec/Shell' Detetected Skipping Clink Injection!"
)
:: Prepare for git-for-windows
@ -131,20 +149,34 @@ if not defined TERM set TERM=cygwin
:: also check that we have a recent enough version of git by examining the version string
setlocal enabledelayedexpansion
if defined GIT_INSTALL_ROOT (
if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" goto :FOUND_GIT)
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..."
%lib_console% debug_output init.bat "Looking for Git install root..."
:: get the version information for vendored git binary
%lib_git% read_version VENDORED "%CMDER_ROOT%\vendor\git-for-windows\cmd"
%lib_git% validate_version VENDORED !GIT_VERSION_VENDORED!
%lib_git% validate_version VENDORED %GIT_VERSION_VENDORED%
:: check if git is in path...
for /F "delims=" %%F in ('where git.exe 2^>nul') do (
:: get the absolute path to the user provided git binary
pushd %%~dpF
set "test_dir=!CD!"
:: check if there's shim - and if yes follow the path
if exist git.shim (
for /F "tokens=2 delims== " %%I in (git.shim) do (
pushd %%~dpI
set "test_dir=!CD!"
popd
)
) else (
set "test_dir=!CD!"
)
popd
:: get the version information for the user provided git binary
@ -165,49 +197,61 @@ for /F "delims=" %%F in ('where git.exe 2^>nul') do (
set test_dir=
goto :FOUND_GIT
) else (
call :verbose-output Found old !GIT_VERSION_USER! in "!test_dir!", but not using...
call :verbose_output Found old !GIT_VERSION_USER! in "!test_dir!", but not using...
set test_dir=
)
) else (
:: if the user provided git executable is not found
if !errorlevel! equ -255 (
call :verbose-output No git at "!git_executable!" found.
call :verbose_output No git at "!git_executable!" found.
set test_dir=
)
)
)
:: our last hope: our own git...
:VENDORED_GIT
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows"
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\cmd"
%lib_console% debug_output "Using vendored Git from '!GIT_INSTALL_ROOT!..."
goto :CONFIGURE_GIT
) else (
goto :NO_GIT
)
:SPECIFIED_GIT
%lib_console% debug_output "Using /GIT_INSTALL_ROOT from '%GIT_INSTALL_ROOT%..."
goto :CONFIGURE_GIT
:FOUND_GIT
%lib_console% debug_output "Using found Git from '%GIT_INSTALL_ROOT%..."
goto :CONFIGURE_GIT
:CONFIGURE_GIT
:: Add git to the path
if defined GIT_INSTALL_ROOT (
rem add the unix commands at the end to not shadow windows commands like more
if exist "!GIT_INSTALL_ROOT!\cmd\git.exe" %lib_path% enhance_path "!GIT_INSTALL_ROOT!\cmd" append
if exist "!GIT_INSTALL_ROOT!\mingw32" (
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\mingw32" append
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\mingw32\bin" append
) else if exist "!GIT_INSTALL_ROOT!\mingw64" (
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\mingw64" append
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\mingw64\bin" append
)
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\usr\bin" append
:: define SVN_SSH so we can use git svn with ssh svn repositories
if not defined SVN_SSH set "SVN_SSH=%GIT_INSTALL_ROOT:\=\\%\\bin\\ssh.exe"
for /F "delims=" %%F in ('env /usr/bin/locale -uU 2') do (
set "LANG=%%F"
)
)
endlocal & set "PATH=%PATH%" & set "SVN_SSH=%SVN_SSH%" & set "GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
%lib_console% debug-output init.bat "Env Var - GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
%lib_console% debug-output init.bat "Found Git in: '%GIT_INSTALL_ROOT%'"
endlocal & set "PATH=%PATH%" & set "LANG=%LANG%" & set "SVN_SSH=%SVN_SSH%" & set "GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
%lib_console% debug_output init.bat "Env Var - GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
%lib_console% debug_output init.bat "Found Git in: '%GIT_INSTALL_ROOT%'"
goto :PATH_ENHANCE
:NO_GIT
@ -215,6 +259,7 @@ goto :PATH_ENHANCE
endlocal
:PATH_ENHANCE
%lib_path% enhance_path "%CMDER_ROOT%\vendor\bin"
%lib_path% enhance_path_recursive "%CMDER_ROOT%\bin" %max_depth%
if defined CMDER_USER_BIN (
%lib_path% enhance_path_recursive "%CMDER_USER_BIN%" %max_depth%
@ -232,59 +277,63 @@ if defined CMDER_USER_CONFIG (
:: scripts run above by setting the 'aliases' env variable.
::
:: Note: If overriding default aliases store file the aliases
:: must also be self executing, see '.\user-aliases.cmd.example',
:: must also be self executing, see '.\user_aliases.cmd.example',
:: and be in profile.d folder.
if not defined user-aliases (
if not defined user_aliases (
if defined CMDER_USER_CONFIG (
set "user-aliases=%CMDER_USER_CONFIG%\user-aliases.cmd"
set "user_aliases=%CMDER_USER_CONFIG%\user_aliases.cmd"
) else (
set "user-aliases=%CMDER_ROOT%\config\user-aliases.cmd"
set "user_aliases=%CMDER_ROOT%\config\user_aliases.cmd"
)
)
:: The aliases environment variable is used by alias.bat to id
:: the default file to store new aliases in.
if not defined aliases (
set "aliases=%user-aliases%"
)
if "%CMDER_ALIASES%" == "1" (
REM The aliases environment variable is used by alias.bat to id
REM the default file to store new aliases in.
if not defined aliases (
set "aliases=%user_aliases%"
)
:: Make sure we have a self-extracting user-aliases.cmd file
setlocal enabledelayedexpansion
if not exist "%user-aliases%" (
echo Creating initial user-aliases store in "%user-aliases%"...
copy "%CMDER_ROOT%\vendor\user-aliases.cmd.example" "%user-aliases%"
) else (
type "%user-aliases%" | findstr /i ";= Add aliases below here" >nul
if "!errorlevel!" == "1" (
echo Creating initial user-aliases store in "%user-aliases%"...
if defined CMDER_USER_CONFIG (
copy "%user-aliases%" "%user-aliases%.old_format"
copy "%CMDER_ROOT%\vendor\user-aliases.cmd.example" "%user-aliases%"
) else (
copy "%user-aliases%" "%user-aliases%.old_format"
copy "%CMDER_ROOT%\vendor\user-aliases.cmd.example" "%user-aliases%"
)
)
)
REM Make sure we have a self-extracting user_aliases.cmd file
setlocal enabledelayedexpansion
if not exist "%user_aliases%" (
echo Creating initial user_aliases store in "%user_aliases%"...
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.example" "%user_aliases%"
) else (
type "%user_aliases%" | findstr /i ";= Add aliases below here" >nul
if "!errorlevel!" == "1" (
echo Creating initial user_aliases store in "%user_aliases%"...
if defined CMDER_USER_CONFIG (
copy "%user_aliases%" "%user_aliases%.old_format"
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.example" "%user_aliases%"
) else (
copy "%user_aliases%" "%user_aliases%.old_format"
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.example" "%user_aliases%"
)
)
)
:: Update old 'user-aliases' to new self executing 'user-aliases.cmd'
if exist "%CMDER_ROOT%\config\aliases" (
echo Updating old "%CMDER_ROOT%\config\aliases" to new format...
type "%CMDER_ROOT%\config\aliases" >> "%user-aliases%" && del "%CMDER_ROOT%\config\aliases"
) else if exist "%user-aliases%.old_format" (
echo Updating old "%user-aliases%" to new format...
type "%user-aliases%.old_format" >> "%user-aliases%" && del "%user-aliases%.old_format"
:: Update old 'user_aliases' to new self executing 'user_aliases.cmd'
if exist "%CMDER_ROOT%\config\aliases" (
echo Updating old "%CMDER_ROOT%\config\aliases" to new format...
type "%CMDER_ROOT%\config\aliases" >> "%user_aliases%"
del "%CMDER_ROOT%\config\aliases"
) else if exist "%user_aliases%.old_format" (
echo Updating old "%user_aliases%" to new format...
type "%user_aliases%.old_format" >> "%user_aliases%"
del "%user_aliases%.old_format"
)
endlocal
)
endlocal
:: Add aliases to the environment
call "%user-aliases%"
call "%user_aliases%"
:: See vendor\git-for-windows\README.portable for why we do this
:: Basically we need to execute this post-install.bat because we are
:: manually extracting the archive rather than executing the 7z sfx
if exist "%GIT_INSTALL_ROOT%\post-install.bat" (
%lib_console% verbose-output "Running Git for Windows one time Post Install...."
%lib_console% verbose_output "Running Git for Windows one time Post Install...."
pushd "%GIT_INSTALL_ROOT%\"
"%GIT_INSTALL_ROOT%\git-bash.exe" --no-needs-console --hide --no-cd --command=post-install.bat
popd
@ -292,19 +341,19 @@ if exist "%GIT_INSTALL_ROOT%\post-install.bat" (
:: Set home path
if not defined HOME set "HOME=%USERPROFILE%"
%lib_console% debug-output init.bat "Env Var - HOME=%HOME%"
%lib_console% debug_output init.bat "Env Var - HOME=%HOME%"
set "initialConfig=%CMDER_ROOT%\config\user-profile.cmd"
if exist "%CMDER_ROOT%\config\user-profile.cmd" (
set "initialConfig=%CMDER_ROOT%\config\user_profile.cmd"
if exist "%CMDER_ROOT%\config\user_profile.cmd" (
REM Create this file and place your own command in there
call "%CMDER_ROOT%\config\user-profile.cmd"
call "%CMDER_ROOT%\config\user_profile.cmd"
)
if defined CMDER_USER_CONFIG (
set "initialConfig=%CMDER_USER_CONFIG%\user-profile.cmd"
if exist "%CMDER_USER_CONFIG%\user-profile.cmd" (
set "initialConfig=%CMDER_USER_CONFIG%\user_profile.cmd"
if exist "%CMDER_USER_CONFIG%\user_profile.cmd" (
REM Create this file and place your own command in there
call "%CMDER_USER_CONFIG%\user-profile.cmd"
call "%CMDER_USER_CONFIG%\user_profile.cmd"
)
)
@ -312,21 +361,46 @@ if not exist "%initialConfig%" (
echo Creating user startup file: "%initialConfig%"
(
echo :: use this file to run your own startup commands
echo :: use in front of the command to prevent printing the command
echo :: use in front of the command to prevent printing the command
echo.
echo :: uncomment this to have the ssh agent load when cmder starts
echo :: call "%%GIT_INSTALL_ROOT%%/cmd/start-ssh-agent.cmd"
echo.
echo :: uncomment this next two lines to use pageant as the ssh authentication agent
echo :: uncomment the next two lines to use pageant as the ssh authentication agent
echo :: SET SSH_AUTH_SOCK=/tmp/.ssh-pageant-auth-sock
echo :: call "%%GIT_INSTALL_ROOT%%/cmd/start-ssh-pageant.cmd"
echo.
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 "cexec /?"
echo.
echo :: %%ccall%% "/customOption" "command/program"
echo.
echo @echo off
) >"%initialConfig%"
)
if "%CMDER_ALIASES%" == "1" if exist "%CMDER_ROOT%\bin\alias.bat" if exist "%CMDER_ROOT%\vendor\bin\alias.cmd" (
echo Cmder's 'alias' command has been moved into "%CMDER_ROOT%\vendor\bin\alias.cmd"
echo to get rid of this message either:
echo.
echo Delete the file "%CMDER_ROOT%\bin\alias.bat"
echo.
echo or
echo.
echo If you have customized it and want to continue using it instead of the included version
echo * Rename "%CMDER_ROOT%\bin\alias.bat" to "%CMDER_ROOT%\bin\alias.cmd".
echo * Search for 'user-aliases' and replace it with 'user_aliases'.
)
set initialConfig=
set CMDER_CONFIGURED=1
set cmder_init_end=%time%
if %time_init% gtr 0 (
%cmder_root%\vendor\bin\timer.cmd %cmder_init_start% %cmder_init_end%
)
exit /b

View File

@ -3,7 +3,7 @@
set lib_base=call "%~dp0lib_base.cmd"
if "%~1" == "/h" (
%lib_base% help "%0"
%lib_base% help "%~0"
) else if "%1" neq "" (
call :%*
)
@ -16,7 +16,7 @@ exit /b
:::.
:::include:
:::.
::: call "$0"
::: call "lib_base.cmd"
:::.
:::usage:
:::.
@ -27,12 +27,9 @@ exit /b
::: file <in> full path to file containing lib_routines to display
:::.
:::-------------------------------------------------------------------------------
for /f "tokens=* delims=:" %%a in ('type "%~1" ^| findstr /i /r "^:::"') do (
rem echo a="%%a"
if "%%a"==" " (
echo.
if "%%a"=="." (
echo.
) else if /i "%%a" == "usage" (
@ -46,3 +43,34 @@ exit /b
pause
exit /b
:cmder_shell
:::===============================================================================
:::show_subs - shows all sub routines in a .bat/.cmd file with documentation
:::.
:::include:
:::.
::: call "lib_base.cmd"
:::.
:::usage:
:::.
::: %lib_base% cmder_shell
:::.
:::options:
:::.
::: file <in> full path to file containing lib_routines to display
:::.
:::-------------------------------------------------------------------------------
echo %comspec% | find /i "\cmd.exe" > nul && set "CMDER_SHELL=cmd"
echo %comspec% | find /i "\tcc.exe" > nul && set "CMDER_SHELL=tcc"
echo %comspec% | find /i "\tccle" > nul && set "CMDER_SHELL=tccle"
set CMDER_CLINK=1
if "%CMDER_SHELL%" equ "tcc" set CMDER_CLINK=0
if "%CMDER_SHELL%" equ "tccle" set CMDER_CLINK=0
set CMDER_ALIASES=1
if "%CMDER_SHELL%" equ "tcc" set CMDER_ALIASES=0
if "%CMDER_SHELL%" equ "tccle" set CMDER_ALIASES=0
exit /b

View File

@ -1,44 +1,44 @@
@echo off
rem set args=%*
if "%fast_init%" == "1" exit /b
call "%~dp0lib_base.cmd"
set lib_console=call "%~dp0lib_console.cmd"
if "%~1" == "/h" (
%lib_base% help "%0"
%lib_base% help "%~0"
) else if "%1" neq "" (
call :%*
)
exit /b
:debug-output
:debug_output
:::===============================================================================
:::debug-output - Output a debug message to the console.
:::debug_output - Output a debug message to the console.
:::.
:::include:
:::.
::: call "$0"
::: call "lib_console.cmd"
:::.
:::usage:
:::.
::: %lib_console% debug-output [caller] [message]
::: %lib_console% debug_output [caller] [message]
:::.
:::required:
:::.
::: [caller] <in> Script/sub routine name calling debug-output
::: [caller] <in> Script/sub routine name calling debug_output
:::.
::: [message] <in> Message text to display.
:::.
:::-------------------------------------------------------------------------------
if %debug-output% gtr 0 echo DEBUG(%~1): %~2 & echo.
if %debug_output% gtr 0 echo DEBUG(%~1): %~2 & echo.
exit /b
:verbose-output
:verbose_output
:::===============================================================================
:::verbose-output - Output a debug message to the console.
:::verbose_output - Output a debug message to the console.
:::.
:::include:
:::.
@ -46,7 +46,7 @@ exit /b
:::.
:::usage:
:::.
::: %lib_console% verbose-output "[message]"
::: %lib_console% verbose_output "[message]"
:::.
:::required:
:::.
@ -54,7 +54,7 @@ exit /b
:::.
:::-------------------------------------------------------------------------------
if %verbose-output% gtr 0 echo %~1
if %verbose_output% gtr 0 echo %~1
exit /b
:show_error

View File

@ -1,13 +1,11 @@
@echo off
call "%~dp0lib_base.cmd"
call "%%~dp0lib_console.cmd"
set lib_git=call "%~dp0lib_git.cmd"
if "%~1" == "/h" (
%lib_base% help "%0"
%lib_base% help "%~0"
) else if "%1" neq "" (
call :%*
)
@ -20,7 +18,7 @@ exit /b
:::.
:::include:
:::.
::: call "$0"
::: call "lib_git.cmd"
:::.
:::usage:
:::.
@ -42,19 +40,19 @@ exit /b
:: set the executable path
set "git_executable=%~2\git.exe"
%lib_console% debug-output :read_version "Env Var - git_executable=%git_executable%"
%lib_console% debug_output :read_version "Env Var - git_executable=%git_executable%"
:: check if the executable actually exists
if not exist "%git_executable%" (
%lib_console% debug-output :read_version "%git_executable% does not exist."
%lib_console% debug_output :read_version "%git_executable% does not exist."
exit /b -255
)
:: get the git version in the provided directory
for /F "tokens=1,2,3 usebackq" %%A in (`"%git_executable%" --version 2^>nul`) do (
if /i "%%A %%B" == "git version" (
set "GIT_VERSION_%~1=%%C"
%lib_console% debug-output :read_version "Env Var - GIT_VERSION_%~1=%%C"
set "GIT_VERSION=%%C"
%lib_console% debug_output :read_version "Env Var - GIT_VERSION_%~1=!GIT_VERSION!"
) else (
%lib_console% show_error "git --version" returned an inproper version string!
pause
@ -62,7 +60,7 @@ exit /b
)
)
endlocal & set GIT_VERSION%~1=!GIT_VERSION%~1!
endlocal & set "GIT_VERSION_%~1=%GIT_VERSION%"
exit /b
:parse_version
@ -92,6 +90,7 @@ exit /b
setlocal enabledelayedexpansion
:: process a `x.x.x.xxxx.x` formatted string
%lib_console% debug_output :parse_version "ARGV[1]=%~1, ARGV[2]=%~2"
for /F "tokens=1-3* delims=.,-" %%A in ("%2") do (
set "%~1_MAJOR=%%A"
set "%~1_MINOR=%%B"
@ -121,10 +120,11 @@ exit /b
:::-------------------------------------------------------------------------------
:: now parse the version information into the corresponding variables
%lib_console% debug_output :validate_version "ARGV[1]=%~1, ARGV[2]=%~2"
call :parse_version %~1 %~2
:: ... and maybe display it, for debugging purposes.
%lib_console% debug-output :validate_version "Found Git Version for %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!"
%lib_console% debug_output :validate_version "Found Git Version for %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!"
exit /b
:compare_versions
@ -148,9 +148,9 @@ exit /b
:: checks all major, minor, patch and build variables for the given arguments.
:: whichever binary that has the most recent version will be used based on the return code.
:: %lib_console% debug-output Comparing:
:: %lib_console% debug-output %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!
:: %lib_console% debug-output %~2: !%~2_MAJOR!.!%~2_MINOR!.!%~2_PATCH!.!%~2_BUILD!
%lib_console% debug_output Comparing:
%lib_console% debug_output %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!
%lib_console% debug_output %~2: !%~2_MAJOR!.!%~2_MINOR!.!%~2_PATCH!.!%~2_BUILD!
if !%~1_MAJOR! GTR !%~2_MAJOR! (exit /b 1)
if !%~1_MAJOR! LSS !%~2_MAJOR! (exit /b -1)

View File

@ -6,7 +6,7 @@ call "%%~dp0lib_console"
set lib_path=call "%~dp0lib_path.cmd"
if "%~1" == "/h" (
%lib_base% help "%0"
%lib_base% help "%~0"
) else if "%1" neq "" (
call :%*
)
@ -19,7 +19,7 @@ exit /b
:::
:::include:
:::
::: call "$0"
::: call "lib_path.cmd"
:::
:::usage:
:::
@ -52,35 +52,49 @@ 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:\=\\%"
set "find_query=%find_query: =\ %"
set found=0
%lib_console% debug-output :enhance_path "Env Var - find_query=%find_query%"
echo "%PATH%"|findstr >nul /I /R ";%find_query%\"$"
if "!ERRORLEVEL!" == "0" set found=1
if "%CMDER_CONFIGURED%" == "1" (
%lib_console% debug_output :enhance_path "Env Var - find_query=%find_query%"
echo "%path%"|findstr >nul /I /R ";%find_query%\"$"
if "!ERRORLEVEL!" == "0" set found=1
)
%lib_console% debug_output :enhance_path "Env Var 1 - found=!found!"
%lib_console% debug-output :enhance_path "Env Var 1 - found=!found!"
if "!found!" == "0" (
echo "%PATH%"|findstr >nul /i /r ";%find_query%;"
if "!ERRORLEVEL!" == "0" set found=1
%lib_console% debug-output :enhance_path "Env Var 2 - found=!found!"
if "%CMDER_CONFIGURED%" == "1" (
echo "%path%"|findstr >nul /i /r ";%find_query%;"
if "!ERRORLEVEL!" == "0" set found=1
)
%lib_console% debug_output :enhance_path "Env Var 2 - found=!found!"
)
if "%found%" == "0" (
%lib_console% debug-output :enhance_path "BEFORE Env Var - PATH=!path!"
%lib_console% debug_output :enhance_path "BEFORE Env Var - PATH=!path!"
if /i "%position%" == "append" (
%lib_console% debug-output :enhance_path "Appending '%add_path%'"
%lib_console% debug_output :enhance_path "Appending '%add_path%'"
set "PATH=%PATH%;%add_path%"
) else (
%lib_console% debug-output :enhance_path "Prepending '%add_path%'"
%lib_console% debug_output :enhance_path "Prepending '%add_path%'"
set "PATH=%add_path%;%PATH%"
)
%lib_console% debug-output :enhance_path "AFTER Env Var - PATH=!path!"
%lib_console% debug_output :enhance_path "AFTER Env Var - PATH=!path!"
)
:end_enhance_path
endlocal & set "PATH=%PATH:;;=;%"
exit /b
@ -111,7 +125,6 @@ exit /b
:::.
::: path <out> Sets the path env variable if required.
:::-------------------------------------------------------------------------------
setlocal enabledelayedexpansion
if "%~1" neq "" (
set "add_path=%~1"
@ -132,24 +145,30 @@ 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%"
%lib_console% debug-output :enhance_path_recursive "Env Var - position=%position%"
%lib_console% debug-output :enhance_path_recursive "Env Var - max_depth=%max_depth%"
%lib_console% debug_output :enhance_path_recursive "Env Var - add_path=%add_path%"
%lib_console% debug_output :enhance_path_recursive "Env Var - position=%position%"
%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%'"
%lib_console% debug_output :enhance_path_recursive "Adding parent directory - '%add_path%'"
call :enhance_path "%add_path%" %position%
set /a "depth=!depth!+1"
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'"
%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%
%lib_console% debug-output :enhance_path_recursive "Env Var AFTER- depth=!depth!"
%lib_console% debug_output :enhance_path_recursive "Env Var AFTER- depth=!depth!"
)
)
:end_enhance_path_recursive
endlocal & set "PATH=%PATH%"
exit /b

View File

@ -1,12 +1,11 @@
@echo off
call "%~dp0lib_base.cmd"
call "%%~dp0lib_console"
set lib_profile=call "%~dp0lib_profile.cmd"
if "%~1" == "/h" (
%lib_base% help "%0"
%lib_base% help "%~0"
) else if "%1" neq "" (
call :%*
)
@ -19,7 +18,7 @@ exit /b
:::
:::include:
:::
::: call "$0"
::: call "lib_profile.cmd"
:::
:::usage:
:::
@ -39,8 +38,9 @@ exit /b
pushd "%~1"
for /f "usebackq" %%x in ( `dir /b *.bat *.cmd 2^>nul` ) do (
%lib_console% verbose-output "Calling '%~1\%%x'..."
%lib_console% verbose_output "Calling '%~1\%%x'..."
call "%~1\%%x"
)
popd
exit /b

40
vendor/profile.ps1 vendored
View File

@ -2,7 +2,7 @@
# Created as part of cmder project
# !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
# !!! Use "%CMDER_ROOT%\config\user-profile.ps1" to add your own startup commands
# !!! Use "%CMDER_ROOT%\config\user_profile.ps1" to add your own startup commands
# Compatibility with PS major versions <= 2
if(!$PSScriptRoot) {
@ -29,10 +29,6 @@ $ENV:CMDER_ROOT = (($ENV:CMDER_ROOT).trimend("\"))
# -> recent PowerShell versions include PowerShellGet out of the box
$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue | Out-Null)
# do not load bundled psget if a module installer is already available
# -> recent PowerShell versions include PowerShellGet out of the box
$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue | Out-Null)
# Add Cmder modules directory to the autoload path.
$CmderModulePath = Join-path $PSScriptRoot "psmodules/"
@ -93,11 +89,11 @@ if (Get-Module PSReadline -ErrorAction "SilentlyContinue") {
}
# Enhance Path
$env:Path = "$Env:CMDER_ROOT\bin;$env:Path;$Env:CMDER_ROOT"
$env:Path = "$Env:CMDER_ROOT\bin;$Env:CMDER_ROOT\vendor\bin;$env:Path;$Env:CMDER_ROOT"
#
# Prompt Section
# Users should modify their user-profile.ps1 as it will be safe from updates.
# Users should modify their user_profile.ps1 as it will be safe from updates.
#
# Pre assign the hooks so the first run of cmder gets a working prompt.
@ -134,7 +130,7 @@ if (-not (test-path "$ENV:CMDER_ROOT\config\profile.d")) {
pushd $ENV:CMDER_ROOT\config\profile.d
foreach ($x in Get-ChildItem *.ps1) {
# write-host write-host Sourcing $x
. $x
Import-Module $x
}
popd
@ -144,27 +140,37 @@ if ($ENV:CMDER_USER_CONFIG -ne "" -and (test-path "$ENV:CMDER_USER_CONFIG\profil
pushd $ENV:CMDER_USER_CONFIG\profile.d
foreach ($x in Get-ChildItem *.ps1) {
# write-host write-host Sourcing $x
. $x
Import-Module $x
}
popd
}
# Renaming to "config\user_profile.ps1" to "user_profile.ps1" for consistency.
if (test-path "$env:CMDER_ROOT\config\user-profile.ps1") {
rename-item "$env:CMDER_ROOT\config\user-profile.ps1" user_profile.ps1
}
$CmderUserProfilePath = Join-Path $env:CMDER_ROOT "config\user-profile.ps1"
$CmderUserProfilePath = Join-Path $env:CMDER_ROOT "config\user_profile.ps1"
if (Test-Path $CmderUserProfilePath) {
# Create this file and place your own command in there.
. "$CmderUserProfilePath"
Import-Module "$CmderUserProfilePath"
}
if ($ENV:CMDER_USER_CONFIG) {
$CmderUserProfilePath = Join-Path $ENV:CMDER_USER_CONFIG "user-profile.ps1"
# Renaming to "$env:CMDER_USER_CONFIG\user-profile.ps1" to "user_profile.ps1" for consistency.
if (test-path "$env:CMDER_USER_CONFIG\user-profile.ps1") {
rename-item "$env:CMDER_USER_CONFIG\user-profile.ps1" user_profile.ps1
}
$env:Path = "$Env:CMDER_USER_CONFIG\bin;$env:Path"
$CmderUserProfilePath = Join-Path $ENV:CMDER_USER_CONFIG "user_profile.ps1"
if (Test-Path $CmderUserProfilePath) {
Import-Module "$CmderUserProfilePath"
}
}
if (Test-Path $CmderUserProfilePath) {
. "$CmderUserProfilePath"
} else {
if (! (Test-Path $CmderUserProfilePath) ) {
# This multiline string cannot be indented, for this reason I've not indented the whole block
Write-Host -BackgroundColor Darkgreen -ForegroundColor White "First Run: Creating user startup file: $CmderUserProfilePath"

8
vendor/sources.json vendored
View File

@ -1,8 +1,8 @@
[
{
"name": "git-for-windows",
"version": "v2.17.1.windows.2",
"url": "https://github.com/git-for-windows/git/releases/download/v2.17.1.windows.2/PortableGit-2.17.1.2-64-bit.7z.exe"
"version": "v2.19.0.windows.1",
"url": "https://github.com/git-for-windows/git/releases/download/v2.19.0.windows.1/PortableGit-2.19.0-64-bit.7z.exe"
},
{
"name": "clink",
@ -11,8 +11,8 @@
},
{
"name": "conemu-maximus5",
"version": "180528",
"url": "https://github.com/Maximus5/ConEmu/releases/download/v18.05.28/ConEmuPack.180528.7z"
"version": "180626",
"url": "https://github.com/Maximus5/ConEmu/releases/download/v18.06.26/ConEmuPack.180626.7z"
},
{
"name": "clink-completions",