mirror of
https://github.com/cmderdev/cmder.git
synced 2025-07-17 21:19:41 +08:00
Compare commits
40 Commits
v1.3.3
...
v1.3.6-pre
Author | SHA1 | Date | |
---|---|---|---|
b37001b591 | |||
997e799138 | |||
ff2e09849e | |||
8237b1010c | |||
cf311fb1c2 | |||
78b9c97fa9 | |||
a49c1b3f3d | |||
fff6e4506c | |||
a71c6a50ad | |||
5e703796c9 | |||
b88a01822f | |||
3bf07c088d | |||
724930d69d | |||
badb027c24 | |||
145a1b144b | |||
29c5e83975 | |||
1c02c55c2f | |||
74fc14eadf | |||
0729c06c20 | |||
6da96fb7ec | |||
ba610f5f7b | |||
7930c9bfe5 | |||
bafaf7cba4 | |||
3c14d19a27 | |||
13941a44ec | |||
ee4f85de85 | |||
9d6e5c12a2 | |||
da27f9be9f | |||
124565f36a | |||
46d468aea0 | |||
dc27c53739 | |||
7479d620b1 | |||
a8d32611a9 | |||
b6042a7ca1 | |||
dcf22af3c8 | |||
b58ff9bb53 | |||
68d9425c89 | |||
7ca2f5503a | |||
a7237370e3 | |||
25005930ba |
5
.gitattributes
vendored
5
.gitattributes
vendored
@ -1,2 +1,7 @@
|
|||||||
# Auto detect text files and perform LF normalization
|
# Auto detect text files and perform LF normalization
|
||||||
* text=auto
|
* text=auto
|
||||||
|
*.cmd text eol=crlf
|
||||||
|
*.bat text eol=crlf
|
||||||
|
*.ps1 text eol=crlf
|
||||||
|
*.md text eol=lf
|
||||||
|
*.sh text eol=lf
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -13,6 +13,7 @@ build/
|
|||||||
Version v*
|
Version v*
|
||||||
*.bak
|
*.bak
|
||||||
config/user-*
|
config/user-*
|
||||||
|
config/settings
|
||||||
config/aliases
|
config/aliases
|
||||||
config/profile.d
|
config/profile.d
|
||||||
.github_changelog_generator
|
.github_changelog_generator
|
||||||
|
101
CHANGELOG.md
101
CHANGELOG.md
@ -1,6 +1,105 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
## [1.3.2](https://github.com/cmderdev/cmder/tree/1.3.2) (2016-12-01)
|
## [1.3.6-pre1](https://github.com/cmderdev/cmder/tree/v1.3.6-pre1) (2018-03-01)
|
||||||
|
|
||||||
|
**Fixed bugs:**
|
||||||
|
|
||||||
|
* Fixed Git version check recently added to master.
|
||||||
|
|
||||||
|
**Updates:**
|
||||||
|
|
||||||
|
* Modified Cmder tasks in default Conemu.xml to allow easily adding command line args for init.bat by adding some quotes. This resulted in a ton of misc changes to this file. See Adds below.
|
||||||
|
* Reworked `cmder.exe` command line argument handling to make it more flexible and easily added to.
|
||||||
|
* Reworked README.md tables to make them more readable in editors
|
||||||
|
|
||||||
|
**Implemented enhancements:**
|
||||||
|
|
||||||
|
* Added `cmder.exe` command line args documenttion to `README.md`
|
||||||
|
* Added `:enhance_path` method to vendor\init.bat that modifies the path only if required.
|
||||||
|
* To prepend: `call :enhance_path "%cmder_root%"`
|
||||||
|
* to append: `call :enhance_path "%cmder_root%" append`
|
||||||
|
* Added `:enhance_path_recursive` method to vendor\init.bat that adds a path and all its sub directories to the path if required.
|
||||||
|
* Max recurse depth default is '1' configurable using `init.bat /max_depth [1-5]`. 6+ results in error.
|
||||||
|
* To prepend and go 3 levels deep: `call :enhance_path "%cmder_root%" 3`
|
||||||
|
* To append and go 2 levels deep: `call :enhance_path "%cmder_root%" 2 append`
|
||||||
|
* Added ability to init.bat to accept command line args and documented them in README.md. Allows users to change the behaviour of init.bat without editing the file.
|
||||||
|
|
||||||
|
| 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 |
|
||||||
|
|
||||||
|
* Added new `cmder.exe /C \<path\>` argument
|
||||||
|
* To use run Cmder.exe with "/C" command line argument. Example: `cmder.exe /C %userprofile%\cmder_config`
|
||||||
|
* To use run with `Cmder as Admin` sessions you must specify "/c" command line argument to `init.bat` in tasks. See [README.md](./Readme.md) for details.
|
||||||
|
* Enables shared Cmder install with Non-Portable Individual User Config
|
||||||
|
* Supported by all supported shells (cmder, powershell, git bash, and external bash)
|
||||||
|
* This will create the following directory structure if it is missing.
|
||||||
|
|
||||||
|
```
|
||||||
|
c:\users\[username]\cmder_config
|
||||||
|
├───bin
|
||||||
|
└───config
|
||||||
|
└───profile.d
|
||||||
|
```
|
||||||
|
|
||||||
|
* Shell init scripts run in the following order
|
||||||
|
1. %cmder_root%\config\profile.d\*.[cmd|ps1|sh]
|
||||||
|
1. %cmder_root%\config\user-profile.[cmd|ps1|sh]
|
||||||
|
1. %userprofile%\cmder_config\config\profile.d\*.[cmd|ps1|sh]
|
||||||
|
1. %userprofile%\cmder_config\config\user-profile.[cmd|ps1|sh]
|
||||||
|
|
||||||
|
## [1.3.5](https://github.com/cmderdev/cmder/releases/tag/v1.3.5) (2018-02-11)
|
||||||
|
|
||||||
|
This is the first Cmder release that comes with Git for Windows in the 64bit version. If you are still using a 32bit version, you have to fix this yourself.
|
||||||
|
|
||||||
|
**Updated components:**
|
||||||
|
- Git updated to v2.16.1.windows.4
|
||||||
|
- clink updated to 0.4.9 (official version)
|
||||||
|
- ConEmu updated to 180206
|
||||||
|
|
||||||
|
**Fixed bugs:**
|
||||||
|
|
||||||
|
- use /dir Switch instead of CMDER_START (previously [\#921](https://github.com/cmderdev/cmder/pull/921)) [\#1609](https://github.com/cmderdev/cmder/pull/1609) ([Stanzilla](https://github.com/Stanzilla))
|
||||||
|
- add config/settings to .gitignore [\#1592](https://github.com/cmderdev/cmder/pull/1592) ([daxgames]((https://github.com/daxgames)))
|
||||||
|
- Upgrade #1591 ([daxgames]((https://github.com/daxgames)))
|
||||||
|
- Fix startup folder issue [\#1547](https://github.com/cmderdev/cmder/pull/1547) (dr-tony-lin)
|
||||||
|
- Fix alias.bat handling "user-aliases.cmd" with spaces [\#1531](https://github.com/cmderdev/cmder/pull/1531) ([Varriount](https://github.com/Varriount))
|
||||||
|
- Compatible with Visual Studio Code (cmd) [\#1416](https://github.com/cmderdev/cmder/pull/1416) ([gucong3000](https://github.com/gucong3000))
|
||||||
|
|
||||||
|
## [1.3.4](https://github.com/cmderdev/cmder/releases/tag/v1.3.4) (2017-11-03)
|
||||||
|
|
||||||
|
We now use a forked version of clink since it's original author is missing and we needed Windows 10 compat.
|
||||||
|
|
||||||
|
**Updated components:**
|
||||||
|
|
||||||
|
- Git: v2.15.0.windows.1
|
||||||
|
|
||||||
|
**Fixed bugs:**
|
||||||
|
|
||||||
|
- Fix lamda color after a ConEmu change: [a8d3261](https://github.com/cmderdev/cmder/commit/a8d32611a9b93cfb58f0318ae4b8041bc8a86c68)
|
||||||
|
- Compatible with Visual Studio Code (PowerShell): [\#1417](https://github.com/cmderdev/cmder/pull/1417)
|
||||||
|
- Make default tasks respect "Startup directory for new process": [b58ff9b](https://github.com/cmderdev/cmder/commit/b58ff9bb539d7f908f427fa34f377e1513fcd825)
|
||||||
|
|
||||||
|
|
||||||
|
## [1.3.3](https://github.com/cmderdev/cmder/releases/tag/v1.3.3) (2017-10-28)
|
||||||
|
|
||||||
|
We now use a forked version of clink since it's original author is missing and we needed Windows 10 compat.
|
||||||
|
|
||||||
|
**Updated components:**
|
||||||
|
|
||||||
|
- Git: v2.14.3.windows.1
|
||||||
|
- ConEmu: 170910
|
||||||
|
- Clink: 0.4.9-FORK
|
||||||
|
- Clink-Completions: 0.3.3
|
||||||
|
|
||||||
|
## [1.3.2](https://github.com/cmderdev/cmder/releases/tag/v1.3.2) (2016-12-01)
|
||||||
**Implemented enhancements:**
|
**Implemented enhancements:**
|
||||||
|
|
||||||
- Change appveyor.yml to publish all resulting artifacts from builds. [\#717](https://github.com/cmderdev/cmder/issues/717)
|
- Change appveyor.yml to publish all resulting artifacts from builds. [\#717](https://github.com/cmderdev/cmder/issues/717)
|
||||||
|
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2017 Samuel Vasko
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
117
README.md
117
README.md
@ -11,13 +11,42 @@ Cmder is a **software package** created out of pure frustration over absence of
|
|||||||
The main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies, which makes it great for **USB Sticks** or **cloud storage**. So you can carry your console, aliases and binaries (like wget, curl and git) with you anywhere.
|
The main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies, which makes it great for **USB Sticks** or **cloud storage**. So you can carry your console, aliases and binaries (like wget, curl and git) with you anywhere.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
### Single User Portable Config
|
||||||
|
|
||||||
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
|
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
|
||||||
2. Extract the archive
|
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 `bin` folder to be injected into your PATH. (nb: 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
|
||||||
|
|
||||||
## Integration
|
### Shared Cmder install with Non-Portable Individual User Config
|
||||||
|
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
|
||||||
|
2. Extract the archive to a shared location.
|
||||||
|
3. (optional) Place your own executable files into the `%cmder_root%\bin` folder to be injected into your PATH.
|
||||||
|
4. (optional) Create `%userprofile%\cmder_config\bin` folder to be injected into individual users PATH. Default is to auto create this on first run.
|
||||||
|
5. (optional) Place your own executable files into the `%userprofile%\cmder_config\bin` folder to be injected into your PATH.
|
||||||
|
6. Run Cmder.exe with "/C" command line argument. Example: `cmder.exe /C %userprofile%\cmder_config`
|
||||||
|
* This will create the following directory structure if it is missing.
|
||||||
|
|
||||||
|
```
|
||||||
|
c:\users\[username]\cmder_config
|
||||||
|
├───bin
|
||||||
|
└───config
|
||||||
|
└───profile.d
|
||||||
|
```
|
||||||
|
|
||||||
|
* Both the shared install and the individual user config locations can contain a full set of init and profile.d scripts enabling shared config with user overrides. See below.
|
||||||
|
|
||||||
|
## Cmder.exe Command Line Arguments
|
||||||
|
|
||||||
|
|
||||||
|
| 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. |
|
||||||
|
|
||||||
|
## Context Menu Integration
|
||||||
|
|
||||||
So you've experimented with Cmder a little and want to give it a shot in a more permanent home;
|
So you've experimented with Cmder a little and want to give it a shot in a more permanent home;
|
||||||
|
|
||||||
@ -85,24 +114,50 @@ 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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Cmder Portable Shell User Config
|
### Changing Cmder Default 'cmd.exe' Shell Startup Behaviour Using Task Arguments
|
||||||
User specific configuration is possible using the cmder specific shell config files. Edit the below files to add your own configuration:
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
*Note: Pay attention to the quotes!*
|
||||||
|
|
||||||
|
```
|
||||||
|
cmd /s /k ""%ConEmuDir%\..\init.bat" [ADD ARGS HERE]"
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 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 |
|
||||||
|
|
||||||
|
### 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 |
|
| Shell | Cmder Portable User Config |
|
||||||
| ------------- |:-------------:|
|
| ------------- | ----------------------------------------- |
|
||||||
|Cmder|%CMDER_ROOT%\config\user-profile.cmd|
|
| Cmder | %CMDER_ROOT%\\config\\user-profile.cmd |
|
||||||
|PowerShell|$ENV:CMDER_ROOT\config\user-profile.ps1|
|
| PowerShell | $ENV:CMDER_ROOT\\config\\user-profile.ps1 |
|
||||||
| Bash/Mintty | $CMDER_ROOT/config/user-profile.sh |
|
| 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'.
|
||||||
|
|
||||||
### Linux like 'profile.d' support for all supported shell types.
|
|
||||||
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|
|
| Cmder | %CMDER_ROOT%\\config\\profile.d\\\*.bat and *.cmd |
|
||||||
|PowerShell|$ENV:CMDER_ROOT\config\profile.d\\*.ps1|
|
| PowerShell | $ENV:CMDER_ROOT\\config\\profile.d\\\*.ps1 |
|
||||||
| Bash/Mintty | $CMDER_ROOT/config/profile.d/*.sh |
|
| Bash/Mintty | $CMDER_ROOT/config/profile.d/*.sh |
|
||||||
|
|
||||||
|
|
||||||
@ -147,17 +202,23 @@ Note: These are loaded in this order by '$ENV:CMDER_ROOT\\vendor\\user-profile.p
|
|||||||
|
|
||||||
### SSH Agent
|
### SSH Agent
|
||||||
|
|
||||||
To start SSH agent simply call `start-ssh-agent`, which is in the `vendor/git-for-windows/cmd` folder.
|
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
|
||||||
|
|
||||||
|
Cmder is by default shipped with a vendored Git installation. On each instance of launching Cmder, an attempt is made to locate any other user provided Git binaries. Upon finding a `git.exe` binary, Cmder further compares its version against the vendored one _by executing_ it. The vendored `git.exe` binary is _only_ used when it is more recent than the user-installed one.
|
||||||
|
|
||||||
|
You may use your favorite version of Git by including its path in the `%PATH%` enviroment variable. Moreover, the **Mini** edition of Cmder (found on the [downloads page](https://github.com/cmderdev/cmder/releases)) excludes any vendored Git binaries.
|
||||||
|
|
||||||
### Using external Cygwin/Babun, MSys2, or Git for Windows SDK with Cmder.
|
### Using external Cygwin/Babun, MSys2, or Git for Windows SDK with Cmder.
|
||||||
|
|
||||||
1. Setup a new task by pressing '<kbd>Win</kbd> +<kbd>Alt</kbd> + <kbd>T</kbd>'.
|
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. Click the '+' button to add a task.
|
||||||
1. Name the new task in the top text box.
|
1. Name the new task in the top text box.
|
||||||
1. Provide task parameters, this is optional.
|
1. Provide task parameters, this is optional.
|
||||||
1. Add ```cmd /c "[path_to_external_env]\bin\bash --login -i" -new_console:d:%USERPROFILE%``` 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:
|
Recommended Optional Steps:
|
||||||
|
|
||||||
@ -176,6 +237,34 @@ 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.
|
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Upgrading
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
## Current development builds
|
## Current development builds
|
||||||
|
|
||||||
You can download builds of the current development branch by going to AppVeyor via the following link:
|
You can download builds of the current development branch by going to AppVeyor via the following link:
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
|
|
||||||
if "%aliases%" == "" (
|
if "%ALIASES%" == "" (
|
||||||
set ALIASES=%CMDER_ROOT%\config\user-aliases.cmd
|
set ALIASES="%CMDER_ROOT%\config\user-aliases.cmd"
|
||||||
)
|
)
|
||||||
|
|
||||||
setlocal enabledelayedexpansion
|
setlocal enabledelayedexpansion
|
||||||
@ -21,7 +21,7 @@ goto parseargument
|
|||||||
set currentarg=%~1
|
set currentarg=%~1
|
||||||
|
|
||||||
if /i "%currentarg%" equ "/f" (
|
if /i "%currentarg%" equ "/f" (
|
||||||
set aliases=%~2
|
set ALIASES=%~2
|
||||||
shift
|
shift
|
||||||
goto :do_shift
|
goto :do_shift
|
||||||
) else if /i "%currentarg%" == "/reload" (
|
) else if /i "%currentarg%" == "/reload" (
|
||||||
@ -50,16 +50,16 @@ goto parseargument
|
|||||||
)
|
)
|
||||||
rem #endregion 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% =!
|
set _x=!_x:/f "%ALIASES%" =!
|
||||||
|
|
||||||
if not exist "%aliases%" (
|
if not exist "%ALIASES%" (
|
||||||
echo ;= @echo off>"%aliases%"
|
echo ;= @echo off>"%ALIASES%"
|
||||||
echo ;= rem Call DOSKEY and use this file as the macrofile>>"%aliases%"
|
echo ;= rem Call DOSKEY and use this file as the macrofile>>"%ALIASES%"
|
||||||
echo ;= %%SystemRoot%%\system32\doskey /listsize=1000 /macrofile=%%0%%>>"%aliases%"
|
echo ;= %%SystemRoot%%\system32\doskey /listsize=1000 /macrofile=%%0%%>>"%ALIASES%"
|
||||||
echo ;= rem In batch mode, jump to the end of the file>>"%aliases%"
|
echo ;= rem In batch mode, jump to the end of the file>>"%ALIASES%"
|
||||||
echo ;= goto:eof>>"%aliases%"
|
echo ;= goto:eof>>"%ALIASES%"
|
||||||
echo ;= Add aliases below here>>"%aliases%"
|
echo ;= Add aliases below here>>"%ALIASES%"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<key name="Software">
|
<key name="Software">
|
||||||
<key name="ConEmu">
|
<key name="ConEmu">
|
||||||
<key name=".Vanilla" modified="2015-11-24 14:43:35" build="151119">
|
<key name=".Vanilla" modified="2018-02-22 06:02:11" build="171109">
|
||||||
<value name="ColorTable00" type="dword" data="00222827"/>
|
<value name="ColorTable00" type="dword" data="00222827"/>
|
||||||
<value name="ColorTable01" type="dword" data="009e5401"/>
|
<value name="ColorTable01" type="dword" data="009e5401"/>
|
||||||
<value name="ColorTable02" type="dword" data="0004aa74"/>
|
<value name="ColorTable02" type="dword" data="0004aa74"/>
|
||||||
@ -101,12 +101,12 @@
|
|||||||
<value name="FontName" type="string" data="Consolas"/>
|
<value name="FontName" type="string" data="Consolas"/>
|
||||||
<value name="FontName2" type="string" data="Lucida Console"/>
|
<value name="FontName2" type="string" data="Lucida Console"/>
|
||||||
<value name="FontAutoSize" type="hex" data="00"/>
|
<value name="FontAutoSize" type="hex" data="00"/>
|
||||||
<value name="FontSize" type="dword" data="00000010"/>
|
<value name="FontSize" type="ulong" data="16"/>
|
||||||
<value name="FontSizeX" type="dword" data="00000000"/>
|
<value name="FontSizeX" type="ulong" data="0"/>
|
||||||
<value name="FontSizeX2" type="dword" data="00000000"/>
|
<value name="FontSizeX2" type="ulong" data="0"/>
|
||||||
<value name="FontSizeX3" type="dword" data="00000000"/>
|
<value name="FontSizeX3" type="ulong" data="0"/>
|
||||||
<value name="FontCharSet" type="hex" data="00"/>
|
<value name="FontCharSet" type="hex" data="00"/>
|
||||||
<value name="Anti-aliasing" type="dword" data="00000006"/>
|
<value name="Anti-aliasing" type="ulong" data="6"/>
|
||||||
<value name="FontBold" type="hex" data="00"/>
|
<value name="FontBold" type="hex" data="00"/>
|
||||||
<value name="FontItalic" type="hex" data="00"/>
|
<value name="FontItalic" type="hex" data="00"/>
|
||||||
<value name="Monospace" type="hex" data="01"/>
|
<value name="Monospace" type="hex" data="01"/>
|
||||||
@ -123,29 +123,29 @@
|
|||||||
<value name="ColorKeyTransparent" type="hex" data="00"/>
|
<value name="ColorKeyTransparent" type="hex" data="00"/>
|
||||||
<value name="ColorKeyValue" type="dword" data="00010101"/>
|
<value name="ColorKeyValue" type="dword" data="00010101"/>
|
||||||
<value name="UseCurrentSizePos" type="hex" data="01"/>
|
<value name="UseCurrentSizePos" type="hex" data="01"/>
|
||||||
<value name="WindowMode" type="dword" data="0000051f"/>
|
<value name="WindowMode" type="dword" data="00000520"/>
|
||||||
<value name="ConWnd Width" type="dword" data="00000078"/>
|
<value name="ConWnd Width" type="dword" data="00000078"/>
|
||||||
<value name="ConWnd Height" type="dword" data="0000001e"/>
|
<value name="ConWnd Height" type="dword" data="0000001e"/>
|
||||||
<value name="Cascaded" type="hex" data="01"/>
|
<value name="Cascaded" type="hex" data="01"/>
|
||||||
<value name="ConWnd X" type="dword" data="000001f4"/>
|
<value name="ConWnd X" type="long" data="500"/>
|
||||||
<value name="ConWnd Y" type="dword" data="000001f4"/>
|
<value name="ConWnd Y" type="long" data="500"/>
|
||||||
<value name="16bit Height" type="dword" data="00000000"/>
|
<value name="16bit Height" type="ulong" data="0"/>
|
||||||
<value name="AutoSaveSizePos" type="hex" data="01"/>
|
<value name="AutoSaveSizePos" type="hex" data="01"/>
|
||||||
<value name="IntegralSize" type="hex" data="00"/>
|
<value name="IntegralSize" type="hex" data="00"/>
|
||||||
<value name="QuakeStyle" type="hex" data="00"/>
|
<value name="QuakeStyle" type="hex" data="00"/>
|
||||||
<value name="QuakeAnimation" type="dword" data="0000012c"/>
|
<value name="QuakeAnimation" type="ulong" data="300"/>
|
||||||
<value name="HideCaption" type="hex" data="00"/>
|
<value name="HideCaption" type="hex" data="00"/>
|
||||||
<value name="HideChildCaption" type="hex" data="01"/>
|
<value name="HideChildCaption" type="hex" data="01"/>
|
||||||
<value name="FocusInChildWindows" type="hex" data="01"/>
|
<value name="FocusInChildWindows" type="hex" data="01"/>
|
||||||
<value name="HideCaptionAlways" type="hex" data="00"/>
|
<value name="HideCaptionAlways" type="hex" data="00"/>
|
||||||
<value name="HideCaptionAlwaysFrame" type="hex" data="00"/>
|
<value name="HideCaptionAlwaysFrame" type="hex" data="00"/>
|
||||||
<value name="HideCaptionAlwaysDelay" type="dword" data="000007d0"/>
|
<value name="HideCaptionAlwaysDelay" type="ulong" data="2000"/>
|
||||||
<value name="HideCaptionAlwaysDisappear" type="dword" data="000007d0"/>
|
<value name="HideCaptionAlwaysDisappear" type="ulong" data="2000"/>
|
||||||
<value name="DownShowHiddenMessage" type="hex" data="00"/>
|
<value name="DownShowHiddenMessage" type="hex" data="00"/>
|
||||||
<value name="ConsoleFontName" type="string" data="Lucida Console"/>
|
<value name="ConsoleFontName" type="string" data="Lucida Console"/>
|
||||||
<value name="ConsoleFontWidth" type="dword" data="00000003"/>
|
<value name="ConsoleFontWidth" type="long" data="3"/>
|
||||||
<value name="ConsoleFontHeight" type="dword" data="00000005"/>
|
<value name="ConsoleFontHeight" type="long" data="5"/>
|
||||||
<value name="DefaultBufferHeight" type="dword" data="000003e8"/>
|
<value name="DefaultBufferHeight" type="long" data="1000"/>
|
||||||
<value name="AutoBufferHeight" type="hex" data="01"/>
|
<value name="AutoBufferHeight" type="hex" data="01"/>
|
||||||
<value name="CmdOutputCP" type="dword" data="00000000"/>
|
<value name="CmdOutputCP" type="dword" data="00000000"/>
|
||||||
<value name="ComSpec.Type" type="hex" data="00"/>
|
<value name="ComSpec.Type" type="hex" data="00"/>
|
||||||
@ -167,7 +167,7 @@
|
|||||||
<value name="CTS.MBtnAction" type="hex" data="00"/>
|
<value name="CTS.MBtnAction" type="hex" data="00"/>
|
||||||
<value name="CTS.ColorIndex" type="hex" data="e0"/>
|
<value name="CTS.ColorIndex" type="hex" data="e0"/>
|
||||||
<value name="ClipboardConfirmEnter" type="hex" data="01"/>
|
<value name="ClipboardConfirmEnter" type="hex" data="01"/>
|
||||||
<value name="ClipboardConfirmLonger" type="dword" data="000000c8"/>
|
<value name="ClipboardConfirmLonger" type="ulong" data="200"/>
|
||||||
<value name="FarGotoEditorOpt" type="hex" data="01"/>
|
<value name="FarGotoEditorOpt" type="hex" data="01"/>
|
||||||
<value name="FarGotoEditorPath" type="string" data="far.exe /e%1:%2 "%3""/>
|
<value name="FarGotoEditorPath" type="string" data="far.exe /e%1:%2 "%3""/>
|
||||||
<value name="FixFarBorders" type="hex" data="01"/>
|
<value name="FixFarBorders" type="hex" data="01"/>
|
||||||
@ -198,7 +198,7 @@
|
|||||||
<value name="MouseSkipActivation" type="hex" data="01"/>
|
<value name="MouseSkipActivation" type="hex" data="01"/>
|
||||||
<value name="MouseSkipMoving" type="hex" data="01"/>
|
<value name="MouseSkipMoving" type="hex" data="01"/>
|
||||||
<value name="FarHourglass" type="hex" data="01"/>
|
<value name="FarHourglass" type="hex" data="01"/>
|
||||||
<value name="FarHourglassDelay" type="dword" data="000001f4"/>
|
<value name="FarHourglassDelay" type="ulong" data="500"/>
|
||||||
<value name="Dnd" type="hex" data="01"/>
|
<value name="Dnd" type="hex" data="01"/>
|
||||||
<value name="DndDrop" type="hex" data="01"/>
|
<value name="DndDrop" type="hex" data="01"/>
|
||||||
<value name="DefCopy" type="hex" data="01"/>
|
<value name="DefCopy" type="hex" data="01"/>
|
||||||
@ -212,8 +212,8 @@
|
|||||||
<value name="StatusBar.Show" type="hex" data="00"/>
|
<value name="StatusBar.Show" type="hex" data="00"/>
|
||||||
<value name="StatusBar.Flags" type="dword" data="00000002"/>
|
<value name="StatusBar.Flags" type="dword" data="00000002"/>
|
||||||
<value name="StatusFontFace" type="string" data="Tahoma"/>
|
<value name="StatusFontFace" type="string" data="Tahoma"/>
|
||||||
<value name="StatusFontCharSet" type="dword" data="00000000"/>
|
<value name="StatusFontCharSet" type="ulong" data="0"/>
|
||||||
<value name="StatusFontHeight" type="dword" data="0000000e"/>
|
<value name="StatusFontHeight" type="long" data="14"/>
|
||||||
<value name="StatusBar.Color.Back" type="dword" data="00404040"/>
|
<value name="StatusBar.Color.Back" type="dword" data="00404040"/>
|
||||||
<value name="StatusBar.Color.Light" type="dword" data="00ffffff"/>
|
<value name="StatusBar.Color.Light" type="dword" data="00ffffff"/>
|
||||||
<value name="StatusBar.Color.Dark" type="dword" data="00a0a0a0"/>
|
<value name="StatusBar.Color.Dark" type="dword" data="00a0a0a0"/>
|
||||||
@ -254,34 +254,34 @@
|
|||||||
<value name="TabSelf" type="hex" data="01"/>
|
<value name="TabSelf" type="hex" data="01"/>
|
||||||
<value name="TabLazy" type="hex" data="01"/>
|
<value name="TabLazy" type="hex" data="01"/>
|
||||||
<value name="TabRecent" type="hex" data="00"/>
|
<value name="TabRecent" type="hex" data="00"/>
|
||||||
<value name="TabDblClick" type="dword" data="00000001"/>
|
<value name="TabDblClick" type="ulong" data="1"/>
|
||||||
<value name="TabsOnTaskBar" type="hex" data="02"/>
|
<value name="TabsOnTaskBar" type="hex" data="02"/>
|
||||||
<value name="TaskBarOverlay" type="hex" data="01"/>
|
<value name="TaskBarOverlay" type="hex" data="01"/>
|
||||||
<value name="TabCloseMacro" type="string" data=""/>
|
<value name="TabCloseMacro" type="string" data=""/>
|
||||||
<value name="TabFontFace" type="string" data="Segoe UI"/>
|
<value name="TabFontFace" type="string" data="Segoe UI"/>
|
||||||
<value name="TabFontCharSet" type="dword" data="00000000"/>
|
<value name="TabFontCharSet" type="ulong" data="0"/>
|
||||||
<value name="TabFontHeight" type="dword" data="00000010"/>
|
<value name="TabFontHeight" type="long" data="16"/>
|
||||||
<value name="SaveAllEditors" type="string" data=""/>
|
<value name="SaveAllEditors" type="string" data=""/>
|
||||||
<value name="ToolbarAddSpace" type="dword" data="00000000"/>
|
<value name="ToolbarAddSpace" type="long" data="0"/>
|
||||||
<value name="TabConsole" type="string" data=" %n "/>
|
<value name="TabConsole" type="string" data=" %n "/>
|
||||||
<value name="TabSkipWords" type="string" data="Administrator:|Администратор:"/>
|
<value name="TabSkipWords" type="string" data="Administrator:|Администратор:"/>
|
||||||
<value name="TabPanels" type="string" data="<%c> %s"/>
|
<value name="TabPanels" type="string" data="<%c> %s"/>
|
||||||
<value name="TabEditor" type="string" data="<%c.%i>{%s}"/>
|
<value name="TabEditor" type="string" data="<%c.%i>{%s}"/>
|
||||||
<value name="TabEditorModified" type="string" data="<%c.%i>[%s] *"/>
|
<value name="TabEditorModified" type="string" data="<%c.%i>[%s] *"/>
|
||||||
<value name="TabViewer" type="string" data="<%c.%i>[%s]"/>
|
<value name="TabViewer" type="string" data="<%c.%i>[%s]"/>
|
||||||
<value name="TabLenMax" type="dword" data="00000014"/>
|
<value name="TabLenMax" type="ulong" data="20"/>
|
||||||
<value name="AdminTitleSuffix" type="string" data=" (Admin)"/>
|
<value name="AdminTitleSuffix" type="string" data=" (Admin)"/>
|
||||||
<value name="AdminShowShield" type="hex" data="01"/>
|
<value name="AdminShowShield" type="hex" data="01"/>
|
||||||
<value name="HideInactiveConsoleTabs" type="hex" data="00"/>
|
<value name="HideInactiveConsoleTabs" type="hex" data="00"/>
|
||||||
<value name="ShowFarWindows" type="hex" data="01"/>
|
<value name="ShowFarWindows" type="hex" data="01"/>
|
||||||
<value name="TryToCenter" type="hex" data="01"/>
|
<value name="TryToCenter" type="hex" data="01"/>
|
||||||
<value name="CenterConsolePad" type="dword" data="00000008"/>
|
<value name="CenterConsolePad" type="ulong" data="8"/>
|
||||||
<value name="ShowScrollbar" type="hex" data="02"/>
|
<value name="ShowScrollbar" type="hex" data="02"/>
|
||||||
<value name="ScrollBarAppearDelay" type="dword" data="00000064"/>
|
<value name="ScrollBarAppearDelay" type="ulong" data="100"/>
|
||||||
<value name="ScrollBarDisappearDelay" type="dword" data="000003e8"/>
|
<value name="ScrollBarDisappearDelay" type="ulong" data="1000"/>
|
||||||
<value name="IconID" type="dword" data="00000001"/>
|
<value name="IconID" type="ulong" data="1"/>
|
||||||
<value name="MainTimerElapse" type="dword" data="0000000a"/>
|
<value name="MainTimerElapse" type="ulong" data="10"/>
|
||||||
<value name="MainTimerInactiveElapse" type="dword" data="000003e8"/>
|
<value name="MainTimerInactiveElapse" type="ulong" data="1000"/>
|
||||||
<value name="AffinityMask" type="dword" data="00000000"/>
|
<value name="AffinityMask" type="dword" data="00000000"/>
|
||||||
<value name="SkipFocusEvents" type="hex" data="00"/>
|
<value name="SkipFocusEvents" type="hex" data="00"/>
|
||||||
<value name="MonitorConsoleLang" type="hex" data="03"/>
|
<value name="MonitorConsoleLang" type="hex" data="03"/>
|
||||||
@ -297,32 +297,32 @@
|
|||||||
<value name="FindMatchWholeWords" type="hex" data="00"/>
|
<value name="FindMatchWholeWords" type="hex" data="00"/>
|
||||||
<value name="FindTransparent" type="hex" data="01"/>
|
<value name="FindTransparent" type="hex" data="01"/>
|
||||||
<value name="PanView.BackColor" type="dword" data="30ffffff"/>
|
<value name="PanView.BackColor" type="dword" data="30ffffff"/>
|
||||||
<value name="PanView.PFrame" type="dword" data="00000001"/>
|
<value name="PanView.PFrame" type="long" data="1"/>
|
||||||
<value name="PanView.PFrameColor" type="dword" data="28808080"/>
|
<value name="PanView.PFrameColor" type="dword" data="28808080"/>
|
||||||
<value name="PanView.SFrame" type="dword" data="00000001"/>
|
<value name="PanView.SFrame" type="long" data="1"/>
|
||||||
<value name="PanView.SFrameColor" type="dword" data="07c0c0c0"/>
|
<value name="PanView.SFrameColor" type="dword" data="07c0c0c0"/>
|
||||||
<value name="PanView.Thumbs.ImgSize" type="dword" data="00000060"/>
|
<value name="PanView.Thumbs.ImgSize" type="long" data="96"/>
|
||||||
<value name="PanView.Thumbs.SpaceX1" type="dword" data="00000001"/>
|
<value name="PanView.Thumbs.SpaceX1" type="long" data="1"/>
|
||||||
<value name="PanView.Thumbs.SpaceY1" type="dword" data="00000001"/>
|
<value name="PanView.Thumbs.SpaceY1" type="long" data="1"/>
|
||||||
<value name="PanView.Thumbs.SpaceX2" type="dword" data="00000005"/>
|
<value name="PanView.Thumbs.SpaceX2" type="long" data="5"/>
|
||||||
<value name="PanView.Thumbs.SpaceY2" type="dword" data="00000014"/>
|
<value name="PanView.Thumbs.SpaceY2" type="long" data="20"/>
|
||||||
<value name="PanView.Thumbs.LabelSpacing" type="dword" data="00000002"/>
|
<value name="PanView.Thumbs.LabelSpacing" type="long" data="2"/>
|
||||||
<value name="PanView.Thumbs.LabelPadding" type="dword" data="00000000"/>
|
<value name="PanView.Thumbs.LabelPadding" type="long" data="0"/>
|
||||||
<value name="PanView.Thumbs.FontName" type="string" data="Tahoma"/>
|
<value name="PanView.Thumbs.FontName" type="string" data="Tahoma"/>
|
||||||
<value name="PanView.Thumbs.FontHeight" type="dword" data="0000000e"/>
|
<value name="PanView.Thumbs.FontHeight" type="long" data="14"/>
|
||||||
<value name="PanView.Tiles.ImgSize" type="dword" data="00000030"/>
|
<value name="PanView.Tiles.ImgSize" type="long" data="48"/>
|
||||||
<value name="PanView.Tiles.SpaceX1" type="dword" data="00000004"/>
|
<value name="PanView.Tiles.SpaceX1" type="long" data="4"/>
|
||||||
<value name="PanView.Tiles.SpaceY1" type="dword" data="00000004"/>
|
<value name="PanView.Tiles.SpaceY1" type="long" data="4"/>
|
||||||
<value name="PanView.Tiles.SpaceX2" type="dword" data="000000ac"/>
|
<value name="PanView.Tiles.SpaceX2" type="long" data="172"/>
|
||||||
<value name="PanView.Tiles.SpaceY2" type="dword" data="00000004"/>
|
<value name="PanView.Tiles.SpaceY2" type="long" data="4"/>
|
||||||
<value name="PanView.Tiles.LabelSpacing" type="dword" data="00000004"/>
|
<value name="PanView.Tiles.LabelSpacing" type="long" data="4"/>
|
||||||
<value name="PanView.Tiles.LabelPadding" type="dword" data="00000001"/>
|
<value name="PanView.Tiles.LabelPadding" type="long" data="1"/>
|
||||||
<value name="PanView.Tiles.FontName" type="string" data="Tahoma"/>
|
<value name="PanView.Tiles.FontName" type="string" data="Tahoma"/>
|
||||||
<value name="PanView.Tiles.FontHeight" type="dword" data="0000000e"/>
|
<value name="PanView.Tiles.FontHeight" type="long" data="14"/>
|
||||||
<value name="PanView.LoadPreviews" type="hex" data="03"/>
|
<value name="PanView.LoadPreviews" type="hex" data="03"/>
|
||||||
<value name="PanView.LoadFolders" type="hex" data="01"/>
|
<value name="PanView.LoadFolders" type="hex" data="01"/>
|
||||||
<value name="PanView.LoadTimeout" type="dword" data="0000000f"/>
|
<value name="PanView.LoadTimeout" type="ulong" data="15"/>
|
||||||
<value name="PanView.MaxZoom" type="dword" data="00000258"/>
|
<value name="PanView.MaxZoom" type="ulong" data="600"/>
|
||||||
<value name="PanView.UsePicView2" type="hex" data="01"/>
|
<value name="PanView.UsePicView2" type="hex" data="01"/>
|
||||||
<value name="PanView.RestoreOnStartup" type="hex" data="00"/>
|
<value name="PanView.RestoreOnStartup" type="hex" data="00"/>
|
||||||
<value name="Update.VerLocation" type="string" data=""/>
|
<value name="Update.VerLocation" type="string" data=""/>
|
||||||
@ -483,89 +483,89 @@
|
|||||||
<value name="DndLKey" type="hex" data="00"/>
|
<value name="DndLKey" type="hex" data="00"/>
|
||||||
<value name="DndRKey" type="hex" data="a2"/>
|
<value name="DndRKey" type="hex" data="a2"/>
|
||||||
<value name="WndDragKey" type="dword" data="00121101"/>
|
<value name="WndDragKey" type="dword" data="00121101"/>
|
||||||
<key name="Tasks" modified="2015-11-24 14:43:35" build="151119">
|
<key name="Tasks" modified="2018-02-22 06:02:12" build="171109">
|
||||||
<value name="Count" type="dword" data="00000008"/>
|
<value name="Count" type="long" data="8"/>
|
||||||
<key name="Task1" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task1" modified="2018-02-22 06:02:12" build="171109">
|
||||||
<value name="Name" type="string" data="{cmd::Cmder as Admin}"/>
|
<value name="Name" type="string" data="{cmd::Cmder as Admin}"/>
|
||||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<value name="Cmd1" type="string" data="*cmd /k "%ConEmuDir%\..\init.bat" -new_console:d:%USERPROFILE%"/>
|
<value name="Cmd1" type="string" data="*cmd /k ""%ConEmuDir%\..\init.bat" ""/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task2" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task2" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{cmd::Cmder}"/>
|
<value name="Name" type="string" data="{cmd::Cmder}"/>
|
||||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<value name="Cmd1" type="string" data="cmd /k "%ConEmuDir%\..\init.bat" -new_console:d:%USERPROFILE%"/>
|
<value name="Cmd1" type="string" data="cmd /k ""%ConEmuDir%\..\init.bat" ""/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task3" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task3" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{Powershell::PowerShell as Admin}"/>
|
<value name="Name" type="string" data="{Powershell::PowerShell as Admin}"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<value name="Cmd1" type="string" data="*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''" -new_console:d:"%USERPROFILE%""/>
|
<value name="Cmd1" type="string" data="*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''""/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task4" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task4" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{Powershell::Powershell}"/>
|
<value name="Name" type="string" data="{Powershell::Powershell}"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<value name="Cmd1" type="string" data="PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''" -new_console:d:"%USERPROFILE%""/>
|
<value name="Cmd1" type="string" data="PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''""/>
|
||||||
<value name="Cmd2" type="string" data="%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe"/>
|
<value name="Cmd2" type="string" data="%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe"/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task5" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task5" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{bash::mintty as Admin}"/>
|
<value name="Name" type="string" data="{bash::mintty as Admin}"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="GuiArgs" type="string" data="/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico""/>
|
<value name="GuiArgs" type="string" data="/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico""/>
|
||||||
<value name="Cmd1" type="string" data="*%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe /bin/bash -l -new_console:d:%USERPROFILE%"/>
|
<value name="Cmd1" type="string" data="*%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe /bin/bash -l"/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task6" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task6" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{bash::mintty}"/>
|
<value name="Name" type="string" data="{bash::mintty}"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="GuiArgs" type="string" data="/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico""/>
|
<value name="GuiArgs" type="string" data="/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico""/>
|
||||||
<value name="Cmd1" type="string" data="%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe /bin/bash -l -new_console:d:%userProfile%"/>
|
<value name="Cmd1" type="string" data="%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe /bin/bash -l"/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
<value name="Cmd2" type="string" data="%CMDER_ROOT%vendor\git-for-windows\usr\bin\mintty.exe /bin/bash -l -new_console:d:%userProfile%"/>
|
<value name="Cmd2" type="string" data="%CMDER_ROOT%vendor\git-for-windows\usr\bin\mintty.exe /bin/bash -l"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task7" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task7" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{bash::bash as Admin}"/>
|
<value name="Name" type="string" data="{bash::bash as Admin}"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
<value name="Cmd1" type="string" data="*cmd /c "%ConEmuDir%\..\git-for-windows\bin\bash" --login -i -new_console:d:%USERPROFILE%"/>
|
<value name="Cmd1" type="string" data="*cmd /c "%ConEmuDir%\..\git-for-windows\bin\bash --login -i""/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task8" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task8" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{bash::bash}"/>
|
<value name="Name" type="string" data="{bash::bash}"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<value name="Cmd1" type="string" data="cmd /c "%ConEmuDir%\..\git-for-windows\bin\bash" --login -i -new_console:d:%USERPROFILE%"/>
|
<value name="Cmd1" type="string" data="cmd /c "%ConEmuDir%\..\git-for-windows\bin\bash --login -i""/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
</key>
|
</key>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
<key name="Apps" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Apps" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Count" type="dword" data="00000000"/>
|
<value name="Count" type="long" data="0"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Colors" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Colors" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<key name="Palette1" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Palette1" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="Monokai"/>
|
<value name="Name" type="string" data="Monokai"/>
|
||||||
<value name="ExtendColors" type="hex" data="00"/>
|
<value name="ExtendColors" type="hex" data="00"/>
|
||||||
<value name="ExtendColorIdx" type="hex" data="0e"/>
|
<value name="ExtendColorIdx" type="hex" data="0e"/>
|
||||||
@ -606,11 +606,11 @@
|
|||||||
<value name="ColorTable30" type="dword" data="0000ffff"/>
|
<value name="ColorTable30" type="dword" data="0000ffff"/>
|
||||||
<value name="ColorTable31" type="dword" data="00ffffff"/>
|
<value name="ColorTable31" type="dword" data="00ffffff"/>
|
||||||
</key>
|
</key>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
</key>
|
</key>
|
||||||
<value name="OneTabPerGroup" type="hex" data="00"/>
|
<value name="OneTabPerGroup" type="hex" data="00"/>
|
||||||
<value name="ActivateSplitMouseOver" type="hex" data="01"/>
|
<value name="ActivateSplitMouseOver" type="hex" data="01"/>
|
||||||
<value name="TabBtnDblClick" type="dword" data="00000000"/>
|
<value name="TabBtnDblClick" type="ulong" data="0"/>
|
||||||
<value name="ConsoleExceptionHandler" type="hex" data="00"/>
|
<value name="ConsoleExceptionHandler" type="hex" data="00"/>
|
||||||
<value name="SaveCmdHistory" type="hex" data="00"/>
|
<value name="SaveCmdHistory" type="hex" data="00"/>
|
||||||
<value name="CTS.IBeam" type="hex" data="01"/>
|
<value name="CTS.IBeam" type="hex" data="01"/>
|
||||||
@ -664,9 +664,9 @@
|
|||||||
<value name="StatusBar.Hide.WVDC" type="hex" data="01"/>
|
<value name="StatusBar.Hide.WVDC" type="hex" data="01"/>
|
||||||
<value name="StatusBar.Hide.Zoom" type="hex" data="01"/>
|
<value name="StatusBar.Hide.Zoom" type="hex" data="01"/>
|
||||||
<value name="StatusBar.Hide.Dpi" type="hex" data="01"/>
|
<value name="StatusBar.Hide.Dpi" type="hex" data="01"/>
|
||||||
<value name="TabFlashChanged" type="dword" data="00000008"/>
|
<value name="TabFlashChanged" type="long" data="8"/>
|
||||||
<value name="TabModifiedSuffix" type="string" data="[*]"/>
|
<value name="TabModifiedSuffix" type="string" data="[*]"/>
|
||||||
<key name="HotKeys" modified="2015-11-24 14:43:35" build="151119">
|
<key name="HotKeys" modified="2018-02-22 06:02:12" build="171109">
|
||||||
<value name="KeyMacroVersion" type="hex" data="02"/>
|
<value name="KeyMacroVersion" type="hex" data="02"/>
|
||||||
<value name="Multi.Modifier" type="dword" data="00000011"/>
|
<value name="Multi.Modifier" type="dword" data="00000011"/>
|
||||||
<value name="Multi.ArrowsModifier" type="dword" data="0000005b"/>
|
<value name="Multi.ArrowsModifier" type="dword" data="0000005b"/>
|
||||||
@ -847,16 +847,51 @@
|
|||||||
<value name="Key.DebugProcess" type="dword" data="00105b44"/>
|
<value name="Key.DebugProcess" type="dword" data="00105b44"/>
|
||||||
<value name="Key.DumpProcess" type="dword" data="00000000"/>
|
<value name="Key.DumpProcess" type="dword" data="00000000"/>
|
||||||
<value name="Key.DumpTree" type="dword" data="00000000"/>
|
<value name="Key.DumpTree" type="dword" data="00000000"/>
|
||||||
|
<value name="Multi.SplitSwap" type="dword" data="00125d58"/>
|
||||||
|
<value name="Multi.SplitSwapU" type="dword" data="00125d26"/>
|
||||||
|
<value name="Multi.SplitSwapD" type="dword" data="00125d28"/>
|
||||||
|
<value name="Multi.SplitSwapL" type="dword" data="00125d25"/>
|
||||||
|
<value name="Multi.SplitSwapR" type="dword" data="00125d27"/>
|
||||||
|
<value name="Multi.GroupInputAll" type="dword" data="00105d47"/>
|
||||||
|
<value name="Multi.GroupInputKey" type="dword" data="00125d47"/>
|
||||||
|
<value name="Key.AltNumpad" type="dword" data="00000000"/>
|
||||||
|
<value name="Key.JumpActiveMonitor" type="dword" data="00000000"/>
|
||||||
|
<value name="Key.BufPrUp" type="dword" data="00121121"/>
|
||||||
|
<value name="Key.BufPrDn" type="dword" data="00121122"/>
|
||||||
|
<value name="Key.ResetTerm" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
<value name="StartCreateDelay" type="dword" data="00000064"/>
|
<value name="StartCreateDelay" type="ulong" data="100"/>
|
||||||
<value name="DefaultTerminalDebugLog" type="hex" data="00"/>
|
<value name="DefaultTerminalDebugLog" type="hex" data="00"/>
|
||||||
<value name="LastMonitor" type="string" data="0,0,1920,1020"/>
|
<value name="LastMonitor" type="string" data="0,0,1440,1050"/>
|
||||||
<value name="Restore2ActiveMon" type="hex" data="00"/>
|
<value name="Restore2ActiveMon" type="hex" data="00"/>
|
||||||
<value name="DownShowExOnTopMessage" type="hex" data="00"/>
|
<value name="DownShowExOnTopMessage" type="hex" data="00"/>
|
||||||
<value name="EnvironmentSet" type="multi"/>
|
<value name="EnvironmentSet" type="multi">
|
||||||
|
<line data="set PATH=%ConEmuBaseDir%\Scripts;%PATH%"/>
|
||||||
|
</value>
|
||||||
<value name="Update.InetTool" type="hex" data="00"/>
|
<value name="Update.InetTool" type="hex" data="00"/>
|
||||||
<value name="Update.InetToolCmd" type="string" data=""/>
|
<value name="Update.InetToolCmd" type="string" data=""/>
|
||||||
<value name="SuppressBells" type="hex" data="01"/>
|
<value name="SuppressBells" type="hex" data="01"/>
|
||||||
|
<value name="ClipboardAllLinesPosix" type="hex" data="00"/>
|
||||||
|
<value name="ClipboardFirstLinePosix" type="hex" data="00"/>
|
||||||
|
<value name="VividColors" type="hex" data="01"/>
|
||||||
|
<value name="AnsiExecution" type="hex" data="01"/>
|
||||||
|
<value name="AnsiAllowedCommands" type="multi">
|
||||||
|
<line data="cmd -cur_console:R /cGitShowBranch.cmd"/>
|
||||||
|
</value>
|
||||||
|
<value name="KillSshAgent" type="hex" data="01"/>
|
||||||
|
<value name="ProcessCtrlZ" type="hex" data="00"/>
|
||||||
|
<value name="JumpListAutoUpdate" type="hex" data="01"/>
|
||||||
|
<value name="CompressLongStrings" type="hex" data="01"/>
|
||||||
|
<value name="DynamicBufferHeight" type="hex" data="01"/>
|
||||||
|
<value name="CTS.ResetOnRelease" type="hex" data="00"/>
|
||||||
|
<value name="CTS.EraseBeforeReset" type="hex" data="01"/>
|
||||||
|
<value name="Anti-aliasing2" type="hex" data="00"/>
|
||||||
|
<value name="UseAltGrayPlus" type="hex" data="01"/>
|
||||||
|
<value name="MouseDragWindow" type="hex" data="01"/>
|
||||||
|
<value name="DebugLog" type="hex" data="00"/>
|
||||||
|
<value name="StatusBar.Hide.TMode" type="hex" data="01"/>
|
||||||
|
<value name="StatusBar.Hide.RMode" type="hex" data="01"/>
|
||||||
|
<value name="StatusBar.Hide.CellI" type="hex" data="01"/>
|
||||||
</key>
|
</key>
|
||||||
</key>
|
</key>
|
||||||
</key>
|
</key>
|
||||||
|
@ -60,6 +60,9 @@
|
|||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
</Link>
|
</Link>
|
||||||
|
<ResourceCompile>
|
||||||
|
<PreprocessorDefinitions>_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
|
@ -3,7 +3,10 @@
|
|||||||
#include <Shlwapi.h>
|
#include <Shlwapi.h>
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <shlobj.h>
|
||||||
|
|
||||||
|
#include <regex>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#pragma comment(lib, "Shlwapi.lib")
|
#pragma comment(lib, "Shlwapi.lib")
|
||||||
|
|
||||||
@ -54,34 +57,6 @@ typedef struct _option
|
|||||||
|
|
||||||
typedef std::pair<std::wstring, std::wstring> optpair;
|
typedef std::pair<std::wstring, std::wstring> optpair;
|
||||||
|
|
||||||
|
|
||||||
optpair GetOption()
|
|
||||||
{
|
|
||||||
wchar_t * cmd = GetCommandLine();
|
|
||||||
int argc;
|
|
||||||
wchar_t ** argv = CommandLineToArgvW(cmd, &argc);
|
|
||||||
optpair pair;
|
|
||||||
|
|
||||||
if (argc == 1)
|
|
||||||
{
|
|
||||||
// no commandline argument...
|
|
||||||
pair = optpair(L"/START", L"");
|
|
||||||
}
|
|
||||||
else if (argc == 2 && argv[1][0] != L'/')
|
|
||||||
{
|
|
||||||
// only a single argument: this should be a path...
|
|
||||||
pair = optpair(L"/START", argv[1]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pair = optpair(argv[1], argc > 2 ? argv[2] : L"");
|
|
||||||
}
|
|
||||||
|
|
||||||
LocalFree(argv);
|
|
||||||
|
|
||||||
return pair;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool FileExists(const wchar_t * filePath)
|
bool FileExists(const wchar_t * filePath)
|
||||||
{
|
{
|
||||||
HANDLE hFile = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
|
HANDLE hFile = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
|
||||||
@ -95,7 +70,7 @@ bool FileExists(const wchar_t * filePath)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartCmder(std::wstring path, bool is_single_mode, std::wstring taskName = L"")
|
void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstring taskName = L"", std::wstring cfgRoot = L"")
|
||||||
{
|
{
|
||||||
#if USE_TASKBAR_API
|
#if USE_TASKBAR_API
|
||||||
wchar_t appId[MAX_PATH] = { 0 };
|
wchar_t appId[MAX_PATH] = { 0 };
|
||||||
@ -106,10 +81,20 @@ void StartCmder(std::wstring path, bool is_single_mode, std::wstring taskName =
|
|||||||
wchar_t backupCfgPath[MAX_PATH] = { 0 };
|
wchar_t backupCfgPath[MAX_PATH] = { 0 };
|
||||||
wchar_t cpuCfgPath[MAX_PATH] = { 0 };
|
wchar_t cpuCfgPath[MAX_PATH] = { 0 };
|
||||||
wchar_t userCfgPath[MAX_PATH] = { 0 };
|
wchar_t userCfgPath[MAX_PATH] = { 0 };
|
||||||
wchar_t oldCfgPath[MAX_PATH] = { 0 };
|
wchar_t defaultCfgPath[MAX_PATH] = { 0 };
|
||||||
wchar_t conEmuPath[MAX_PATH] = { 0 };
|
wchar_t conEmuPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t configDirPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t userConfigDirPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t userBinDirPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t userProfiledDirPath[MAX_PATH] = { 0 };
|
||||||
wchar_t args[MAX_PATH * 2 + 256] = { 0 };
|
wchar_t args[MAX_PATH * 2 + 256] = { 0 };
|
||||||
|
|
||||||
|
std::wstring cmderStart = path;
|
||||||
|
std::wstring cmderTask = taskName;
|
||||||
|
|
||||||
|
std::copy(cfgRoot.begin(), cfgRoot.end(), userConfigDirPath);
|
||||||
|
userConfigDirPath[cfgRoot.length()] = 0;
|
||||||
|
|
||||||
GetModuleFileName(NULL, exeDir, sizeof(exeDir));
|
GetModuleFileName(NULL, exeDir, sizeof(exeDir));
|
||||||
|
|
||||||
#if USE_TASKBAR_API
|
#if USE_TASKBAR_API
|
||||||
@ -120,28 +105,103 @@ void StartCmder(std::wstring path, bool is_single_mode, std::wstring taskName =
|
|||||||
|
|
||||||
PathCombine(icoPath, exeDir, L"icons\\cmder.ico");
|
PathCombine(icoPath, exeDir, L"icons\\cmder.ico");
|
||||||
|
|
||||||
// Check for machine-specific then user config source file.
|
PathCombine(configDirPath, exeDir, L"config");
|
||||||
PathCombine(cpuCfgPath, exeDir, L"config\\ConEmu-%COMPUTERNAME%.xml");
|
if (wcscmp(userConfigDirPath, L"") == 0)
|
||||||
ExpandEnvironmentStrings(cpuCfgPath, cpuCfgPath, sizeof(cpuCfgPath) / sizeof(cpuCfgPath[0]));
|
{
|
||||||
|
PathCombine(userConfigDirPath, exeDir, L"config");
|
||||||
PathCombine(userCfgPath, exeDir, L"config\\user-ConEmu.xml");
|
|
||||||
|
|
||||||
if (PathFileExists(cpuCfgPath)) {
|
|
||||||
wcsncpy_s(oldCfgPath, cpuCfgPath, sizeof(cpuCfgPath));
|
|
||||||
wcsncpy_s(backupCfgPath, cpuCfgPath, sizeof(cpuCfgPath));
|
|
||||||
}
|
}
|
||||||
else if (PathFileExists(userCfgPath)) {
|
else
|
||||||
wcsncpy_s(oldCfgPath, userCfgPath,sizeof(userCfgPath));
|
{
|
||||||
wcsncpy_s(backupCfgPath, userCfgPath, sizeof(userCfgPath));
|
PathCombine(userBinDirPath, userConfigDirPath, L"bin");
|
||||||
}
|
SHCreateDirectoryEx(0, userBinDirPath, 0);
|
||||||
else {
|
|
||||||
PathCombine(oldCfgPath, exeDir, L"config\\ConEmu.xml");
|
PathCombine(userConfigDirPath, userConfigDirPath, L"config");
|
||||||
wcsncpy_s(backupCfgPath, userCfgPath, sizeof(userCfgPath));
|
SHCreateDirectoryEx(0, userConfigDirPath, 0);
|
||||||
|
|
||||||
|
PathCombine(userProfiledDirPath, userConfigDirPath, L"profile.d");
|
||||||
|
SHCreateDirectoryEx(0, userProfiledDirPath, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set path to vendored ConEmu config file
|
// Set path to vendored ConEmu config file
|
||||||
PathCombine(cfgPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.xml");
|
PathCombine(cfgPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.xml");
|
||||||
|
|
||||||
|
// Set path to Cmder default ConEmu config file
|
||||||
|
PathCombine(defaultCfgPath, exeDir, L"config\\ConEmu.xml");
|
||||||
|
|
||||||
|
// Check for machine-specific then user config source file.
|
||||||
|
PathCombine(cpuCfgPath, userConfigDirPath, L"ConEmu-%COMPUTERNAME%.xml");
|
||||||
|
ExpandEnvironmentStrings(cpuCfgPath, cpuCfgPath, sizeof(cpuCfgPath) / sizeof(cpuCfgPath[0]));
|
||||||
|
|
||||||
|
PathCombine(userCfgPath, userConfigDirPath, L"user-ConEmu.xml");
|
||||||
|
|
||||||
|
if (PathFileExists(cpuCfgPath)) {
|
||||||
|
if (PathFileExists(cfgPath)) {
|
||||||
|
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);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (PathFileExists(userCfgPath)) {
|
||||||
|
if (PathFileExists(cfgPath)) {
|
||||||
|
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);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (PathFileExists(cfgPath)) {
|
||||||
|
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);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!CopyFile(defaultCfgPath, cfgPath, FALSE))
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SYSTEM_INFO sysInfo;
|
SYSTEM_INFO sysInfo;
|
||||||
GetNativeSystemInfo(&sysInfo);
|
GetNativeSystemInfo(&sysInfo);
|
||||||
if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
|
if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
|
||||||
@ -151,50 +211,44 @@ void StartCmder(std::wstring path, bool is_single_mode, std::wstring taskName =
|
|||||||
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.exe");
|
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.exe");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FileExists(oldCfgPath) && !FileExists(cfgPath))
|
if (streqi(cmderStart.c_str(), L""))
|
||||||
{
|
{
|
||||||
if (!CopyFile(oldCfgPath, cfgPath, FALSE))
|
TCHAR buff[MAX_PATH];
|
||||||
{
|
const DWORD ret = GetEnvironmentVariable(L"USERPROFILE", buff, MAX_PATH);
|
||||||
MessageBox(NULL,
|
cmderStart = buff;
|
||||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
|
||||||
? L"Failed to copy ConEmu.xml file to new location! Restart cmder as administrator."
|
|
||||||
: L"Failed to copy ConEmu.xml file to new location!", MB_TITLE, MB_ICONSTOP);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (!CopyFile(cfgPath, backupCfgPath, FALSE))
|
|
||||||
{
|
|
||||||
MessageBox(NULL,
|
|
||||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
|
||||||
? L"Failed to backup ConEmu.xml file to ./config folder!"
|
|
||||||
: L"Failed to backup ConEmu.xml file to ./config folder!", MB_TITLE, MB_ICONSTOP);
|
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_single_mode)
|
if (is_single_mode)
|
||||||
{
|
{
|
||||||
swprintf_s(args, L"/single /Icon \"%s\" /Title Cmder", icoPath);
|
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 {
|
||||||
|
swprintf_s(args, L"%s /single /Icon \"%s\" /Title Cmder /dir \"%s\"", args, icoPath, cmderStart.c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
swprintf_s(args, L"/Icon \"%s\" /Title Cmder", icoPath);
|
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 {
|
||||||
|
swprintf_s(args, L"%s /Icon \"%s\" /Title Cmder /dir \"%s\"", args, icoPath, cmderStart.c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!taskName.empty()) {
|
|
||||||
swprintf_s(args, L"%s /run {%s}", args, taskName.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
||||||
if (!streqi(path.c_str(), L""))
|
if (wcscmp(userConfigDirPath, configDirPath) != 0)
|
||||||
{
|
{
|
||||||
if (!SetEnvironmentVariable(L"CMDER_START", path.c_str())) {
|
SetEnvironmentVariable(L"CMDER_USER_CONFIG", userConfigDirPath);
|
||||||
MessageBox(NULL, _T("Error trying to set CMDER_START to given path!"), _T("Error"), MB_OK);
|
SetEnvironmentVariable(L"CMDER_USER_BIN", userBinDirPath);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure EnvironmentVariables are propagated.
|
// Ensure EnvironmentVariables are propagated.
|
||||||
|
|
||||||
|
|
||||||
STARTUPINFO si = { 0 };
|
STARTUPINFO si = { 0 };
|
||||||
|
|
||||||
si.cb = sizeof(STARTUPINFO);
|
si.cb = sizeof(STARTUPINFO);
|
||||||
#if USE_TASKBAR_API
|
#if USE_TASKBAR_API
|
||||||
si.lpTitle = appId;
|
si.lpTitle = appId;
|
||||||
@ -202,13 +256,12 @@ void StartCmder(std::wstring path, bool is_single_mode, std::wstring taskName =
|
|||||||
#endif
|
#endif
|
||||||
PROCESS_INFORMATION pi;
|
PROCESS_INFORMATION pi;
|
||||||
if (!CreateProcess(conEmuPath, args, NULL, NULL, false, 0, NULL, NULL, &si, &pi)) {
|
if (!CreateProcess(conEmuPath, args, NULL, NULL, false, 0, NULL, NULL, &si, &pi)) {
|
||||||
MessageBox(NULL, _T("Unable to create the ConEmu Process!"), _T("Error"), MB_OK);
|
MessageBox(NULL, _T("Unable to create the ConEmu process!"), _T("Error"), MB_OK);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL);
|
LRESULT lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL);
|
||||||
lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)L"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL); // For Windows >= 8
|
lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)L"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL); // For Windows >= 8
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsUserOnly(std::wstring opt)
|
bool IsUserOnly(std::wstring opt)
|
||||||
@ -238,8 +291,7 @@ HKEY GetRootKey(std::wstring opt)
|
|||||||
|
|
||||||
if (IsUserOnly(opt))
|
if (IsUserOnly(opt))
|
||||||
{
|
{
|
||||||
FAIL_ON_ERROR(RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\Classes", 0, NULL,
|
FAIL_ON_ERROR(RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\Classes", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &root, NULL));
|
||||||
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &root, NULL));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -267,13 +319,10 @@ void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
|||||||
PathCombine(icoPath, exePath, L"icons\\cmder.ico");
|
PathCombine(icoPath, exePath, L"icons\\cmder.ico");
|
||||||
|
|
||||||
// Now set the registry keys
|
// Now set the registry keys
|
||||||
|
|
||||||
HKEY root = GetRootKey(opt);
|
HKEY root = GetRootKey(opt);
|
||||||
|
|
||||||
HKEY cmderKey;
|
HKEY cmderKey;
|
||||||
FAIL_ON_ERROR(
|
FAIL_ON_ERROR(RegCreateKeyEx(root, keyBaseName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
||||||
RegCreateKeyEx(root, keyBaseName, 0, NULL,
|
|
||||||
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
|
||||||
|
|
||||||
FAIL_ON_ERROR(RegSetValue(cmderKey, L"", REG_SZ, L"Cmder Here", NULL));
|
FAIL_ON_ERROR(RegSetValue(cmderKey, L"", REG_SZ, L"Cmder Here", NULL));
|
||||||
FAIL_ON_ERROR(RegSetValueEx(cmderKey, L"NoWorkingDirectory", 0, REG_SZ, (BYTE *)L"", 2));
|
FAIL_ON_ERROR(RegSetValueEx(cmderKey, L"NoWorkingDirectory", 0, REG_SZ, (BYTE *)L"", 2));
|
||||||
@ -281,9 +330,7 @@ void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
|||||||
FAIL_ON_ERROR(RegSetValueEx(cmderKey, L"Icon", 0, REG_SZ, (BYTE *)icoPath, wcslen(icoPath) * sizeof(wchar_t)));
|
FAIL_ON_ERROR(RegSetValueEx(cmderKey, L"Icon", 0, REG_SZ, (BYTE *)icoPath, wcslen(icoPath) * sizeof(wchar_t)));
|
||||||
|
|
||||||
HKEY command;
|
HKEY command;
|
||||||
FAIL_ON_ERROR(
|
FAIL_ON_ERROR(RegCreateKeyEx(cmderKey, L"command", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &command, NULL));
|
||||||
RegCreateKeyEx(cmderKey, L"command", 0, NULL,
|
|
||||||
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &command, NULL));
|
|
||||||
|
|
||||||
FAIL_ON_ERROR(RegSetValue(command, L"", REG_SZ, commandStr, NULL));
|
FAIL_ON_ERROR(RegSetValue(command, L"", REG_SZ, commandStr, NULL));
|
||||||
|
|
||||||
@ -296,9 +343,7 @@ void UnregisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
|||||||
{
|
{
|
||||||
HKEY root = GetRootKey(opt);
|
HKEY root = GetRootKey(opt);
|
||||||
HKEY cmderKey;
|
HKEY cmderKey;
|
||||||
FAIL_ON_ERROR(
|
FAIL_ON_ERROR(RegCreateKeyEx(root, keyBaseName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
||||||
RegCreateKeyEx(root, keyBaseName, 0, NULL,
|
|
||||||
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
|
||||||
#if XP
|
#if XP
|
||||||
FAIL_ON_ERROR(SHDeleteKey(cmderKey, NULL));
|
FAIL_ON_ERROR(SHDeleteKey(cmderKey, NULL));
|
||||||
#else
|
#else
|
||||||
@ -308,6 +353,106 @@ void UnregisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
|||||||
RegCloseKey(root);
|
RegCloseKey(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct cmderOptions
|
||||||
|
{
|
||||||
|
std::wstring cmderCfgRoot = L"";
|
||||||
|
std::wstring cmderStart = L"";
|
||||||
|
std::wstring cmderTask = L"";
|
||||||
|
std::wstring cmderRegScope = L"USER";
|
||||||
|
bool cmderSingle = false;
|
||||||
|
bool registerApp = false;
|
||||||
|
bool unRegisterApp = false;
|
||||||
|
bool error = false;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
cmderOptions GetOption()
|
||||||
|
{
|
||||||
|
cmderOptions cmderOptions;
|
||||||
|
LPWSTR *szArgList;
|
||||||
|
int argCount;
|
||||||
|
|
||||||
|
szArgList = CommandLineToArgvW(GetCommandLine(), &argCount);
|
||||||
|
|
||||||
|
for (int i = 1; i < argCount; i++)
|
||||||
|
{
|
||||||
|
// MessageBox(NULL, szArgList[i], L"Arglist contents", MB_OK);
|
||||||
|
|
||||||
|
if (_wcsicmp(L"/c", szArgList[i]) == 0)
|
||||||
|
{
|
||||||
|
TCHAR userProfile[MAX_PATH];
|
||||||
|
const DWORD ret = GetEnvironmentVariable(L"USERPROFILE", userProfile, MAX_PATH);
|
||||||
|
|
||||||
|
wchar_t cmderCfgRoot[MAX_PATH] = { 0 };
|
||||||
|
PathCombine(cmderCfgRoot, userProfile, L"cmder_cfg");
|
||||||
|
|
||||||
|
cmderOptions.cmderCfgRoot = cmderCfgRoot;
|
||||||
|
|
||||||
|
if (szArgList[i + 1] != NULL && szArgList[i + 1][0] != '/') {
|
||||||
|
cmderOptions.cmderCfgRoot = szArgList[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (_wcsicmp(L"/start", szArgList[i]) == 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 if (_wcsicmp(L"/task", szArgList[i]) == 0)
|
||||||
|
{
|
||||||
|
cmderOptions.cmderTask = szArgList[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else if (_wcsicmp(L"/single", szArgList[i]) == 0)
|
||||||
|
{
|
||||||
|
cmderOptions.cmderSingle = true;
|
||||||
|
}
|
||||||
|
else if (_wcsicmp(L"/register", szArgList[i]) == 0)
|
||||||
|
{
|
||||||
|
cmderOptions.registerApp = true;
|
||||||
|
cmderOptions.unRegisterApp = false;
|
||||||
|
if (szArgList[i + 1] != NULL)
|
||||||
|
{
|
||||||
|
if (_wcsicmp(L"all", szArgList[i + 1]) == 0 || _wcsicmp(L"user", szArgList[i + 1]) == 0)
|
||||||
|
{
|
||||||
|
cmderOptions.cmderRegScope = szArgList[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (_wcsicmp(L"/unregister", szArgList[i]) == 0)
|
||||||
|
{
|
||||||
|
cmderOptions.unRegisterApp = true;
|
||||||
|
cmderOptions.registerApp = false;
|
||||||
|
if (szArgList[i + 1] != NULL)
|
||||||
|
{
|
||||||
|
if (_wcsicmp(L"all", szArgList[i + 1]) == 0 || _wcsicmp(L"user", szArgList[i + 1]) == 0)
|
||||||
|
{
|
||||||
|
cmderOptions.cmderRegScope = szArgList[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (cmderOptions.cmderStart == L"" && PathFileExists(szArgList[i]))
|
||||||
|
{
|
||||||
|
cmderOptions.cmderStart = szArgList[i];
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalFree(szArgList);
|
||||||
|
|
||||||
|
return cmderOptions;
|
||||||
|
}
|
||||||
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
||||||
_In_opt_ HINSTANCE hPrevInstance,
|
_In_opt_ HINSTANCE hPrevInstance,
|
||||||
_In_ LPTSTR lpCmdLine,
|
_In_ LPTSTR lpCmdLine,
|
||||||
@ -317,34 +462,24 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
|||||||
UNREFERENCED_PARAMETER(lpCmdLine);
|
UNREFERENCED_PARAMETER(lpCmdLine);
|
||||||
UNREFERENCED_PARAMETER(nCmdShow);
|
UNREFERENCED_PARAMETER(nCmdShow);
|
||||||
|
|
||||||
optpair opt = GetOption();
|
cmderOptions cmderOptions = GetOption();
|
||||||
|
|
||||||
if (streqi(opt.first.c_str(), L"/START"))
|
if (cmderOptions.registerApp == true ) {
|
||||||
{
|
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
|
||||||
StartCmder(opt.second, false);
|
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM);
|
||||||
}
|
}
|
||||||
else if (streqi(opt.first.c_str(), L"/SINGLE"))
|
else if (cmderOptions.unRegisterApp == true )
|
||||||
{
|
{
|
||||||
StartCmder(opt.second, true);
|
UnregisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
|
||||||
|
UnregisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM);
|
||||||
}
|
}
|
||||||
else if (streqi(opt.first.c_str(), L"/TASK"))
|
else if (cmderOptions.error == true)
|
||||||
{
|
{
|
||||||
StartCmder(L"", false, opt.second);
|
return 1;
|
||||||
}
|
|
||||||
else if (streqi(opt.first.c_str(), L"/REGISTER"))
|
|
||||||
{
|
|
||||||
RegisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
|
|
||||||
RegisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_LISTITEM);
|
|
||||||
}
|
|
||||||
else if (streqi(opt.first.c_str(), L"/UNREGISTER"))
|
|
||||||
{
|
|
||||||
UnregisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
|
|
||||||
UnregisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_LISTITEM);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MessageBox(NULL, L"Unrecognized parameter.\n\nValid options:\n /START <path>\n /SINGLE <path>\n /TASK <name>\n /REGISTER [USER/ALL]\n /UNREGISTER [USER/ALL]", MB_TITLE, MB_OK);
|
StartCmder(cmderOptions.cmderStart, cmderOptions.cmderSingle, cmderOptions.cmderTask, cmderOptions.cmderCfgRoot);
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Binary file not shown.
Binary file not shown.
201
vendor/clink.lua
vendored
201
vendor/clink.lua
vendored
@ -3,6 +3,7 @@
|
|||||||
-- !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
-- !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||||
-- !!! Use "%CMDER_ROOT%\config\<whatever>.lua" to add your lua startup scripts
|
-- !!! Use "%CMDER_ROOT%\config\<whatever>.lua" to add your lua startup scripts
|
||||||
|
|
||||||
|
-- luacheck: globals clink
|
||||||
|
|
||||||
-- At first, load the original clink.lua file
|
-- At first, load the original clink.lua file
|
||||||
-- this is needed as we set the script path to this dir and therefore the original
|
-- this is needed as we set the script path to this dir and therefore the original
|
||||||
@ -17,7 +18,7 @@ dofile(clink_lua_file)
|
|||||||
-- not destroy our own prompt. It also means that started cmds (or batch files
|
-- not destroy our own prompt. It also means that started cmds (or batch files
|
||||||
-- which echo) don't get the ugly '{lamb}' shown.
|
-- which echo) don't get the ugly '{lamb}' shown.
|
||||||
---
|
---
|
||||||
function set_prompt_filter()
|
local function set_prompt_filter()
|
||||||
-- get_cwd() is differently encoded than the clink.prompt.value, so everything other than
|
-- get_cwd() is differently encoded than the clink.prompt.value, so everything other than
|
||||||
-- pure ASCII will get garbled. So try to parse the current directory from the original prompt
|
-- pure ASCII will get garbled. So try to parse the current directory from the original prompt
|
||||||
-- and only if that doesn't work, use get_cwd() directly.
|
-- and only if that doesn't work, use get_cwd() directly.
|
||||||
@ -38,12 +39,11 @@ function set_prompt_filter()
|
|||||||
-- build our own prompt
|
-- build our own prompt
|
||||||
-- orig: $E[1;32;40m$P$S{git}{hg}$S$_$E[1;30;40m{lamb}$S$E[0m
|
-- orig: $E[1;32;40m$P$S{git}{hg}$S$_$E[1;30;40m{lamb}$S$E[0m
|
||||||
-- color codes: "\x1b[1;37;40m"
|
-- color codes: "\x1b[1;37;40m"
|
||||||
local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;30;40m{lamb} \x1b[0m"
|
local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;39;40m{lamb} \x1b[0m"
|
||||||
|
local lambda = "λ"
|
||||||
cmder_prompt = string.gsub(cmder_prompt, "{cwd}", cwd)
|
cmder_prompt = string.gsub(cmder_prompt, "{cwd}", cwd)
|
||||||
if env == nil then
|
if env ~= nil then
|
||||||
lambda = "λ"
|
lambda = "("..env..") "..lambda
|
||||||
else
|
|
||||||
lambda = "("..env..") λ"
|
|
||||||
end
|
end
|
||||||
clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", lambda)
|
clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", lambda)
|
||||||
end
|
end
|
||||||
@ -99,24 +99,6 @@ local function get_dir_contains(path, dirname)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_hg_dir(path)
|
|
||||||
return get_dir_contains(path, '.hg')
|
|
||||||
end
|
|
||||||
|
|
||||||
local function get_svn_dir(path)
|
|
||||||
return get_dir_contains(path, '.svn')
|
|
||||||
end
|
|
||||||
function get_svn_branch(svn_dir)
|
|
||||||
for line in io.popen("svn info 2>nul"):lines() do
|
|
||||||
local m = line:match("^Relative URL:")
|
|
||||||
if m then
|
|
||||||
return line:sub(line:find("/")+1,line:len())
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
-- adapted from from clink-completions' git.lua
|
-- adapted from from clink-completions' git.lua
|
||||||
local function get_git_dir(path)
|
local function get_git_dir(path)
|
||||||
|
|
||||||
@ -127,6 +109,7 @@ local function get_git_dir(path)
|
|||||||
if i then
|
if i then
|
||||||
prefix = path:sub(1, i-1)
|
prefix = path:sub(1, i-1)
|
||||||
end
|
end
|
||||||
|
|
||||||
return prefix
|
return prefix
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -158,74 +141,20 @@ local function get_git_dir(path)
|
|||||||
or (parent_path ~= path and get_git_dir(parent_path) or nil)
|
or (parent_path ~= path and get_git_dir(parent_path) or nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
---
|
local function get_hg_dir(path)
|
||||||
-- Find out current branch
|
return get_dir_contains(path, '.hg')
|
||||||
-- @return {false|mercurial branch name}
|
|
||||||
---
|
|
||||||
function get_hg_branch()
|
|
||||||
for line in io.popen("hg branch 2>nul"):lines() do
|
|
||||||
local m = line:match("(.+)$")
|
|
||||||
if m then
|
|
||||||
return m
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return false
|
local function get_svn_dir(path)
|
||||||
end
|
return get_dir_contains(path, '.svn')
|
||||||
|
|
||||||
---
|
|
||||||
-- Get the status of working dir
|
|
||||||
-- @return {bool}
|
|
||||||
---
|
|
||||||
function get_hg_status()
|
|
||||||
for line in io.popen("hg status -0"):lines() do
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
function get_svn_status()
|
|
||||||
for line in io.popen("svn status -q"):lines() do
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
function hg_prompt_filter()
|
|
||||||
|
|
||||||
-- Colors for mercurial status
|
|
||||||
local colors = {
|
|
||||||
clean = "\x1b[1;37;40m",
|
|
||||||
dirty = "\x1b[31;1m",
|
|
||||||
}
|
|
||||||
|
|
||||||
if get_hg_dir() then
|
|
||||||
-- if we're inside of mercurial repo then try to detect current branch
|
|
||||||
local branch = get_hg_branch()
|
|
||||||
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
|
|
||||||
end
|
|
||||||
|
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", color.."("..branch..")")
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- No mercurial present or not in mercurial file
|
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", "")
|
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Find out current branch
|
-- Find out current branch
|
||||||
-- @return {nil|git branch name}
|
-- @return {nil|git branch name}
|
||||||
---
|
---
|
||||||
function get_git_branch(git_dir)
|
local function get_git_branch(git_dir)
|
||||||
local git_dir = git_dir or get_git_dir()
|
git_dir = git_dir or get_git_dir()
|
||||||
|
|
||||||
-- If git directory not found then we're probably outside of repo
|
-- If git directory not found then we're probably outside of repo
|
||||||
-- or something went wrong. The same is when head_file is nil
|
-- or something went wrong. The same is when head_file is nil
|
||||||
@ -238,24 +167,86 @@ function get_git_branch(git_dir)
|
|||||||
-- if HEAD matches branch expression, then we're on named branch
|
-- if HEAD matches branch expression, then we're on named branch
|
||||||
-- otherwise it is a detached commit
|
-- otherwise it is a detached commit
|
||||||
local branch_name = HEAD:match('ref: refs/heads/(.+)')
|
local branch_name = HEAD:match('ref: refs/heads/(.+)')
|
||||||
|
|
||||||
return branch_name or 'HEAD detached at '..HEAD:sub(1, 7)
|
return branch_name or 'HEAD detached at '..HEAD:sub(1, 7)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Find out current branch
|
||||||
|
-- @return {false|mercurial branch name}
|
||||||
|
---
|
||||||
|
local function get_hg_branch()
|
||||||
|
for line in io.popen("hg branch 2>nul"):lines() do
|
||||||
|
local m = line:match("(.+)$")
|
||||||
|
if m then
|
||||||
|
return m
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Find out current branch
|
||||||
|
-- @return {false|svn branch name}
|
||||||
|
---
|
||||||
|
local function get_svn_branch(svn_dir)
|
||||||
|
for line in io.popen("svn info 2>nul"):lines() do
|
||||||
|
local m = line:match("^Relative URL:")
|
||||||
|
if m then
|
||||||
|
return line:sub(line:find("/")+1,line:len())
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Get the status of working dir
|
-- Get the status of working dir
|
||||||
-- @return {bool}
|
-- @return {bool}
|
||||||
---
|
---
|
||||||
function get_git_status()
|
local function get_git_status()
|
||||||
local file = io.popen("git status --no-lock-index --porcelain 2>nul")
|
local file = io.popen("git --no-optional-locks status --porcelain 2>nul")
|
||||||
for line in file:lines() do
|
for line in file:lines() do
|
||||||
file:close()
|
file:close()
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
file:close()
|
file:close()
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
function git_prompt_filter()
|
---
|
||||||
|
-- Get the status of working dir
|
||||||
|
-- @return {bool}
|
||||||
|
---
|
||||||
|
local function get_hg_status()
|
||||||
|
local file = io.popen("hg status -0")
|
||||||
|
for line in file:lines() do
|
||||||
|
file:close()
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
file:close()
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Get the status of working dir
|
||||||
|
-- @return {bool}
|
||||||
|
---
|
||||||
|
function get_svn_status()
|
||||||
|
local file = io.popen("svn status -q")
|
||||||
|
for line in file:lines() do
|
||||||
|
file:close()
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
file:close()
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local function git_prompt_filter()
|
||||||
|
|
||||||
-- Colors for git status
|
-- Colors for git status
|
||||||
local colors = {
|
local colors = {
|
||||||
@ -267,6 +258,7 @@ function git_prompt_filter()
|
|||||||
if git_dir then
|
if git_dir then
|
||||||
-- if we're inside of git repo then try to detect current branch
|
-- if we're inside of git repo then try to detect current branch
|
||||||
local branch = get_git_branch(git_dir)
|
local branch = get_git_branch(git_dir)
|
||||||
|
local color
|
||||||
if branch then
|
if branch then
|
||||||
-- Has branch => therefore it is a git folder, now figure out status
|
-- Has branch => therefore it is a git folder, now figure out status
|
||||||
if get_git_status() then
|
if get_git_status() then
|
||||||
@ -285,7 +277,37 @@ function git_prompt_filter()
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function svn_prompt_filter()
|
local function hg_prompt_filter()
|
||||||
|
|
||||||
|
-- Colors for mercurial status
|
||||||
|
local colors = {
|
||||||
|
clean = "\x1b[1;37;40m",
|
||||||
|
dirty = "\x1b[31;1m",
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
end
|
||||||
|
|
||||||
|
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", color.."("..branch..")")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- No mercurial present or not in mercurial file
|
||||||
|
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", "")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local function svn_prompt_filter()
|
||||||
-- Colors for svn status
|
-- Colors for svn status
|
||||||
local colors = {
|
local colors = {
|
||||||
clean = "\x1b[1;37;40m",
|
clean = "\x1b[1;37;40m",
|
||||||
@ -295,6 +317,7 @@ function svn_prompt_filter()
|
|||||||
if get_svn_dir() then
|
if get_svn_dir() then
|
||||||
-- if we're inside of svn repo then try to detect current branch
|
-- if we're inside of svn repo then try to detect current branch
|
||||||
local branch = get_svn_branch()
|
local branch = get_svn_branch()
|
||||||
|
local color
|
||||||
if branch then
|
if branch then
|
||||||
if get_svn_status() then
|
if get_svn_status() then
|
||||||
color = colors.clean
|
color = colors.clean
|
||||||
@ -311,6 +334,7 @@ function svn_prompt_filter()
|
|||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", "")
|
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", "")
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- insert the set_prompt at the very beginning so that it runs first
|
-- insert the set_prompt at the very beginning so that it runs first
|
||||||
clink.prompt.register_filter(set_prompt_filter, 1)
|
clink.prompt.register_filter(set_prompt_filter, 1)
|
||||||
clink.prompt.register_filter(hg_prompt_filter, 50)
|
clink.prompt.register_filter(hg_prompt_filter, 50)
|
||||||
@ -327,4 +351,3 @@ for _,lua_module in ipairs(clink.find_files(completions_dir..'*.lua')) do
|
|||||||
dofile(filename)
|
dofile(filename)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
42
vendor/cmder.sh
vendored
42
vendor/cmder.sh
vendored
@ -7,6 +7,20 @@
|
|||||||
# 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.
|
# customizations will not follow Cmder to another machine.
|
||||||
|
|
||||||
|
function runProfiled {
|
||||||
|
unset profile_d_scripts
|
||||||
|
pushd "${1}" >/dev/null
|
||||||
|
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||||
|
|
||||||
|
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
||||||
|
for x in ${profile_d_scripts} ; do
|
||||||
|
echo Sourcing "${1}/${x}"...
|
||||||
|
. "${1}/${x}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
popd >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
|
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
|
||||||
if [ "$CMDER_ROOT" == "" ] ; then
|
if [ "$CMDER_ROOT" == "" ] ; then
|
||||||
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
|
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
|
||||||
@ -42,24 +56,28 @@ if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||||
unset profile_d_scripts
|
runProfiled "${CMDER_ROOT}/config/profile.d"
|
||||||
pushd "${CMDER_ROOT}/config/profile.d" >/dev/null
|
|
||||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
|
||||||
|
|
||||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
|
||||||
for x in ${profile_d_scripts} ; do
|
|
||||||
# echo Sourcing "${CMDER_ROOT}/config/profile.d/${x}"...
|
|
||||||
. "${CMDER_ROOT}/config/profile.d/${x}"
|
|
||||||
done
|
|
||||||
fi
|
fi
|
||||||
popd >/dev/null
|
|
||||||
|
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
|
||||||
|
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f "${CMDER_ROOT}/config/user-profile.sh" ] ; then
|
if [ -f "${CMDER_ROOT}/config/user-profile.sh" ] ; then
|
||||||
. "${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
|
else
|
||||||
echo Creating user startup file: "${CMDER_ROOT}/config/user-profile.sh"
|
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
||||||
cat <<-eof >"${CMDER_ROOT}/config/user-profile.sh"
|
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}"
|
||||||
# use this file to run your own startup commands for msys2 bash'
|
# use this file to run your own startup commands for msys2 bash'
|
||||||
|
|
||||||
# To add a new vendor to the path, do something like:
|
# To add a new vendor to the path, do something like:
|
||||||
|
50
vendor/cmder_exinit
vendored
50
vendor/cmder_exinit
vendored
@ -22,6 +22,25 @@
|
|||||||
# # from outside Cmder.
|
# # from outside Cmder.
|
||||||
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
||||||
|
|
||||||
|
function runProfiled {
|
||||||
|
unset profile_d_scripts
|
||||||
|
pushd "${1}" >/dev/null
|
||||||
|
|
||||||
|
if [ ! "x${ZSH_VERSION}" = "x" ]; then
|
||||||
|
profile_d_scripts=$(ls *.zsh 2>/dev/null)
|
||||||
|
elif [ ! "x${BASH_VERSION}" = "x" ]; then
|
||||||
|
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
||||||
|
for x in ${profile_d_scripts} ; do
|
||||||
|
echo Sourcing "${1}/${x}"...
|
||||||
|
. "${1}/${x}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
popd >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
# Check that we haven't already been sourced.
|
# Check that we haven't already been sourced.
|
||||||
[[ -z ${CMDER_EXINIT} ]] && CMDER_EXINIT="1" || return
|
[[ -z ${CMDER_EXINIT} ]] && CMDER_EXINIT="1" || return
|
||||||
|
|
||||||
@ -55,28 +74,29 @@ if [ ! "$CMDER_ROOT" = "" ] ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||||
unset profile_d_scripts
|
runProfiled "${CMDER_ROOT}/config/profile.d"
|
||||||
pushd "${CMDER_ROOT}/config/profile.d" >/dev/null
|
|
||||||
if [ ! "x${ZSH_VERSION}" = "x" ]; then
|
|
||||||
profile_d_scripts=$(ls *.zsh 2>/dev/null)
|
|
||||||
elif [ ! "x${BASH_VERSION}" = "x" ]; then
|
|
||||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
|
||||||
for x in ${profile_d_scripts} ; do
|
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
||||||
# echo Sourcing "${CMDER_ROOT}/config/profile.d/${x}"...
|
|
||||||
. "${CMDER_ROOT}/config/profile.d/${x}"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
popd >/dev/null
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ -f "${CMDER_ROOT}/config/user-profile.sh" ] ; then
|
if [ -f "${CMDER_ROOT}/config/user-profile.sh" ] ; then
|
||||||
. "${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
|
else
|
||||||
echo Creating user startup file: "${CMDER_ROOT}/config/user-profile.sh"
|
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
||||||
cat <<-eof >"${CMDER_ROOT}/config/user-profile.sh"
|
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}"
|
||||||
# use this file to run your own startup commands for msys2 bash'
|
# use this file to run your own startup commands for msys2 bash'
|
||||||
|
|
||||||
# To add a new vendor to the path, do something like:
|
# To add a new vendor to the path, do something like:
|
||||||
|
429
vendor/init.bat
vendored
429
vendor/init.bat
vendored
@ -6,32 +6,112 @@
|
|||||||
:: !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
:: !!! 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
|
||||||
|
|
||||||
:: Set to > 0 for verbose output to aid in debugging.
|
:: Use /v command line arg or set to > 0 for verbose output to aid in debugging.
|
||||||
if not defined verbose-output ( set verbose-output=0 )
|
set verbose-output=0
|
||||||
|
set debug-output=0
|
||||||
|
set max_depth=1
|
||||||
|
|
||||||
:: Find root dir
|
:: Find root dir
|
||||||
if not defined CMDER_ROOT (
|
if not defined CMDER_ROOT (
|
||||||
for /f "delims=" %%i in ("%ConEmuDir%\..\..") do set "CMDER_ROOT=%%~fi"
|
if defined ConEmuDir (
|
||||||
|
for /f "delims=" %%i in ("%ConEmuDir%\..\..") do (
|
||||||
|
set "CMDER_ROOT=%%~fi"
|
||||||
|
)
|
||||||
|
) else (
|
||||||
|
for /f "delims=" %%i in ("%~dp0\..") do (
|
||||||
|
set "CMDER_ROOT=%%~fi"
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Remove trailing '\'
|
:: Remove trailing '\' from %CMDER_ROOT%
|
||||||
if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%"
|
if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%"
|
||||||
|
|
||||||
|
:var_loop
|
||||||
|
if "%~1" == "" (
|
||||||
|
goto :start
|
||||||
|
) else if "%1"=="/v" (
|
||||||
|
set verbose-output=1
|
||||||
|
) else if "%1"=="/d" (
|
||||||
|
set debug-output=1
|
||||||
|
) else if "%1" == "/max_depth" (
|
||||||
|
if "%~2" geq "1" if "%~2" leq "5" (
|
||||||
|
set "max_depth=%~2"
|
||||||
|
shift
|
||||||
|
) else (
|
||||||
|
call :show_error '/max_depth' requires a number between 1 and 5!
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
) else if "%1" == "/c" (
|
||||||
|
if exist "%~2" (
|
||||||
|
if not exist "%~2\bin" mkdir "%~2\bin"
|
||||||
|
set "cmder_user_bin=%~2\bin"
|
||||||
|
if not exist "%~2\config\profile.d" mkdir "%~2\config\profile.d"
|
||||||
|
set "cmder_user_config=%~2\config"
|
||||||
|
shift
|
||||||
|
)
|
||||||
|
) else if "%1" == "/user_aliases" (
|
||||||
|
if exist "%~2" (
|
||||||
|
set "user-aliases=%~2"
|
||||||
|
shift
|
||||||
|
)
|
||||||
|
) else if "%1" == "/git_install_root" (
|
||||||
|
if exist "%~2" (
|
||||||
|
set "GIT_INSTALL_ROOT=%~2"
|
||||||
|
shift
|
||||||
|
) else (
|
||||||
|
call :show_error The Git install root folder "%2", you specified does not exist!
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
) else if "%1" == "/home" (
|
||||||
|
if exist "%~2" (
|
||||||
|
set "HOME=%~2"
|
||||||
|
shift
|
||||||
|
) else (
|
||||||
|
call :show_error The home folder "%2", you specified does not exist!
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
) else if "%1" == "/svn_ssh" (
|
||||||
|
set SVN_SSH=%2
|
||||||
|
shift
|
||||||
|
)
|
||||||
|
shift
|
||||||
|
goto var_loop
|
||||||
|
|
||||||
|
:start
|
||||||
|
|
||||||
|
call :debug-output init.bat - Env Var - CMDER_ROOT=%CMDER_ROOT%
|
||||||
|
call :debug-output init.bat - Env Var - debug-output=%debug-output%
|
||||||
|
|
||||||
|
if defined CMDER_USER_CONFIG (
|
||||||
|
call :debug-output init.bat - CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '%CMDER_USER_CONFIG%'!
|
||||||
|
)
|
||||||
|
|
||||||
:: Pick right version of clink
|
:: Pick right version of clink
|
||||||
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
||||||
set architecture=86
|
set architecture=86
|
||||||
|
set architecture_bits=32
|
||||||
) else (
|
) else (
|
||||||
set architecture=64
|
set architecture=64
|
||||||
|
set architecture_bits=64
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Tell the user about the clink config files...
|
:: Tell the user about the clink config files...
|
||||||
if not exist "%CMDER_ROOT%\config\settings" (
|
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.\
|
||||||
|
|
||||||
|
} else if not exist "%CMDER_ROOT%\config\settings" (
|
||||||
echo Generating clink initial settings in "%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.
|
echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup.
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Run clink
|
:: Run clink
|
||||||
|
if defined CMDER_USER_CONFIG (
|
||||||
|
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_USER_CONFIG%" --scripts "%CMDER_ROOT%\vendor"
|
||||||
|
) else (
|
||||||
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
|
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
|
||||||
|
)
|
||||||
|
|
||||||
:: Prepare for git-for-windows
|
:: Prepare for git-for-windows
|
||||||
|
|
||||||
@ -43,34 +123,59 @@ if not defined TERM set TERM=cygwin
|
|||||||
:: * if the users points as to a specific git, use that
|
:: * if the users points as to a specific git, use that
|
||||||
:: * test if a git is in path and if yes, use that
|
:: * test if a git is in path and if yes, use that
|
||||||
:: * last, use our vendored git
|
:: * last, use our vendored git
|
||||||
:: also check that we have a recent enough version of git (e.g. test for GIT\cmd\git.exe)
|
:: also check that we have a recent enough version of git by examining the version string
|
||||||
if defined GIT_INSTALL_ROOT (
|
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 :FOUND_GIT)
|
||||||
)
|
)
|
||||||
|
|
||||||
:: check if git is in path...
|
:: get the version information for vendored git binary
|
||||||
setlocal enabledelayedexpansion
|
setlocal enabledelayedexpansion
|
||||||
for /F "delims=" %%F in ('where git.exe 2^>nul') do @(
|
call :read_version VENDORED "%CMDER_ROOT%\vendor\git-for-windows\cmd"
|
||||||
|
|
||||||
|
:: 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
|
pushd %%~dpF
|
||||||
cd ..
|
|
||||||
set "test_dir=!CD!"
|
set "test_dir=!CD!"
|
||||||
popd
|
popd
|
||||||
if exist "!test_dir!\cmd\git.exe" (
|
|
||||||
|
:: get the version information for the user provided git binary
|
||||||
|
call :read_version USER "!test_dir!"
|
||||||
|
|
||||||
|
if !errorlevel! geq 0 (
|
||||||
|
:: compare the user git version against the vendored version
|
||||||
|
call :compare_versions USER VENDORED
|
||||||
|
|
||||||
|
:: use the user provided git if its version is greater than, or equal to the vendored git
|
||||||
|
if !errorlevel! geq 0 if exist "!test_dir:~0,-4!\cmd\git.exe" (
|
||||||
|
set "GIT_INSTALL_ROOT=!test_dir:~0,-4!"
|
||||||
|
set test_dir=
|
||||||
|
goto :FOUND_GIT
|
||||||
|
) else if !errorlevel! geq 0 (
|
||||||
set "GIT_INSTALL_ROOT=!test_dir!"
|
set "GIT_INSTALL_ROOT=!test_dir!"
|
||||||
set test_dir=
|
set test_dir=
|
||||||
goto :FOUND_GIT
|
goto :FOUND_GIT
|
||||||
) else (
|
) else (
|
||||||
echo Found old git version in "!test_dir!", but not using...
|
call :verbose-output Found old !GIT_VERSION_USER! in "!test_dir!", but not using...
|
||||||
set test_dir=
|
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.
|
||||||
|
set test_dir=
|
||||||
|
)
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
:: our last hope: our own git...
|
:: our last hope: our own git...
|
||||||
:VENDORED_GIT
|
:VENDORED_GIT
|
||||||
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
|
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
|
||||||
set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows"
|
set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows"
|
||||||
call :verbose-output Add the minimal git commands to the front of the path
|
call :enhance_path "!GIT_INSTALL_ROOT!\cmd"
|
||||||
set "PATH=!GIT_INSTALL_ROOT!\cmd;%PATH%"
|
|
||||||
) else (
|
) else (
|
||||||
goto :NO_GIT
|
goto :NO_GIT
|
||||||
)
|
)
|
||||||
@ -79,38 +184,48 @@ if exist "%CMDER_ROOT%\vendor\git-for-windows" (
|
|||||||
:: Add git to the path
|
:: Add git to the path
|
||||||
if defined GIT_INSTALL_ROOT (
|
if defined GIT_INSTALL_ROOT (
|
||||||
rem add the unix commands at the end to not shadow windows commands like more
|
rem add the unix commands at the end to not shadow windows commands like more
|
||||||
call :verbose-output Enhancing PATH with unix commands from git in "%GIT_INSTALL_ROOT%\usr\bin"
|
if exist "!GIT_INSTALL_ROOT!\cmd\git.exe" call :enhance_path "!GIT_INSTALL_ROOT!\cmd" append
|
||||||
set "PATH=%PATH%;%GIT_INSTALL_ROOT%\usr\bin;%GIT_INSTALL_ROOT%\usr\share\vim\vim74"
|
if exist "!GIT_INSTALL_ROOT!\mingw32" (
|
||||||
|
call :enhance_path "!GIT_INSTALL_ROOT!\mingw32" append
|
||||||
|
) else if exist "!GIT_INSTALL_ROOT!\mingw64" (
|
||||||
|
call :enhance_path "!GIT_INSTALL_ROOT!\mingw64" append
|
||||||
|
)
|
||||||
|
if exist "!GIT_INSTALL_ROOT!\usr\bin" call :enhance_path "%GIT_INSTALL_ROOT%\usr\bin" append
|
||||||
:: define SVN_SSH so we can use git svn with ssh svn repositories
|
:: 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"
|
if not defined SVN_SSH set "SVN_SSH=%GIT_INSTALL_ROOT:\=\\%\\bin\\ssh.exe"
|
||||||
)
|
)
|
||||||
|
|
||||||
:NO_GIT
|
:NO_GIT
|
||||||
endlocal & set "PATH=%PATH%" & set "SVN_SSH=%SVN_SSH%" & set "GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
|
endlocal & set "PATH=%PATH%" & set "SVN_SSH=%SVN_SSH%" & set "GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
|
||||||
|
call :debug-output init.bat - Env Var - GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%
|
||||||
|
|
||||||
:: Enhance Path
|
:: Enhance Path
|
||||||
set "PATH=%CMDER_ROOT%\bin;%PATH%;%CMDER_ROOT%\"
|
call :enhance_path_recursive "%CMDER_ROOT%\bin" %max_depth%
|
||||||
|
if defined CMDER_USER_BIN (
|
||||||
|
call :enhance_path "%CMDER_USER_BIN%" %max_depth%
|
||||||
|
)
|
||||||
|
call :enhance_path "%CMDER_ROOT%" append
|
||||||
|
|
||||||
:: Drop *.bat and *.cmd files into "%CMDER_ROOT%\config\profile.d"
|
:: Drop *.bat and *.cmd files into "%CMDER_ROOT%\config\profile.d"
|
||||||
:: to run them at startup.
|
:: to run them at startup.
|
||||||
if not exist "%CMDER_ROOT%\config\profile.d" (
|
call :run_profile_d "%CMDER_ROOT%\config\profile.d"
|
||||||
mkdir "%CMDER_ROOT%\config\profile.d"
|
if defined CMDER_USER_CONFIG (
|
||||||
|
call :run_profile_d "%CMDER_USER_CONFIG%\profile.d"
|
||||||
)
|
)
|
||||||
|
|
||||||
pushd "%CMDER_ROOT%\config\profile.d"
|
|
||||||
for /f "usebackq" %%x in ( `dir /b *.bat *.cmd 2^>nul` ) do (
|
|
||||||
call :verbose-output Calling "%CMDER_ROOT%\config\profile.d\%%x"...
|
|
||||||
call "%CMDER_ROOT%\config\profile.d\%%x"
|
|
||||||
)
|
|
||||||
popd
|
|
||||||
|
|
||||||
:: Allows user to override default aliases store using profile.d
|
:: Allows user to override default aliases store using profile.d
|
||||||
:: scripts run above by setting the 'aliases' env variable.
|
:: scripts run above by setting the 'aliases' env variable.
|
||||||
::
|
::
|
||||||
:: Note: If overriding default aliases store file the aliases
|
:: 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.
|
:: and be in profile.d folder.
|
||||||
|
if not defined user-aliases (
|
||||||
|
if defined CMDER_USER_CONFIG (
|
||||||
|
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 aliases environment variable is used by alias.bat to id
|
||||||
:: the default file to store new aliases in.
|
:: the default file to store new aliases in.
|
||||||
@ -127,8 +242,13 @@ if not exist "%user-aliases%" (
|
|||||||
type "%user-aliases%" | findstr /i ";= Add aliases below here" >nul
|
type "%user-aliases%" | findstr /i ";= Add aliases below here" >nul
|
||||||
if "!errorlevel!" == "1" (
|
if "!errorlevel!" == "1" (
|
||||||
echo Creating initial user-aliases store in "%user-aliases%"...
|
echo Creating initial user-aliases store in "%user-aliases%"...
|
||||||
copy "%CMDER_ROOT%\%user-aliases%" "%user-aliases%.old_format"
|
if defined CMDER_USER_CONFIG (
|
||||||
|
copy "%user-aliases%" "%user-aliases%.old_format"
|
||||||
copy "%CMDER_ROOT%\vendor\user-aliases.cmd.example" "%user-aliases%"
|
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%"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -141,31 +261,32 @@ if exist "%CMDER_ROOT%\config\aliases" (
|
|||||||
type "%user-aliases%.old_format" >> "%user-aliases%" && del "%user-aliases%.old_format"
|
type "%user-aliases%.old_format" >> "%user-aliases%" && del "%user-aliases%.old_format"
|
||||||
)
|
)
|
||||||
endlocal
|
endlocal
|
||||||
|
|
||||||
:: Add aliases to the environment
|
:: Add aliases to the environment
|
||||||
call "%user-aliases%"
|
call "%user-aliases%"
|
||||||
|
|
||||||
:: See vendor\git-for-windows\README.portable for why we do this
|
:: See vendor\git-for-windows\README.portable for why we do this
|
||||||
:: Basically we need to execute this post-install.bat because we are
|
:: Basically we need to execute this post-install.bat because we are
|
||||||
:: manually extracting the archive rather than executing the 7z sfx
|
:: manually extracting the archive rather than executing the 7z sfx
|
||||||
if exist "%CMDER_ROOT%\vendor\git-for-windows\post-install.bat" (
|
if exist "%GIT_INSTALL_ROOT%\post-install.bat" (
|
||||||
call :verbose-output Running Git for Windows one time Post Install....
|
call :verbose-output Running Git for Windows one time Post Install....
|
||||||
pushd "%CMDER_ROOT%\vendor\git-for-windows\"
|
pushd "%GIT_INSTALL_ROOT%\"
|
||||||
"%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe" --no-needs-console --hide --no-cd --command=post-install.bat
|
"%GIT_INSTALL_ROOT%\git-bash.exe" --no-needs-console --hide --no-cd --command=post-install.bat
|
||||||
pushd "%USERPROFILE%"
|
popd
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Set home path
|
:: Set home path
|
||||||
if not defined HOME set "HOME=%USERPROFILE%"
|
if not defined HOME set "HOME=%USERPROFILE%"
|
||||||
|
call :debug-output init.bat - Env Var - HOME=%HOME%
|
||||||
:: This is either a env variable set by the user or the result of
|
|
||||||
:: cmder.exe setting this variable due to a commandline argument or a "cmder here"
|
|
||||||
if defined CMDER_START (
|
|
||||||
pushd "%CMDER_START%"
|
|
||||||
)
|
|
||||||
|
|
||||||
if exist "%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
|
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 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"
|
||||||
) else (
|
) else (
|
||||||
echo Creating user startup file: "%CMDER_ROOT%\config\user-profile.cmd"
|
echo Creating user startup file: "%CMDER_ROOT%\config\user-profile.cmd"
|
||||||
(
|
(
|
||||||
@ -182,7 +303,14 @@ if exist "%CMDER_ROOT%\config\user-profile.cmd" (
|
|||||||
echo :: you can add your plugins to the cmder path like so
|
echo :: you can add your plugins to the cmder path like so
|
||||||
echo :: set "PATH=%%CMDER_ROOT%%\vendor\whatever;%%PATH%%"
|
echo :: set "PATH=%%CMDER_ROOT%%\vendor\whatever;%%PATH%%"
|
||||||
echo.
|
echo.
|
||||||
) > "%CMDER_ROOT%\config\user-profile.cmd"
|
echo @echo off
|
||||||
|
) >"%temp%\user-profile.tmp"
|
||||||
|
|
||||||
|
if defined CMDER_USER_CONFIG (
|
||||||
|
copy "%temp%\user-profile.tmp" "%CMDER_USER_CONFIG%\user-profile.cmd"
|
||||||
|
) else (
|
||||||
|
copy "%temp%\user-profile.tmp" "%CMDER_ROOT%\config\user-profile.cmd"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
@ -190,6 +318,229 @@ exit /b
|
|||||||
::
|
::
|
||||||
:: sub-routines below here
|
:: sub-routines below here
|
||||||
::
|
::
|
||||||
:verbose-output
|
:debug-output
|
||||||
if %verbose-output% gtr 0 echo %*
|
if %debug-output% gtr 0 echo %* & echo.
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:verbose-output
|
||||||
|
if %debug-output% gtr 0 (
|
||||||
|
call :debug-output :verbose-output - %*
|
||||||
|
) else if %verbose-output% gtr 0 (
|
||||||
|
echo %*
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:show_error
|
||||||
|
echo ERROR: %*
|
||||||
|
echo CMDER Shell Initialization has Failed!
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:run_profile_d
|
||||||
|
if not exist "%~1" (
|
||||||
|
mkdir "%~1"
|
||||||
|
)
|
||||||
|
|
||||||
|
pushd "%~1"
|
||||||
|
for /f "usebackq" %%x in ( `dir /b *.bat *.cmd 2^>nul` ) do (
|
||||||
|
call :verbose-output Calling "%~1\%%x"...
|
||||||
|
call "%~1\%%x"
|
||||||
|
)
|
||||||
|
popd
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::
|
||||||
|
:: specific to git version comparing
|
||||||
|
::
|
||||||
|
:read_version
|
||||||
|
:: clear the variables
|
||||||
|
set GIT_VERSION_%~1=
|
||||||
|
|
||||||
|
:: set the executable path
|
||||||
|
set "git_executable=%~2\git.exe"
|
||||||
|
call :debug-output :read_version - Env Var - git_executable=%git_executable%
|
||||||
|
|
||||||
|
:: check if the executable actually exists
|
||||||
|
if not exist "%git_executable%" (
|
||||||
|
call :verbose-output "%git_executable%" does not exist!
|
||||||
|
exit /b -255
|
||||||
|
)
|
||||||
|
|
||||||
|
:: get the git version in the provided directory
|
||||||
|
for /F "tokens=1,2,3 usebackq" %%F in (`"%git_executable%" --version 2^>nul`) do (
|
||||||
|
if "%%F %%G" == "git version" (
|
||||||
|
set "GIT_VERSION_%~1=%%H"
|
||||||
|
call :debug-output :read_version - Env Var - GIT_VERSION_%~1=%%H
|
||||||
|
) else (
|
||||||
|
echo "git --version" returned an inproper version string!
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
:: parse the returned string
|
||||||
|
call :debug-output :read_version - Calling - :validate_version "%~1" !GIT_VERSION_%~1!
|
||||||
|
call :validate_version "%~1" !GIT_VERSION_%~1!
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:parse_version
|
||||||
|
:: process a `x.x.x.xxxx.x` formatted string
|
||||||
|
for /F "tokens=1-3* delims=.,-" %%A in ("%2") do (
|
||||||
|
set "%~1_MAJOR=%%A"
|
||||||
|
set "%~1_MINOR=%%B"
|
||||||
|
set "%~1_PATCH=%%C"
|
||||||
|
set "%~1_BUILD=%%D"
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:validate_version
|
||||||
|
:: now parse the version information into the corresponding variables
|
||||||
|
call :parse_version %~1 %~2
|
||||||
|
|
||||||
|
:: ... and maybe display it, for debugging purposes.
|
||||||
|
call :debug-output :validate_version - Found Git Version for %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:compare_versions
|
||||||
|
:: 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.
|
||||||
|
|
||||||
|
:: call :debug-output Comparing:
|
||||||
|
:: call :debug-output %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!
|
||||||
|
:: call :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)
|
||||||
|
|
||||||
|
if !%~1_MINOR! GTR !%~2_MINOR! (exit /b 1)
|
||||||
|
if !%~1_MINOR! LSS !%~2_MINOR! (exit /b -1)
|
||||||
|
|
||||||
|
if !%~1_PATCH! GTR !%~2_PATCH! (exit /b 1)
|
||||||
|
if !%~1_PATCH! LSS !%~2_PATCH! (exit /b -1)
|
||||||
|
|
||||||
|
if !%~1_BUILD! GTR !%~2_BUILD! (exit /b 1)
|
||||||
|
if !%~1_BUILD! LSS !%~2_BUILD! (exit /b -1)
|
||||||
|
|
||||||
|
:: looks like we have the same versions.
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
|
:enhance_path
|
||||||
|
setlocal enabledelayedexpansion
|
||||||
|
if "%~1" neq "" (
|
||||||
|
if exist "%~1" (
|
||||||
|
set "add_path=%~1"
|
||||||
|
) else (
|
||||||
|
call :show_error :enhance_path - The path specified. "%~1", does not exist!
|
||||||
|
exit 1
|
||||||
|
)
|
||||||
|
) else (
|
||||||
|
call :show_error You must specify a directory to add to the path!
|
||||||
|
exit 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%~2" neq "" if /i "%~2" == "append" (
|
||||||
|
set "position=%~2"
|
||||||
|
) else (
|
||||||
|
set "position="
|
||||||
|
)
|
||||||
|
|
||||||
|
set "find_query=%add_path%"
|
||||||
|
set "find_query=%find_query:\=\\%"
|
||||||
|
set "find_query=%find_query: =\ %"
|
||||||
|
set found=0
|
||||||
|
|
||||||
|
call :debug-output :enhance_path "Env Var - find_query=%find_query%"
|
||||||
|
echo "%PATH%"|findstr >nul /I /R ";%find_query%\"$"
|
||||||
|
if "!ERRORLEVEL!" == "0" set found=1
|
||||||
|
|
||||||
|
call :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
|
||||||
|
call :debug-output :enhance_path "Env Var 2 - found=!found!"
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%found%" == "0" (
|
||||||
|
call :debug-output :enhance_path "BEFORE Env Var - PATH=!path!"
|
||||||
|
if /i "%position%" == "append" (
|
||||||
|
call :debug-output :enhance_path "Appending '%add_path%'"
|
||||||
|
set "PATH=%PATH%;%add_path%"
|
||||||
|
) else (
|
||||||
|
call :debug-output :enhance_path "Prepending '%add_path%'"
|
||||||
|
set "PATH=%add_path%;%PATH%"
|
||||||
|
)
|
||||||
|
|
||||||
|
call :debug-output :enhance_path "AFTER Env Var - PATH=!path!"
|
||||||
|
)
|
||||||
|
|
||||||
|
endlocal & set "PATH=%PATH%"
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:enhance_path_recursive
|
||||||
|
::: ==============================================================================
|
||||||
|
:::enhance_path_recursive - Add a directory and subs to the path env variable if
|
||||||
|
::: required.
|
||||||
|
:::
|
||||||
|
:::include:
|
||||||
|
:::
|
||||||
|
::: call "$0"
|
||||||
|
:::
|
||||||
|
:::usage:
|
||||||
|
:::
|
||||||
|
::: call "%~DP0lib_path" enhance_path_recursive "[dir_path]" [max_depth] [append]
|
||||||
|
:::
|
||||||
|
:::required:
|
||||||
|
:::
|
||||||
|
::: [dir_path] <in> Fully qualified directory path. Ex: "c:\bin"
|
||||||
|
:::
|
||||||
|
:::dptions:
|
||||||
|
:::
|
||||||
|
::: [max_depth] <in> Max recuse depth. Default: 1
|
||||||
|
:::
|
||||||
|
::: append <in> Append instead rather than pre-pend "[dir_path]"
|
||||||
|
:::
|
||||||
|
:::output:
|
||||||
|
:::
|
||||||
|
::: path <out> Sets the path env variable if required.
|
||||||
|
::: ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
setlocal enabledelayedexpansion
|
||||||
|
if "%~1" neq "" (
|
||||||
|
set "add_path=%~1"
|
||||||
|
) else (
|
||||||
|
call :directory to add to the path!"
|
||||||
|
exit 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%~2" gtr "1" (
|
||||||
|
set "max_depth=%~2"
|
||||||
|
) else (
|
||||||
|
set "max_depth=1"
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%~3" neq "" if /i "%~3" == "append" (
|
||||||
|
set "position=%~3"
|
||||||
|
) else (
|
||||||
|
set "position="
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%depth%" == "" set depth=0
|
||||||
|
|
||||||
|
call :debug-output :enhance_path_recursive "Env Var - add_path=%add_path%"
|
||||||
|
call :debug-output :enhance_path_recursive "Env Var - position=%position%"
|
||||||
|
call :debug-output :enhance_path_recursive "Env Var - max_depth=%max_depth%"
|
||||||
|
|
||||||
|
if %max_depth% gtr !depth! (
|
||||||
|
call :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 (
|
||||||
|
call :debug-output :enhance_path_recursive "Env Var BEFORE - depth=!depth!"
|
||||||
|
call :debug-output :enhance_path_recursive "Found Subdirectory - '%%~fi'"
|
||||||
|
call :enhance_path_recursive "%%~fi" %max_depth% %position%
|
||||||
|
call :debug-output :enhance_path_recursive "Env Var AFTER- depth=!depth!"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
endlocal & set "PATH=%PATH%"
|
||||||
exit /b
|
exit /b
|
||||||
|
51
vendor/profile.ps1
vendored
51
vendor/profile.ps1
vendored
@ -4,18 +4,30 @@
|
|||||||
# !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
# !!! 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) {
|
||||||
|
$PSScriptRoot = Split-Path $Script:MyInvocation.MyCommand.Path
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($ENV:CMDER_USER_CONFIG) {
|
||||||
|
# write-host "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '$ENV:CMDER_USER_CONFIG'!"
|
||||||
|
}
|
||||||
|
|
||||||
# We do this for Powershell as Admin Sessions because CMDER_ROOT is not beng set.
|
# We do this for Powershell as Admin Sessions because CMDER_ROOT is not beng set.
|
||||||
if (! $ENV:CMDER_ROOT ) {
|
if (! $ENV:CMDER_ROOT ) {
|
||||||
|
if ( $ENV:ConEmuDir ) {
|
||||||
$ENV:CMDER_ROOT = resolve-path( $ENV:ConEmuDir + "\..\.." )
|
$ENV:CMDER_ROOT = resolve-path( $ENV:ConEmuDir + "\..\.." )
|
||||||
|
} else {
|
||||||
|
$ENV:CMDER_ROOT = resolve-path( $PSScriptRoot + "\.." )
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Remove trailing '\'
|
# Remove trailing '\'
|
||||||
$ENV:CMDER_ROOT = (($ENV:CMDER_ROOT).trimend("\"))
|
$ENV:CMDER_ROOT = (($ENV:CMDER_ROOT).trimend("\"))
|
||||||
|
|
||||||
# Compatibility with PS major versions <= 2
|
# do not load bundled psget if a module installer is already available
|
||||||
if(!$PSScriptRoot) {
|
# -> recent PowerShell versions include PowerShellGet out of the box
|
||||||
$PSScriptRoot = Split-Path $Script:MyInvocation.MyCommand.Path
|
$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue | Out-Null)
|
||||||
}
|
|
||||||
|
|
||||||
# do not load bundled psget if a module installer is already available
|
# do not load bundled psget if a module installer is already available
|
||||||
# -> recent PowerShell versions include PowerShellGet out of the box
|
# -> recent PowerShell versions include PowerShellGet out of the box
|
||||||
@ -76,13 +88,6 @@ function checkGit($Path) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Move to the wanted location
|
|
||||||
# This is either a env variable set by the user or the result of
|
|
||||||
# cmder.exe setting this variable due to a commandline argument or a "cmder here"
|
|
||||||
if ( $ENV:CMDER_START ) {
|
|
||||||
Set-Location -Path "$ENV:CMDER_START"
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Get-Module PSReadline -ErrorAction "SilentlyContinue") {
|
if (Get-Module PSReadline -ErrorAction "SilentlyContinue") {
|
||||||
Set-PSReadlineOption -ExtraPromptLineCount 1
|
Set-PSReadlineOption -ExtraPromptLineCount 1
|
||||||
}
|
}
|
||||||
@ -127,16 +132,38 @@ if (-not (test-path "$ENV:CMDER_ROOT\config\profile.d")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pushd $ENV:CMDER_ROOT\config\profile.d
|
pushd $ENV:CMDER_ROOT\config\profile.d
|
||||||
foreach ($x in ls *.ps1) {
|
foreach ($x in Get-ChildItem *.ps1) {
|
||||||
# write-host write-host Sourcing $x
|
# write-host write-host Sourcing $x
|
||||||
. $x
|
. $x
|
||||||
}
|
}
|
||||||
popd
|
popd
|
||||||
|
|
||||||
|
# Drop *.ps1 files into "$ENV:CMDER_USER_CONFIG\config\profile.d"
|
||||||
|
# to source them at startup. Requires using cmder.exe /C [cmder_user_root_path] argument
|
||||||
|
if ($ENV:CMDER_USER_CONFIG -ne "" -and -not (test-path "$ENV:CMDER_USER_CONFIG\profile.d")) {
|
||||||
|
pushd $ENV:CMDER_USER_CONFIG\profile.d
|
||||||
|
foreach ($x in Get-ChildItem *.ps1) {
|
||||||
|
# write-host write-host Sourcing $x
|
||||||
|
. $x
|
||||||
|
}
|
||||||
|
popd
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$CmderUserProfilePath = Join-Path $env:CMDER_ROOT "config\user-profile.ps1"
|
$CmderUserProfilePath = Join-Path $env:CMDER_ROOT "config\user-profile.ps1"
|
||||||
if (Test-Path $CmderUserProfilePath) {
|
if (Test-Path $CmderUserProfilePath) {
|
||||||
# Create this file and place your own command in there.
|
# Create this file and place your own command in there.
|
||||||
. "$CmderUserProfilePath"
|
. "$CmderUserProfilePath"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($ENV:CMDER_USER_CONFIG) {
|
||||||
|
$CmderUserProfilePath = Join-Path $ENV:CMDER_USER_CONFIG "user-profile.ps1"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Test-Path $CmderUserProfilePath) {
|
||||||
|
. "$CmderUserProfilePath"
|
||||||
} else {
|
} else {
|
||||||
# This multiline string cannot be indented, for this reason I've not indented the whole block
|
# This multiline string cannot be indented, for this reason I've not indented the whole block
|
||||||
|
|
||||||
|
10
vendor/sources.json
vendored
10
vendor/sources.json
vendored
@ -1,18 +1,18 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "git-for-windows",
|
"name": "git-for-windows",
|
||||||
"version": "v2.14.3.windows.1",
|
"version": "v2.16.2.windows.1",
|
||||||
"url": "https://github.com/git-for-windows/git/releases/download/v2.14.3.windows.1/PortableGit-2.14.3-32-bit.7z.exe"
|
"url": "https://github.com/git-for-windows/git/releases/download/v2.16.2.windows.1/PortableGit-2.16.2-64-bit.7z.exe"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "clink",
|
"name": "clink",
|
||||||
"version": "0.4.9",
|
"version": "0.4.9",
|
||||||
"url": "https://github.com/Stanzilla/clink/releases/download/0.4.9/clink_DEV.zip"
|
"url": "https://github.com/mridgers/clink/releases/download/0.4.9/clink_0.4.9.zip"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "conemu-maximus5",
|
"name": "conemu-maximus5",
|
||||||
"version": "171025",
|
"version": "180206",
|
||||||
"url": "https://github.com/Maximus5/ConEmu/releases/download/v17.10.25/ConEmuPack.171025.7z"
|
"url": "https://github.com/Maximus5/ConEmu/releases/download/v18.02.06/ConEmuPack.180206.7z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "clink-completions",
|
"name": "clink-completions",
|
||||||
|
Reference in New Issue
Block a user