mirror of
https://github.com/cmderdev/cmder.git
synced 2025-07-16 12:39:38 +08:00
Compare commits
126 Commits
Author | SHA1 | Date | |
---|---|---|---|
3163d6d1c3 | |||
5c7f4943ad | |||
378ebff566 | |||
572a94ca3a | |||
22aa59bd83 | |||
eb6a332da2 | |||
dd614642b2 | |||
036cf09360 | |||
7203671fc9 | |||
787ac3773c | |||
b16aa7a29e | |||
d8e8fc8adb | |||
0efeaa91fa | |||
8c0817941e | |||
e17b04cbb9 | |||
e904ebce72 | |||
a226019d5a | |||
d04cc1f04e | |||
2e77513674 | |||
1640e9c01d | |||
ddbfd1da18 | |||
bc7c6e97b3 | |||
45f05ed8fa | |||
72b676b939 | |||
637b0fd3ac | |||
ce62db6d33 | |||
f3ed7b6d1b | |||
57e5ae1719 | |||
a5bdecca77 | |||
5be25f29f8 | |||
cb78f0486a | |||
f5ac81daa0 | |||
da0aea96f8 | |||
3a11d45552 | |||
c5a6afbf5b | |||
a607f0f2d5 | |||
66da1716bc | |||
bfaa194468 | |||
c3956e307a | |||
3344268c24 | |||
8ff459b309 | |||
103d0a6cea | |||
8dc9bc9ae1 | |||
bb4ed4af51 | |||
ae2fda72fd | |||
bda09bc274 | |||
749ce17dbe | |||
8cf59d1cbf | |||
1d36ba4ed4 | |||
564ef5220e | |||
f84da84e15 | |||
86544c9188 | |||
4aec21ce19 | |||
0be94725bd | |||
9dce9d0f62 | |||
669e997602 | |||
0730c6e32b | |||
0d2e16c653 | |||
35eab7a51a | |||
2cfa7c45fc | |||
ab0de6d157 | |||
bd9cff2691 | |||
7b191d3caf | |||
277972a7f2 | |||
b1aa687d4f | |||
ec4c815264 | |||
12b9af99c5 | |||
d58c6c2070 | |||
06c7cc969c | |||
44b4b7a195 | |||
9869f9a372 | |||
85c4a5b4af | |||
3f96336610 | |||
a8cae77395 | |||
823eeaf082 | |||
823e6fee6e | |||
34f8c43d98 | |||
352a16f84d | |||
541fc16daf | |||
75e6644d2a | |||
7d40ea4609 | |||
451fb46ce1 | |||
70788dc1e5 | |||
c25ff75187 | |||
059a31618b | |||
e69e7f9b82 | |||
e93231114f | |||
08550751da | |||
49da3745bc | |||
e4fb0d694b | |||
798da058cc | |||
d91438de47 | |||
08e1244fe5 | |||
02f4a9dfe5 | |||
e80ad2356f | |||
21b1f00981 | |||
34bb62409a | |||
b901a4a569 | |||
39f47870a3 | |||
f4ee915678 | |||
192056e19b | |||
f6c2d9c31e | |||
b3200efa7e | |||
b57e146e7a | |||
0f99f66b42 | |||
4655888690 | |||
431c6300e5 | |||
e3cdf43afc | |||
6c016788d4 | |||
0b2d7bd655 | |||
27f51f48a4 | |||
34554d6b08 | |||
4df1d744d3 | |||
40b9ca4e28 | |||
861f99d64b | |||
6af44441fe | |||
0ce1db97d0 | |||
0c39d0a799 | |||
add82a247b | |||
bf6dae4a24 | |||
daa94c5462 | |||
9a3a8f23d0 | |||
99f51b0fc0 | |||
a06d4e93ec | |||
9462315789 | |||
864f778099 |
15
.gitignore
vendored
15
.gitignore
vendored
@ -1,21 +1,26 @@
|
||||
|
||||
## Those files should be taken from their repositary
|
||||
|
||||
bin/*
|
||||
!bin/Readme.md
|
||||
|
||||
vendor/*/*
|
||||
!vendor/bin/*
|
||||
!vendor/lib/*
|
||||
!vendor/*
|
||||
!vendor/psmodules/PsGet
|
||||
|
||||
config/.history
|
||||
config/*
|
||||
!config/Readme.md
|
||||
|
||||
config_user/*
|
||||
|
||||
Thumbs.db
|
||||
*.exe
|
||||
*.dll
|
||||
build/
|
||||
Version v*
|
||||
*.bak
|
||||
config/user-*
|
||||
config/settings
|
||||
config/aliases
|
||||
config/profile.d
|
||||
.github_changelog_generator
|
||||
launcher/.vs
|
||||
launcher/src/version.rc2
|
||||
|
11
CHANGELOG.md
11
CHANGELOG.md
@ -1,5 +1,16 @@
|
||||
# Change Log
|
||||
|
||||
## [1.3.6](https://github.com/cmderdev/cmder/tree/v1.3.6) (2018-05-30)
|
||||
**Updated components:**
|
||||
|
||||
* Git updated to v2.17.1.windows.2
|
||||
* ConEmu updated to 180528
|
||||
|
||||
**Updates:**
|
||||
|
||||
* Cmder now opens in the in the current working dir
|
||||
* TBD
|
||||
|
||||
## [1.3.6-pre2](https://github.com/cmderdev/cmder/tree/v1.3.6-pre2) (2018-03-01)
|
||||
|
||||
**Updated components:**
|
||||
|
@ -11,7 +11,7 @@ If you follow them your contribution will likely be pulled in quicker.
|
||||
|
||||
## Making Changes
|
||||
|
||||
* Make changes in your seperate branch.
|
||||
* Make changes in your separate branch.
|
||||
* Check for unnecessary whitespace with `git diff --check` before committing.
|
||||
* Make sure your commit messages are easy to understand
|
||||
* Squash your 'Correcting mistakes' commits if you have a lot of them. (See the 'Squashing Commits' link below)
|
||||
@ -35,4 +35,4 @@ If you follow them your contribution will likely be pulled in quicker.
|
||||
|
||||
* [Squashing Commits](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html)
|
||||
* [General GitHub documentation](http://help.github.com/)
|
||||
* [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
|
||||
* [GitHub pull request documentation](http://help.github.com/articles/creating-a-pull-request/)
|
||||
|
192
README.md
192
README.md
@ -18,7 +18,7 @@ The Cmder's user interface is also designed to be more eye pleasing, and you can
|
||||
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
|
||||
2. Extract the archive. *Note: This path should not be `C:\Program Files` or anywhere else that would require Administrator access for modifying configuration files*
|
||||
3. (optional) Place your own executable files into the `%cmder_root%\bin` folder to be injected into your PATH.
|
||||
4. Run Cmder.exe
|
||||
4. Run `Cmder.exe`
|
||||
|
||||
### Shared Cmder install with Non-Portable Individual User Config
|
||||
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
|
||||
@ -26,7 +26,7 @@ The Cmder's user interface is also designed to be more eye pleasing, and you can
|
||||
3. (optional) Place your own executable files into the `%cmder_root%\bin` folder to be injected into your PATH.
|
||||
4. (optional) Create `%userprofile%\cmder_config\bin` folder to be injected into individual users PATH. Default is to auto create this on first run.
|
||||
5. (optional) Place your own executable files into the `%userprofile%\cmder_config\bin` folder to be injected into your PATH.
|
||||
6. Run Cmder.exe with "/C" command line argument. Example: `cmder.exe /C %userprofile%\cmder_config`
|
||||
6. Run `Cmder.exe` with `/C` command line argument. Example: `cmder.exe /C %userprofile%\cmder_config`
|
||||
* This will create the following directory structure if it is missing.
|
||||
|
||||
```
|
||||
@ -41,12 +41,15 @@ The Cmder's user interface is also designed to be more eye pleasing, and you can
|
||||
## Cmder.exe Command Line Arguments
|
||||
|
||||
|
||||
| Argument | Description |
|
||||
| ------------------- | ----------------------------------------------------------------------- |
|
||||
| /C [user_root_path] | Individual user Cmder root folder. Example: %userprofile%\cmder_config |
|
||||
| /SINGLE | Start Cmder is single mode. |
|
||||
| /START [start_path] | Folder path to start in. |
|
||||
| /TASK [task_name] | Task to start after launch. |
|
||||
| Argument | Description |
|
||||
| ------------------- | ----------------------------------------------------------------------- |
|
||||
| `/C [user_root_path]` | Individual user Cmder root folder. Example: `%userprofile%\cmder_config` |
|
||||
| `/M` | Use `conemu-%computername%.xml` for ConEmu settings storage instead of `user_conemu.xml` |
|
||||
| `/REGISTER [ALL, USER]` | Register a Windows Shell Menu shortcut. |
|
||||
| `/UNREGISTER [ALL, USER]` | Un-register a Windows Shell Menu shortcut. |
|
||||
| `/SINGLE` | Start Cmder in single mode. |
|
||||
| `/START [start_path]` | Folder path to start in. |
|
||||
| `/TASK [task_name]` | Task to start after launch. |
|
||||
|
||||
## Context Menu Integration
|
||||
|
||||
@ -90,24 +93,24 @@ You can open multiple tabs each containing one of the following shells:
|
||||
|
||||
| Task | Shell | Description |
|
||||
| ---- | ----- | ----------- |
|
||||
| Cmder | cmd.exe | Windows 'cmd.exe' shell enhanced with Git, Git aware prompt, Clink (GNU Readline), and Aliases. |
|
||||
| Cmder as Admin | cmd.exe | Administrative Windows 'cmd.exe' Cmder shell. |
|
||||
| PowerShell | powershell.exe | Windows PowerShell enhanced with Git and Git aware prompt . |
|
||||
| PowerShell as Admin | powershell.exe | Administrative Windows 'powershell.exe' Cmder shell. |
|
||||
| Bash | bash.exe | Unix/Linux like bash shell running on Windows. |
|
||||
| Bash as Admin | bash.exe | Administrative Unix/Linux like bash shell running on Windows. |
|
||||
| Mintty | bash.exe | Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences |
|
||||
| Mintty as Admin | bash.exe | Administrative Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences |
|
||||
| Cmder | `cmd.exe` | Windows `cmd.exe` shell enhanced with Git, Git aware prompt, Clink (GNU Readline), and Aliases. |
|
||||
| Cmder as Admin | `cmd.exe` | Administrative Windows `cmd.exe` Cmder shell. |
|
||||
| PowerShell | `powershell.exe` | Windows PowerShell enhanced with Git and Git aware prompt . |
|
||||
| PowerShell as Admin | `powershell.exe` | Administrative Windows `powershell.exe` Cmder shell. |
|
||||
| Bash | `bash.exe` | Unix/Linux like bash shell running on Windows. |
|
||||
| Bash as Admin | `bash.exe` | Administrative Unix/Linux like bash shell running on Windows. |
|
||||
| Mintty | `bash.exe` | Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences |
|
||||
| Mintty as Admin | `bash.exe` | Administrative Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences |
|
||||
|
||||
Cmder, PowerShell, and Bash tabs all run on top of the Windows Console API and work as you might expect in Cmder with access to use ConEmu's color schemes, key bindings and other settings defined in the ConEmu Settings dialog.
|
||||
|
||||
⚠ *NOTE:* Only the full edition of Cmder comes with a pre-installed bash, using a vendored [git-for-windows](https://gitforwindows.org/) installation. The pre-configured Bash tabs may not work on Cmder mini eidition without additional configuration.
|
||||
⚠ *NOTE:* Only the full edition of Cmder comes with a pre-installed bash, using a vendored [git-for-windows](https://gitforwindows.org/) installation. The pre-configured Bash tabs may not work on Cmder mini edition without additional configuration.
|
||||
|
||||
You may however, choose to use an external installation of bash, such as Microsoft's [Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) (called WSL) or the [Cygwin](https://cygwin.com/) project which provides POSIX support on windows.
|
||||
|
||||
⚠ *NOTE:* Mintty tabs use a program called 'mintty' as the terminal emulator that is not based on the Windows Console API, rather it's rendered graphically by ConEmu. Mintty differs from the other tabs in that it supports xterm/xterm-256color TERM types, and does not work with ConEmu settings like color schemes and key bindings. As such, some differences in functionality are to be expected, such as Cmder not being able to apply a system-wide configuration to it.
|
||||
⚠ *NOTE:* Mintty tabs use a program called 'mintty' as the terminal emulator that is not based on the Windows Console API, rather it's rendered graphically by ConEmu. Mintty differs from the other tabs in that it supports xterm/xterm-256color TERM types, and does not work with ConEmu settings like color schemes and key bindings. As such, some differences in functionality are to be expected, such as Cmder not being able to apply a system-wide configuration to it.
|
||||
|
||||
As a result mintty specific config is done via the '[%USERPROFILE%|$HOME]/.minttyrc' file. You may read more about Mintty and its config file [here](https://github.com/mintty/mintty).
|
||||
As a result mintty specific config is done via the `[%USERPROFILE%|$HOME]/.minttyrc` file. You may read more about Mintty and its config file [here](https://github.com/mintty/mintty).
|
||||
|
||||
An example of setting Cmder portable terminal colors for mintty:
|
||||
|
||||
@ -117,18 +120,18 @@ From a bash/mintty shell:
|
||||
cd $CMDER_ROOT/vendor
|
||||
git clone https://github.com/karlin/mintty-colors-solarized.git
|
||||
cd mintty-colors-solarized/
|
||||
echo source \$CMDER_ROOT/vendor/mintty-colors-solarized/mintty-solarized-dark.sh>>$CMDER_ROOT/config/user-profile.sh
|
||||
echo source \$CMDER_ROOT/vendor/mintty-colors-solarized/mintty-solarized-dark.sh>>$CMDER_ROOT/config/user_profile.sh
|
||||
```
|
||||
|
||||
You may find some Monokai color schemes for mintty to match Cmder [here](https://github.com/PhilipDaniels/mintty/blob/master/themes/Monokai) or [here](https://github.com/oumu/mintty-color-schemes/blob/master/base16-monokai-mod.minttyrc).
|
||||
|
||||
### Changing Cmder Default 'cmd.exe' Shell Startup Behaviour Using Task Arguments
|
||||
### Changing Cmder Default `cmd.exe` Shell Startup Behaviour Using Task Arguments
|
||||
|
||||
1. Press <kbd>Win</kbd> + <kbd>Alt</kbd> + <kbd>T</kbd>
|
||||
1. Click either:
|
||||
* `1. {cmd::Cmder as Admin}`
|
||||
* `2. {cmd::Cmder}`
|
||||
1. Add command line argumentswhere specified below:
|
||||
1. Add command line arguments where specified below:
|
||||
|
||||
*Note: Pay attention to the quotes!*
|
||||
|
||||
@ -138,80 +141,82 @@ You may find some Monokai color schemes for mintty to match Cmder [here](https:/
|
||||
|
||||
##### Command Line Arguments for `init.bat`
|
||||
|
||||
| Argument | Description | Default |
|
||||
| ----------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------- |
|
||||
| /c [user cmder root] | Enables user bin and config folders for 'Cmder as admin' sessions due to non-shared environment. | not set |
|
||||
| /d | Enables debug output. | not set |
|
||||
| /git_install_root [file path] | User specified Git installation root path. | '%CMDER_ROOT%\vendor\Git-for-Windows' |
|
||||
| /home [home folder] | User specified folder path to set `%HOME%` environment variable. | '%userprofile%' |
|
||||
| /max_depth [1-5] | Define max recurse depth when adding to the path for `%cmder_root%\bin` and `%cmder_user_bin%` | 1 |
|
||||
| /svn_ssh [path to ssh.exe] | Define %SVN_SSH% so we can use git svn with ssh svn repositories. | '%GIT_INSTALL_ROOT%\bin\ssh.exe' |
|
||||
| /user_aliases [file path] | File path pointing to user aliases. | '%CMDER_ROOT%\config\user-liases.cmd' |
|
||||
| /v | Enables verbose output. | not set |
|
||||
| Argument | Description | Default |
|
||||
| ----------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------- |
|
||||
| `/c [user cmder root]` | Enables user bin and config folders for 'Cmder as admin' sessions due to non-shared environment. | not set |
|
||||
| `/d` | Enables debug output. | not set |
|
||||
| `/f` | Enables Cmder Fast Init Mode. This disables some features, see pull request [#1492](https://github.com/cmderdev/cmder/pull/1942) for more details. | not set |
|
||||
| `/git_install_root [file path]` | User specified Git installation root path. | `%CMDER_ROOT%\vendor\Git-for-Windows` |
|
||||
| `/home [home folder]` | User specified folder path to set `%HOME%` environment variable. | `%userprofile%` |
|
||||
| `/max_depth [1-5]` | Define max recurse depth when adding to the path for `%cmder_root%\bin` and `%cmder_user_bin%` | 1 |
|
||||
| `/svn_ssh [path to ssh.exe]` | Define `%SVN_SSH%` so we can use git svn with ssh svn repositories. | `%GIT_INSTALL_ROOT%\bin\ssh.exe` |
|
||||
| `/user_aliases [file path]` | File path pointing to user aliases. | `%CMDER_ROOT%\config\user-aliases.cmd` |
|
||||
| `/v` | Enables verbose output. | not set |
|
||||
| (custom arguments) | User defined arguments processed by `cexec`. Type `cexec /?` for more useage. | not set |
|
||||
|
||||
### Cmder Shell User Config
|
||||
Single user portable configuration is possible using the cmder specific shell config files. Edit the below files to add your own configuration:
|
||||
|
||||
| Shell | Cmder Portable User Config |
|
||||
| ------------- | ----------------------------------------- |
|
||||
| Cmder | %CMDER_ROOT%\\config\\user-profile.cmd |
|
||||
| PowerShell | $ENV:CMDER_ROOT\\config\\user-profile.ps1 |
|
||||
| Bash/Mintty | $CMDER_ROOT/config/user-profile.sh |
|
||||
| Cmder | `%CMDER_ROOT%\config\user_profile.cmd` |
|
||||
| PowerShell | `$ENV:CMDER_ROOT\config\user_profile.ps1` |
|
||||
| Bash/Mintty | `$CMDER_ROOT/config/user_profile.sh` |
|
||||
|
||||
Note: Bash and Mintty sessions will also source the '$HOME/.bashrc' file if it exists after it sources '$CMDER_ROOT/config/user-profile.sh'.
|
||||
Note: Bash and Mintty sessions will also source the `$HOME/.bashrc` file if it exists after it sources `$CMDER_ROOT/config/user_profile.sh`.
|
||||
|
||||
You can write *.cmd|*.bat, *.ps1, and *.sh scripts and just drop them in the %CMDER_ROOT%\config\profile.d folder to add startup config to Cmder.
|
||||
You can write `*.cmd|*.bat`, `*.ps1`, and `*.sh` scripts and just drop them in the `%CMDER_ROOT%\config\profile.d` folder to add startup config to Cmder.
|
||||
|
||||
| Shell | Cmder 'Profile.d' Scripts |
|
||||
| Shell | Cmder `Profile.d` Scripts |
|
||||
| ------------- | --------------------------------------------------|
|
||||
| Cmder | %CMDER_ROOT%\\config\\profile.d\\\*.bat and *.cmd |
|
||||
| PowerShell | $ENV:CMDER_ROOT\\config\\profile.d\\\*.ps1 |
|
||||
| Bash/Mintty | $CMDER_ROOT/config/profile.d/*.sh |
|
||||
| Cmder | `%CMDER_ROOT%\config\profile.d\*.bat and *.cmd` |
|
||||
| PowerShell | `$ENV:CMDER_ROOT\config\profile.d\*.ps1` |
|
||||
| Bash/Mintty | `$CMDER_ROOT/config/profile.d/*.sh` |
|
||||
|
||||
### Aliases
|
||||
#### Cmder(Cmd.exe) Aliases
|
||||
#### Cmder(`Cmd.exe`) Aliases
|
||||
You can define simple aliases for `cmd.exe` sessions with a command like `alias name=command`. Cmd.exe aliases support optional parameters through the `$1-9` or the `$*` special characters so the alias `vi=vim.exe $*` typed as `vi [filename]` will open `[filename]` in `vim.exe`.
|
||||
|
||||
Cmd.exe aliases can also be more complex. See: [DOSKEY.EXE documentation](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/doskey.mspx?mfr=true) for additional details on complex aliases/macros for 'cmd.exe'
|
||||
Cmd.exe aliases can also be more complex. See: [DOSKEY.EXE documentation](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/doskey.mspx?mfr=true) for additional details on complex aliases/macros for `cmd.exe`
|
||||
|
||||
Aliases defined using the `alias.bat` command will automatically be saved in the `%CMDER_ROOT%\config\user-aliases.cmd` file
|
||||
|
||||
To make an alias and/or any other profile settings permanent add it to one of the following:
|
||||
|
||||
Note: These are loaded in this order by '$CMDER_ROOT/vendor/init.bat'. Anyhing stored in '%CMDER_ROOT%' will be a portable setting and will follow cmder to another machine.
|
||||
Note: These are loaded in this order by `$CMDER_ROOT/vendor/init.bat`. Anything stored in `%CMDER_ROOT%` will be a portable setting and will follow cmder to another machine.
|
||||
|
||||
* '%CMDER_ROOT%\\config\\profile.d\\\*.cmd and \*.bat'
|
||||
* '%CMDER_ROOT%\\config\\user-aliases.cmd'
|
||||
* '%CMDER_ROOT%\\config\\user-profile.cmd'
|
||||
* `%CMDER_ROOT%\config\profile.d\*.cmd` and `\*.bat`
|
||||
* `%CMDER_ROOT%\config\user-aliases.cmd`
|
||||
* `%CMDER_ROOT%\config\user_profile.cmd`
|
||||
|
||||
#### Bash.exe|Mintty.exe Aliases
|
||||
Bash shells support simple and complex aliases with optional parameters natively so they work a little different. Typing `alias name=command` will create an alias only for the current running session.
|
||||
|
||||
To make an alias and/or any other profile settings permanent add it to one of the following:
|
||||
|
||||
Note: These are loaded in this order by '$CMDER_ROOT/vendor/git-for-windows/etc/profile.d/cmder.sh'. Anyhing stored in '$CMDER_ROOT' will be a portable setting and will follow cmder to another machine.
|
||||
Note: These are loaded in this order by `$CMDER_ROOT/vendor/git-for-windows/etc/profile.d/cmder.sh`. Anything stored in `$CMDER_ROOT` will be a portable setting and will follow cmder to another machine.
|
||||
|
||||
* '$CMDER_ROOT/config/profile.d/*.sh'
|
||||
* '$CMDER_ROOT/config/user-profile.sh'
|
||||
* '$HOME/.bashrc'
|
||||
* `$CMDER_ROOT/config/profile.d/*.sh`
|
||||
* `$CMDER_ROOT/config/user_profile.sh`
|
||||
* `$HOME/.bashrc`
|
||||
|
||||
If you add bash aliases to `$CMDER_ROOT/config/user-profile.sh` they will be portable and follow your Cmder folder if you copy it to another machine. `$HOME/.bashrc` defined aliases are not portable.
|
||||
If you add bash aliases to `$CMDER_ROOT/config/user_profile.sh` they will be portable and follow your Cmder folder if you copy it to another machine. `$HOME/.bashrc` defined aliases are not portable.
|
||||
|
||||
#### PowerShell.exe Aliases
|
||||
PowerShell has native simple alias support, for example `[new-alias | set-alias] alias command`, so complex aliases with optional parameters are not supported in PowerShell sessions. Type `get-help [new-alias|set-alias] -full` for help on PowerShell aliases.
|
||||
|
||||
To make an alias and/or any other profile settings permanent add it to one of the following:
|
||||
|
||||
Note: These are loaded in this order by '$ENV:CMDER_ROOT\\vendor\\user-profile.ps1'. Anyhing stored in '$ENV:CMDER_ROOT' will be a portable setting and will follow cmder to another machine.
|
||||
Note: These are loaded in this order by `$ENV:CMDER_ROOT\vendor\user_profile.ps1`. Anything stored in `$ENV:CMDER_ROOT` will be a portable setting and will follow cmder to another machine.
|
||||
|
||||
* '$ENV:CMDER_ROOT\\config\\profile.d\\\*.ps1'
|
||||
* '$ENV:CMDER_ROOT\\config\\user-profile.ps1'
|
||||
* `$ENV:CMDER_ROOT\config\profile.d\*.ps1`
|
||||
* `$ENV:CMDER_ROOT\config\user_profile.ps1`
|
||||
|
||||
### SSH Agent
|
||||
|
||||
To start the vendored SSH agent simply call `start-ssh-agent`, which is in the `vendor/git-for-windows/cmd` folder.
|
||||
|
||||
If you want to run SSH agent on startup, include the line `@call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd"` in `%CMDER_ROOT%/config/user-profile.cmd` (usually just uncomment it).
|
||||
If you want to run SSH agent on startup, include the line `@call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd"` in `%CMDER_ROOT%/config/user_profile.cmd` (usually just uncomment it).
|
||||
|
||||
### Vendored Git
|
||||
|
||||
@ -223,22 +228,22 @@ You may use your favorite version of Git by including its path in the `%PATH%` e
|
||||
|
||||
You may run bash (the default shell used on Linux, macOS and GNU/Hurd) externally on Cmder, using the following instructions:
|
||||
|
||||
1. Setup a new task by pressing '<kbd>Win</kbd> +<kbd>Alt</kbd> + <kbd>T</kbd>'.
|
||||
1. Click the '+' button to add a task.
|
||||
1. Setup a new task by pressing <kbd>Win</kbd> +<kbd>Alt</kbd> + <kbd>T</kbd>.
|
||||
1. Click the `+` button to add a task.
|
||||
1. Name the new task in the top text box.
|
||||
1. Provide task parameters, this is optional.
|
||||
1. Add ```cmd /c "[path_to_external_env]\bin\bash --login -i" -new_console``` to the `Commands` text box.
|
||||
1. Add `cmd /c "[path_to_external_env]\bin\bash --login -i" -new_console` to the `Commands` text box.
|
||||
|
||||
**Recommended Optional Steps:**
|
||||
|
||||
Copy the 'vendor/cmder_exinit' file to the Cygwin/Babun, MSys2, or Git for Windows SDK environments ```/etc/profile.d/``` folder to use portable settings in the $CMDER_ROOT/config folder.
|
||||
Copy the `vendor/cmder_exinit` file to the Cygwin/Babun, MSys2, or Git for Windows SDK environments `/etc/profile.d/` folder to use portable settings in the `$CMDER_ROOT/config` folder.
|
||||
|
||||
Note: MinGW could work if the init scripts include profile.d but this has not been tested.
|
||||
Note: MinGW could work if the init scripts include `profile.d` but this has not been tested.
|
||||
|
||||
The destination file extension depends on the shell you use in that environment. For example:
|
||||
|
||||
* bash - Copy to /etc/profile.d/cmder_exinit.sh
|
||||
* zsh - Copy to /etc/profile.d/cmder_exinit.zsh
|
||||
* bash - Copy to `/etc/profile.d/cmder_exinit.sh`
|
||||
* zsh - Copy to `/etc/profile.d/cmder_exinit.zsh`
|
||||
|
||||
Uncomment and edit the below line in the script to use Cmder config even when launched from outside Cmder.
|
||||
|
||||
@ -246,7 +251,56 @@ Uncomment and edit the below line in the script to use Cmder config even when la
|
||||
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
||||
```
|
||||
|
||||
### Integrating Cmder with [Hyper](https://github.com/zeit/hyper), [Microsoft VS Code](https://code.visualstudio.com/), and your favorite IDEs
|
||||
### Customizing user sessions using `init.bat` custom arguments.
|
||||
|
||||
You can pass custom arguments to `init.bat` and use `cexec.cmd` in your `user_profile.cmd` to evaluate these
|
||||
arguments then execute commands based on a particular flag being detected or not.
|
||||
|
||||
`init.bat` creates two shortcuts for using `cexec.cmd` in your profile scripts.
|
||||
|
||||
#### `%ccall%` - Evaluates flags, runs commands if found, and returns to the calling script and continues.
|
||||
|
||||
```
|
||||
ccall=call C:\Users\user\cmderdev\vendor\bin\cexec.cmd
|
||||
```
|
||||
|
||||
Example: `%ccall% /startnotepad start notepad.exe`
|
||||
|
||||
#### `%cexec%` - Evaluates flags, runs commands if found, and does not return to the calling script.
|
||||
|
||||
```
|
||||
cexec=C:\Users\user\cmderdev\vendor\bin\cexec.cmd
|
||||
```
|
||||
|
||||
Example: `%cexec% /startnotepad start notepad.exe`
|
||||
|
||||
It is useful when you have multiple tasks to execute `cmder` and need it to initialize
|
||||
the session differently depending on the task chosen.
|
||||
|
||||
To conditionally start `notepad.exe` when you start a specific `cmder` task:
|
||||
|
||||
* Press <kbd>win</kbd>+<kbd>alt</kbd>+<kbd>t</kbd>
|
||||
* Click `+` to add a new task.
|
||||
* Add the below to the `Commands` block:
|
||||
|
||||
```batch
|
||||
|
||||
cmd.exe /k ""%ConEmuDir%\..\init.bat" /startnotepad"
|
||||
|
||||
```
|
||||
|
||||
* Add the below to your `%cmder_root%\config\user_profile.cmd`
|
||||
|
||||
```batch
|
||||
|
||||
%ccall% "/startNotepad" "start" "notepad.exe"`
|
||||
|
||||
```
|
||||
|
||||
To see detailed usage of `cexec`, type `cexec /?` in cmder.
|
||||
|
||||
### Integrating Cmder with [Hyper](https://github.com/zeit/hyper), [Microsoft VS Code](https://code.visualstudio.com/), and your favorite IDEs
|
||||
|
||||
Cmder by default comes with a vendored ConEmu installation as the underlying terminal emulator, as stated [here](https://conemu.github.io/en/cmder.html).
|
||||
|
||||
However, Cmder can in fact run in a variety of other terminal emulators, and even integrated IDEs. Assuming you have the latest version of Cmder, follow the following instructions to get Cmder working with your own terminal emulator.
|
||||
@ -257,26 +311,26 @@ For instructions on how to integrate Cmder with your IDE, please read our [Wiki
|
||||
|
||||
The process of upgrading Cmder depends on the version/build you are currently running.
|
||||
|
||||
If you have a `[cmder_root]/config/user-conemu.xml`, you are running a newer version of Cmder, follow the below process:
|
||||
If you have a `[cmder_root]/config/user-conemu.xml`, you are running a newer version of Cmder, follow the below process:
|
||||
|
||||
1. Exit all Cmder sessions and relaunch `[cmder_root]/cmder.exe`, this backs up your existing `[cmder_root]/vendor/conemu-maximus5/conemu.xml` to `[cmder_root]/config/user-conemu.xml`.
|
||||
|
||||
|
||||
* The `[cmder_root]/config/user-conemu.xml` contains any custom settings you have made using the 'Setup Tasks' settings dialog.
|
||||
|
||||
2. Exit all Cmder sessions and backup any files you have manually edited under `[cmder_root]/vendor`.
|
||||
|
||||
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in '[cmder_root]/config' folder.
|
||||
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in `[cmder_root]/config` folder.
|
||||
|
||||
3. Delete the `[cmder_root]/vendor` folder.
|
||||
4. Extract the new `cmder.zip` or `cmder_mini.zip` into `[cmder_root]/` overwriting all files when prompted.
|
||||
|
||||
If you do not have a `[cmder_root]/config/user-conemu.xml`, you are running an older version of cmder, follow the below process:
|
||||
If you do not have a `[cmder_root]/config/user-conemu.xml`, you are running an older version of cmder, follow the below process:
|
||||
|
||||
1. Exit all Cmder sessions and backup `[cmder_root]/vendor/conemu-maximus5/conemu.xml` to `[cmder_root]/config/user-conemu.xml`.
|
||||
|
||||
2. Backup any files you have manually edited under `[cmder_root]/vendor`.
|
||||
|
||||
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in '[cmder_root]/config' folder.
|
||||
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in `[cmder_root]/config` folder.
|
||||
|
||||
3. Delete the `[cmder_root]/vendor` folder.
|
||||
4. Extract the new `cmder.zip` or `cmder_mini.zip` into `[cmder_root]/` overwriting all files when prompted.
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <iostream>
|
||||
|
||||
#pragma comment(lib, "Shlwapi.lib")
|
||||
#pragma warning( disable : 4091 )
|
||||
|
||||
#ifndef UNICODE
|
||||
#error "Must be compiled with unicode support."
|
||||
@ -68,7 +69,7 @@ bool FileExists(const wchar_t * filePath)
|
||||
return false;
|
||||
}
|
||||
|
||||
void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstring taskName = L"", std::wstring cfgRoot = L"")
|
||||
void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstring taskName = L"", std::wstring cfgRoot = L"", bool use_user_cfg = true)
|
||||
{
|
||||
#if USE_TASKBAR_API
|
||||
wchar_t appId[MAX_PATH] = { 0 };
|
||||
@ -85,7 +86,13 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
|
||||
wchar_t userConfigDirPath[MAX_PATH] = { 0 };
|
||||
wchar_t userBinDirPath[MAX_PATH] = { 0 };
|
||||
wchar_t userProfiledDirPath[MAX_PATH] = { 0 };
|
||||
wchar_t userProfilePath[MAX_PATH] = { 0 };
|
||||
wchar_t legacyUserProfilePath[MAX_PATH] = { 0 };
|
||||
wchar_t userAliasesPath[MAX_PATH] = { 0 };
|
||||
wchar_t legacyUserAliasesPath[MAX_PATH] = { 0 };
|
||||
wchar_t args[MAX_PATH * 2 + 256] = { 0 };
|
||||
wchar_t userConEmuCfgPath[MAX_PATH] = { 0 };
|
||||
|
||||
|
||||
std::wstring cmderStart = path;
|
||||
std::wstring cmderTask = taskName;
|
||||
@ -104,12 +111,54 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
|
||||
PathCombine(icoPath, exeDir, L"icons\\cmder.ico");
|
||||
|
||||
PathCombine(configDirPath, exeDir, L"config");
|
||||
|
||||
/*
|
||||
Convert legacy user-profile.cmd to new name user_profile.cmd
|
||||
*/
|
||||
PathCombine(legacyUserProfilePath, configDirPath, L"user-profile.cmd");
|
||||
if (PathFileExists(legacyUserProfilePath))
|
||||
{
|
||||
PathCombine(userProfilePath, configDirPath, L"user_profile.cmd");
|
||||
|
||||
char *lPr = (char *)malloc(MAX_PATH);
|
||||
char *pR = (char *)malloc(MAX_PATH);
|
||||
size_t i;
|
||||
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
|
||||
legacyUserProfilePath, (size_t)MAX_PATH);
|
||||
wcstombs_s(&i, pR, (size_t)MAX_PATH,
|
||||
userProfilePath, (size_t)MAX_PATH);
|
||||
rename(lPr, pR);
|
||||
}
|
||||
|
||||
/*
|
||||
Convert legacy user-aliases.cmd to new name user_aliases.cmd
|
||||
*/
|
||||
PathCombine(legacyUserAliasesPath, configDirPath, L"user-aliases.cmd");
|
||||
if (PathFileExists(legacyUserAliasesPath))
|
||||
{
|
||||
PathCombine(userAliasesPath, configDirPath, L"user_aliases.cmd");
|
||||
|
||||
char *lPr = (char *)malloc(MAX_PATH);
|
||||
char *pR = (char *)malloc(MAX_PATH);
|
||||
size_t i;
|
||||
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
|
||||
legacyUserAliasesPath, (size_t)MAX_PATH);
|
||||
wcstombs_s(&i, pR, (size_t)MAX_PATH,
|
||||
userAliasesPath, (size_t)MAX_PATH);
|
||||
rename(lPr, pR);
|
||||
}
|
||||
|
||||
/*
|
||||
Was /c [path] specified?
|
||||
*/
|
||||
if (wcscmp(userConfigDirPath, L"") == 0)
|
||||
{
|
||||
// No - It wasn't.
|
||||
PathCombine(userConfigDirPath, exeDir, L"config");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Yes - It was.
|
||||
PathCombine(userBinDirPath, userConfigDirPath, L"bin");
|
||||
SHCreateDirectoryEx(0, userBinDirPath, 0);
|
||||
|
||||
@ -118,113 +167,226 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
|
||||
|
||||
PathCombine(userProfiledDirPath, userConfigDirPath, L"profile.d");
|
||||
SHCreateDirectoryEx(0, userProfiledDirPath, 0);
|
||||
|
||||
/*
|
||||
Convert legacy user-profile.cmd to new name user_profile.cmd
|
||||
*/
|
||||
PathCombine(legacyUserProfilePath, userConfigDirPath, L"user-profile.cmd");
|
||||
if (PathFileExists(legacyUserProfilePath))
|
||||
{
|
||||
PathCombine(userProfilePath, userConfigDirPath, L"user_profile.cmd");
|
||||
|
||||
char *lPr = (char *)malloc(MAX_PATH);
|
||||
char *pR = (char *)malloc(MAX_PATH);
|
||||
size_t i;
|
||||
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
|
||||
legacyUserProfilePath, (size_t)MAX_PATH);
|
||||
wcstombs_s(&i, pR, (size_t)MAX_PATH,
|
||||
userProfilePath, (size_t)MAX_PATH);
|
||||
rename(lPr, pR);
|
||||
}
|
||||
|
||||
/*
|
||||
Convert legacy user-aliases.cmd to new name user_aliases.cmd
|
||||
*/
|
||||
PathCombine(legacyUserAliasesPath, userConfigDirPath, L"user-aliases.cmd");
|
||||
if (PathFileExists(legacyUserAliasesPath))
|
||||
{
|
||||
PathCombine(userAliasesPath, userConfigDirPath, L"user_aliases.cmd");
|
||||
|
||||
char *lPr = (char *)malloc(MAX_PATH);
|
||||
char *pR = (char *)malloc(MAX_PATH);
|
||||
size_t i;
|
||||
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
|
||||
legacyUserAliasesPath, (size_t)MAX_PATH);
|
||||
wcstombs_s(&i, pR, (size_t)MAX_PATH,
|
||||
userAliasesPath, (size_t)MAX_PATH);
|
||||
rename(lPr, pR);
|
||||
}
|
||||
}
|
||||
|
||||
// Set path to vendored ConEmu config file
|
||||
PathCombine(cfgPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.xml");
|
||||
|
||||
// Set path to Cmder default ConEmu config file
|
||||
PathCombine(defaultCfgPath, exeDir, L"config\\ConEmu.xml");
|
||||
PathCombine(defaultCfgPath, exeDir, L"vendor\\ConEmu.xml.default");
|
||||
|
||||
// Check for machine-specific then user config source file.
|
||||
PathCombine(cpuCfgPath, userConfigDirPath, L"ConEmu-%COMPUTERNAME%.xml");
|
||||
ExpandEnvironmentStrings(cpuCfgPath, cpuCfgPath, sizeof(cpuCfgPath) / sizeof(cpuCfgPath[0]));
|
||||
|
||||
// Set path to Cmder user ConEmu config file
|
||||
PathCombine(userCfgPath, userConfigDirPath, L"user-ConEmu.xml");
|
||||
|
||||
if (PathFileExists(cpuCfgPath)) {
|
||||
if (PathFileExists(cfgPath)) {
|
||||
if (!CopyFile(cfgPath, cpuCfgPath, FALSE))
|
||||
if ( PathFileExists(cpuCfgPath) || use_user_cfg == false ) // config/ConEmu-%COMPUTERNAME%.xml file exists or /m was specified on command line, use machine specific config.
|
||||
{
|
||||
if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
|
||||
{
|
||||
if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml file exists, copy vendor/conemu-maximus5/ConEmu.xml to config/ConEmu-%COMPUTERNAME%.xml.
|
||||
{
|
||||
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);
|
||||
if (!CopyFile(cfgPath, cpuCfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml! Access Denied."
|
||||
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
else // vendor/conemu-maximus5/ConEmu.xml config file does not exist, copy config/ConEmu-%COMPUTERNAME%.xml to vendor/conemu-maximus5/ConEmu.xml file
|
||||
{
|
||||
if (!CopyFile(cpuCfgPath, cfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy conig/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
|
||||
: L"Failed to copy config/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
else // '/c [path]' was specified, don't copy anything and use existing conemu-%COMPUTERNAME%.xml to start comemu.
|
||||
{
|
||||
if (!CopyFile(cpuCfgPath, cfgPath, FALSE))
|
||||
if (use_user_cfg == false && PathFileExists(cfgPath) && !PathFileExists(cpuCfgPath)) // vendor/conemu-maximus5/ConEmu.xml file exists, copy vendor/conemu-maximus5/ConEmu.xml to config/ConEmu-%COMPUTERNAME%.xml.
|
||||
{
|
||||
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);
|
||||
if (!CopyFile(cfgPath, cpuCfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml! Access Denied."
|
||||
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
PathCombine(userConEmuCfgPath, userConfigDirPath, L"ConEmu-%COMPUTERNAME%.xml");
|
||||
ExpandEnvironmentStrings(userConEmuCfgPath, userConEmuCfgPath, sizeof(userConEmuCfgPath) / sizeof(userConEmuCfgPath[0]));
|
||||
}
|
||||
}
|
||||
else if (PathFileExists(userCfgPath)) {
|
||||
if (PathFileExists(cfgPath)) {
|
||||
else if (PathFileExists(userCfgPath)) // config/user_conemu.xml exists, use it.
|
||||
{
|
||||
if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
|
||||
{
|
||||
if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml.
|
||||
{
|
||||
if (!CopyFile(cfgPath, userCfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied."
|
||||
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
else // vendor/conemu-maximus5/ConEmu.xml does not exist, copy config/user-conemu.xml to vendor/conemu-maximus5/ConEmu.xml
|
||||
{
|
||||
if (!CopyFile(userCfgPath, cfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
|
||||
: L"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else // '/c [path]' was specified, don't copy anything and use existing user_conemu.xml to start comemu.
|
||||
{
|
||||
PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml");
|
||||
}
|
||||
}
|
||||
else if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
|
||||
{
|
||||
if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml
|
||||
{
|
||||
if (!CopyFile(cfgPath, userCfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy ConEmu.xml file to backup location! Restart Cmder as Administrator."
|
||||
: L"Failed to copy ConEmu.xml file to backup location!", MB_TITLE, MB_ICONSTOP);
|
||||
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied."
|
||||
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
else // vendor/ConEmu.xml.default config exists, copy Cmder vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml.
|
||||
{
|
||||
if (!CopyFile(defaultCfgPath, cfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
|
||||
: L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!CopyFile(userCfgPath, cfgPath, FALSE))
|
||||
else {
|
||||
if (!CopyFile(defaultCfgPath, cfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy ConEmu.xml file to vendored ConEmu.xml location! Restart Cmder as Administrator."
|
||||
: L"Failed to copy ConEmu.xml file to vendored ConEmu.xml location!", MB_TITLE, MB_ICONSTOP);
|
||||
? L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
|
||||
: L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (PathFileExists(cfgPath)) {
|
||||
else if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml
|
||||
{
|
||||
if (!CopyFile(cfgPath, userCfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy ConEmu.xml file to user-conemu.xml backup location! Restart Cmder as Administrator."
|
||||
: L"Failed to copy ConEmu.xml file to user-conemu.xml backup location!", MB_TITLE, MB_ICONSTOP);
|
||||
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied."
|
||||
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml");
|
||||
}
|
||||
else {
|
||||
if (!CopyFile(defaultCfgPath, cfgPath, FALSE))
|
||||
else // '/c [path]' was specified and 'vendor/ConEmu.xml.default' config exists, copy Cmder 'vendor/ConEmu.xml.default' file to '[user specified path]/config/user_ConEmu.xml'.
|
||||
{
|
||||
if ( ! CopyFile(defaultCfgPath, userCfgPath, 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);
|
||||
? L"Failed to copy vendor/ConEmu.xml.default file to [user specified path]/config/user_ConEmu.xml! Access Denied."
|
||||
: L"Failed to copy vendor/ConEmu.xml.default file to [user specified path]/config/user_ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml");
|
||||
}
|
||||
|
||||
SYSTEM_INFO sysInfo;
|
||||
GetNativeSystemInfo(&sysInfo);
|
||||
if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
|
||||
if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
|
||||
{
|
||||
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu64.exe");
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.exe");
|
||||
}
|
||||
|
||||
swprintf_s(args, L"%s /Icon \"%s\" /Title Cmder", args, icoPath);
|
||||
|
||||
if (!streqi(cmderStart.c_str(), L""))
|
||||
{
|
||||
swprintf_s(args, L"%s /dir \"%s\"", args, cmderStart.c_str());
|
||||
}
|
||||
|
||||
if (is_single_mode)
|
||||
{
|
||||
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());
|
||||
}
|
||||
swprintf_s(args, L"%s /single", args);
|
||||
}
|
||||
else
|
||||
|
||||
if (!streqi(cmderTask.c_str(), L""))
|
||||
{
|
||||
if (!streqi(cmderTask.c_str(), L"")) {
|
||||
swprintf_s(args, L"/Icon \"%s\" /Title Cmder /dir \"%s\" /run {%s}", icoPath, cmderStart.c_str(), cmderTask.c_str());
|
||||
}
|
||||
else {
|
||||
swprintf_s(args, L"%s /Icon \"%s\" /Title Cmder /dir \"%s\"", args, icoPath, cmderStart.c_str());
|
||||
}
|
||||
swprintf_s(args, L"%s /run {%s}", args, cmderTask.c_str());
|
||||
}
|
||||
|
||||
if (cfgRoot.length() != 0)
|
||||
{
|
||||
swprintf_s(args, L"%s -loadcfgfile \"%s\"", args, userConEmuCfgPath);
|
||||
}
|
||||
|
||||
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
||||
@ -290,8 +452,10 @@ HKEY GetRootKey(std::wstring opt)
|
||||
return root;
|
||||
}
|
||||
|
||||
void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
||||
void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName, std::wstring cfgRoot = L"")
|
||||
{
|
||||
wchar_t userConfigDirPath[MAX_PATH] = { 0 };
|
||||
|
||||
// First, get the paths we will use
|
||||
|
||||
wchar_t exePath[MAX_PATH] = { 0 };
|
||||
@ -300,7 +464,16 @@ void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
||||
GetModuleFileName(NULL, exePath, sizeof(exePath));
|
||||
|
||||
wchar_t commandStr[MAX_PATH + 20] = { 0 };
|
||||
swprintf_s(commandStr, L"\"%s\" \"%%V\"", exePath);
|
||||
|
||||
if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
|
||||
{
|
||||
swprintf_s(commandStr, L"\"%s\" \"%%V\"", exePath);
|
||||
}
|
||||
else {
|
||||
std::copy(cfgRoot.begin(), cfgRoot.end(), userConfigDirPath);
|
||||
userConfigDirPath[cfgRoot.length()] = 0;
|
||||
swprintf_s(commandStr, L"\"%s\" /c \"%s\" \"%%V\"", exePath, userConfigDirPath);
|
||||
}
|
||||
|
||||
// Now that we have `commandStr`, it's OK to change `exePath`...
|
||||
PathRemoveFileSpec(exePath);
|
||||
@ -346,6 +519,7 @@ struct cmderOptions
|
||||
std::wstring cmderTask = L"";
|
||||
std::wstring cmderRegScope = L"USER";
|
||||
bool cmderSingle = false;
|
||||
bool cmderUserCfg = true;
|
||||
bool registerApp = false;
|
||||
bool unRegisterApp = false;
|
||||
bool error = false;
|
||||
@ -361,76 +535,106 @@ cmderOptions GetOption()
|
||||
|
||||
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]))
|
||||
if (cmderOptions.error == false) {
|
||||
if (_wcsicmp(L"/c", szArgList[i]) == 0)
|
||||
{
|
||||
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)
|
||||
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.cmderRegScope = szArgList[i + 1];
|
||||
cmderOptions.cmderCfgRoot = szArgList[i + 1];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (_wcsicmp(L"/unregister", szArgList[i]) == 0)
|
||||
{
|
||||
cmderOptions.unRegisterApp = true;
|
||||
cmderOptions.registerApp = false;
|
||||
if (szArgList[i + 1] != NULL)
|
||||
else if (_wcsicmp(L"/start", szArgList[i]) == 0)
|
||||
{
|
||||
if (_wcsicmp(L"all", szArgList[i + 1]) == 0 || _wcsicmp(L"user", szArgList[i + 1]) == 0)
|
||||
int len = wcslen(szArgList[i + 1]);
|
||||
if (wcscmp(&szArgList[i + 1][len - 1], L"\"") == 0)
|
||||
{
|
||||
cmderOptions.cmderRegScope = szArgList[i + 1];
|
||||
szArgList[i + 1][len - 1] = '\0';
|
||||
}
|
||||
|
||||
if (PathFileExists(szArgList[i + 1]))
|
||||
{
|
||||
cmderOptions.cmderStart = szArgList[i + 1];
|
||||
i++;
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox(NULL, szArgList[i + 1], L"/START - Folder does 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"/m", szArgList[i]) == 0)
|
||||
{
|
||||
cmderOptions.cmderUserCfg = false;
|
||||
}
|
||||
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"")
|
||||
{
|
||||
int len = wcslen(szArgList[i]);
|
||||
if (wcscmp(&szArgList[i][len - 1], L"\"") == 0)
|
||||
{
|
||||
szArgList[i][len - 1] = '\0';
|
||||
}
|
||||
|
||||
if (PathFileExists(szArgList[i]))
|
||||
{
|
||||
cmderOptions.cmderStart = szArgList[i];
|
||||
i++;
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox(NULL, 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\n /m\n\nor\n\n /register [USER | ALL]\n\nor\n\n /unregister [USER | ALL]\n", MB_TITLE, MB_OK);
|
||||
cmderOptions.error = true;
|
||||
}
|
||||
}
|
||||
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\n /m\n\nor\n\n /register [USER | ALL]\n\nor\n\n /unregister [USER | ALL]\n", MB_TITLE, MB_OK);
|
||||
cmderOptions.error = true;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -450,9 +654,10 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
||||
|
||||
cmderOptions cmderOptions = GetOption();
|
||||
|
||||
if (cmderOptions.registerApp == true) {
|
||||
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
|
||||
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM);
|
||||
if (cmderOptions.registerApp == true)
|
||||
{
|
||||
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND, cmderOptions.cmderCfgRoot);
|
||||
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM, cmderOptions.cmderCfgRoot);
|
||||
}
|
||||
else if (cmderOptions.unRegisterApp == true)
|
||||
{
|
||||
@ -465,7 +670,7 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
||||
}
|
||||
else
|
||||
{
|
||||
StartCmder(cmderOptions.cmderStart, cmderOptions.cmderSingle, cmderOptions.cmderTask, cmderOptions.cmderCfgRoot);
|
||||
StartCmder(cmderOptions.cmderStart, cmderOptions.cmderSingle, cmderOptions.cmderTask, cmderOptions.cmderCfgRoot, cmderOptions.cmderUserCfg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -508,7 +508,7 @@
|
||||
<value name="Name" type="string" data="{PowerShell::PowerShell as Admin}"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Cmd1" type="string" data="*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''""/>
|
||||
<value name="Cmd1" type="string" data="*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression 'Import-Module ''%ConEmuDir%\..\profile.ps1'''""/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
@ -517,7 +517,7 @@
|
||||
<value name="Name" type="string" data="{PowerShell::PowerShell}"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Cmd1" type="string" data="PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''""/>
|
||||
<value name="Cmd1" type="string" data="PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression 'Import-Module ''%ConEmuDir%\..\profile.ps1'''""/>
|
||||
<value name="Cmd2" type="string" data=""%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe""/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
16
bin/alias.bat → vendor/bin/alias.cmd
vendored
16
bin/alias.bat → vendor/bin/alias.cmd
vendored
@ -2,7 +2,7 @@
|
||||
|
||||
|
||||
if "%ALIASES%" == "" (
|
||||
set ALIASES="%CMDER_ROOT%\config\user-aliases.cmd"
|
||||
set ALIASES="%CMDER_ROOT%\config\user_aliases.cmd"
|
||||
)
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
@ -40,7 +40,7 @@ goto parseargument
|
||||
) else if "%currentarg%" neq "" (
|
||||
if "%~2" equ "" (
|
||||
:: Show the specified alias
|
||||
doskey /macros | findstr /b %currentarg%= && exit /b
|
||||
doskey /macros | %WINDIR%\System32\findstr /b %currentarg%= && exit /b
|
||||
echo insufficient parameters.
|
||||
goto :p_help
|
||||
) else (
|
||||
@ -50,7 +50,7 @@ goto parseargument
|
||||
)
|
||||
rem #endregion parseargument
|
||||
|
||||
if "%ALIASES%" neq "%CMDER_ROOT%\config\user-aliases.cmd" (
|
||||
if "%ALIASES%" neq "%CMDER_ROOT%\config\user_aliases.cmd" (
|
||||
set _x=!_x:/f "%ALIASES%" =!
|
||||
|
||||
if not exist "%ALIASES%" (
|
||||
@ -85,7 +85,7 @@ if not ["%_temp%"] == ["%alias_name%"] (
|
||||
)
|
||||
|
||||
:: replace already defined alias
|
||||
findstr /b /v /i "%alias_name%=" "%ALIASES%" >> "%ALIASES%.tmp"
|
||||
%WINDIR%\System32\findstr /b /v /i "%alias_name%=" "%ALIASES%" >> "%ALIASES%.tmp"
|
||||
echo %alias_name%=%alias_value% >> "%ALIASES%.tmp" && type "%ALIASES%.tmp" > "%ALIASES%" & @del /f /q "%ALIASES%.tmp"
|
||||
doskey /macrofile="%ALIASES%"
|
||||
endlocal
|
||||
@ -93,7 +93,7 @@ exit /b
|
||||
|
||||
:p_del
|
||||
set del_alias=%~1
|
||||
findstr /b /v /i "%del_alias%=" "%ALIASES%" >> "%ALIASES%.tmp"
|
||||
%WINDIR%\System32\findstr /b /v /i "%del_alias%=" "%ALIASES%" >> "%ALIASES%.tmp"
|
||||
type "%ALIASES%".tmp > "%ALIASES%" & @del /f /q "%ALIASES%.tmp"
|
||||
doskey %del_alias%=
|
||||
doskey /macrofile="%ALIASES%"
|
||||
@ -105,7 +105,7 @@ echo Aliases reloaded
|
||||
exit /b
|
||||
|
||||
:p_show
|
||||
doskey /macros|findstr /v /r "^;=" | sort
|
||||
doskey /macros|%WINDIR%\System32\findstr /v /r "^;=" | sort
|
||||
exit /b
|
||||
|
||||
:p_help
|
||||
@ -117,9 +117,9 @@ echo.Options:
|
||||
echo.
|
||||
echo. /d [alias] Delete an [alias].
|
||||
echo. /f [macrofile] Path to the [macrofile] you want to store the new alias in.
|
||||
echo. Default: %cmder_root%\config\user-aliases.cmd
|
||||
echo. Default: %cmder_root%\config\user_aliases.cmd
|
||||
echo. /reload Reload the aliases file. Can be used with /f argument.
|
||||
echo. Default: %cmder_root%\config\user-aliases.cmd
|
||||
echo. Default: %cmder_root%\config\user_aliases.cmd
|
||||
echo.
|
||||
echo. If alias is called with no parameters, it will display the list of existing aliases.
|
||||
echo.
|
135
vendor/bin/cexec.cmd
vendored
Normal file
135
vendor/bin/cexec.cmd
vendored
Normal file
@ -0,0 +1,135 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if "%~1" equ "" goto :wrongSyntax
|
||||
|
||||
if not defined CMDER_USER_FLAGS (
|
||||
:: in case nothing was passed to %CMDER_USER_FLAGS%
|
||||
set "CMDER_USER_FLAGS= "
|
||||
)
|
||||
|
||||
set "feNot=false"
|
||||
goto :parseArgument
|
||||
|
||||
:doShift
|
||||
shift
|
||||
|
||||
:parseArgument
|
||||
set "currenArgu=%~1"
|
||||
if /i "%currenArgu%" equ "/setPath" (
|
||||
:: set %flag_exists% shortcut
|
||||
endlocal
|
||||
set "ccall=call %~dp0cexec.cmd"
|
||||
set "cexec=%~dp0cexec.cmd"
|
||||
) else if /i "%currenArgu%" == "/?" (
|
||||
goto :help
|
||||
) else if /i "%currenArgu%" equ "/help" (
|
||||
goto :help
|
||||
) else if /i "%currenArgu%" equ "/h" (
|
||||
goto :help
|
||||
) else if /i "%currenArgu%" equ "NOT" (
|
||||
set "feNot=true"
|
||||
goto :doShift
|
||||
) else (
|
||||
if "%~1" equ "" goto :wrongSyntax
|
||||
if "%~2" equ "" goto :wrongSyntax
|
||||
set "feFlagName=%~1"
|
||||
set "feCommand=%~2"
|
||||
if not "%~3" equ "" (
|
||||
set "feParam=%~3"
|
||||
)
|
||||
goto :detect
|
||||
)
|
||||
|
||||
:detect
|
||||
:: to avoid erroneous deteciton like "/do" "/doNOT", which both have a "/do"
|
||||
:: we added a space after the flag name, like "/do ", which won't match "/doN"
|
||||
set "feFlagName=%feFlagName% "
|
||||
:: echo.
|
||||
:: echo %CMDER_USER_FLAGS%
|
||||
:: echo %feNOT%
|
||||
:: echo %feFlagName%
|
||||
:: echo %feCommand%
|
||||
:: echo %feParam%
|
||||
:: echo.
|
||||
echo %CMDER_USER_FLAGS% | %WINDIR%\System32\find /i "%feFlagName%">nul
|
||||
if "%ERRORLEVEL%" == "0" (
|
||||
if "%feNOT%" == "false" (
|
||||
endlocal && call %feCommand% %feParam%
|
||||
exit /b 0
|
||||
)
|
||||
) else (
|
||||
if "%feNOT%" == "true" (
|
||||
endlocal && call %feCommand% %feParam%
|
||||
exit /b 0
|
||||
)
|
||||
)
|
||||
endlocal
|
||||
exit /b 1
|
||||
|
||||
:wrongSyntax
|
||||
echo The syntax of the command is incorrect.
|
||||
echo.
|
||||
echo use /? for help
|
||||
echo.
|
||||
endlocal
|
||||
exit /b
|
||||
|
||||
:help
|
||||
echo.
|
||||
echo CExec - Conditional Exec
|
||||
echo.
|
||||
echo Handles with custom arguments for cmder's init.bat.
|
||||
echo written by xiazeyu, inspired DRSDavidSoft.
|
||||
echo.
|
||||
echo Usage:
|
||||
echo.
|
||||
echo cexec /setPath [NOT] flagName command/program [parameters]
|
||||
echo.
|
||||
echo /setPath Generate a global varibles %%ccall%% and %%cexec%% for
|
||||
echo quicker use. Following arguments will be ignored.
|
||||
echo.
|
||||
echo NOT Specifies that cexec should carry out
|
||||
echo the command only if the flag is missing.
|
||||
echo.
|
||||
echo /[flagName] Specifies which flag name is to detect. It's recommand
|
||||
echo to use a pair of double quotation marks to wrap
|
||||
echo your flag name to avoid exceed expectation.
|
||||
echo.
|
||||
echo command/program Specifies the command to carry out if the
|
||||
echo argument name is detected. It's recommand to
|
||||
echo use a pair of double quotation marks to
|
||||
echo wrap your command to avoid exceed expectation.
|
||||
echo.
|
||||
echo parameters These are the parameters passed to the command/program.
|
||||
echo It's recommand to use a pair of double quotation marks
|
||||
echo to wrap your flag name to avoid exceed expectation.
|
||||
echo.
|
||||
echo Examples:
|
||||
echo.
|
||||
echo These examples are expected to be written in %cmder_root%/config/user-profile.cmd
|
||||
echo CExec evaluates the environment varible "CMDER_USER_FLAGS" and conditionally
|
||||
echo caries out actions based on flags that are passed.
|
||||
echo.
|
||||
echo Case 1:
|
||||
echo.
|
||||
echo The following command in `user_profile.cmd` would execute "notepad.exe" and continue running the `user_profile.cmd`
|
||||
echo.
|
||||
echo "%ccall%" "/startNotepad" "start" "notepad.exe"
|
||||
echo.
|
||||
echo If you pass parameter to init.bat like:
|
||||
echo.
|
||||
echo init.bat /startNotepad
|
||||
echo.
|
||||
echo Case 2:
|
||||
echo.
|
||||
echo The following command in `user_profile.cmd` would execute "notepad.exe" and stop running the `user_profile.cmd`
|
||||
echo.
|
||||
echo "%cexec%" NOT "/dontStartNotepad" "start" "notepad.exe"
|
||||
echo.
|
||||
echo UNLESS you pass parameter to init.bat like:
|
||||
echo.
|
||||
echo init.bat /dontStartNotepad
|
||||
echo.
|
||||
endlocal
|
||||
exit /b
|
41
vendor/bin/cmder_diag.cmd
vendored
Normal file
41
vendor/bin/cmder_diag.cmd
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
@echo off
|
||||
|
||||
echo ------------------------------------
|
||||
echo dir "%cmder_root%"
|
||||
echo ------------------------------------
|
||||
dir "%cmder_root%"
|
||||
|
||||
echo.
|
||||
echo ------------------------------------
|
||||
echo dir "%cmder_root%\vendor"
|
||||
echo ------------------------------------
|
||||
dir "%cmder_root%\vendor"
|
||||
|
||||
echo.
|
||||
echo ------------------------------------
|
||||
echo dir /s "%cmder_root%\bin"
|
||||
echo ------------------------------------
|
||||
dir /s "%cmder_root%\bin"
|
||||
|
||||
echo.
|
||||
echo ------------------------------------
|
||||
echo dir /s "%cmder_root%\config"
|
||||
echo ------------------------------------
|
||||
dir /s "%cmder_root%\config"
|
||||
|
||||
echo.
|
||||
echo ------------------------------------
|
||||
echo set
|
||||
echo ------------------------------------
|
||||
set
|
||||
|
||||
echo.
|
||||
echo ------------------------------------
|
||||
echo where git
|
||||
echo ------------------------------------
|
||||
where git
|
||||
|
||||
echo.
|
||||
echo ------------------------------------
|
||||
echo Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!
|
||||
echo ------------------------------------
|
39
vendor/bin/cmder_diag.ps1
vendored
Normal file
39
vendor/bin/cmder_diag.ps1
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
write-host ------------------------------------
|
||||
write-host get-childitem "$env:CMDER_ROOT"
|
||||
write-host ------------------------------------
|
||||
get-childitem "$env:CMDER_ROOT"
|
||||
|
||||
write-host ''
|
||||
write-host ------------------------------------
|
||||
write-host get-childitem "$env:CMDER_ROOT/vendor"
|
||||
write-host ------------------------------------
|
||||
get-childitem "$env:CMDER_ROOT/vendor"
|
||||
|
||||
write-host ''
|
||||
write-host ------------------------------------
|
||||
write-host get-childitem -s "$env:CMDER_ROOT/bin"
|
||||
write-host ------------------------------------
|
||||
get-childitem -s "$env:CMDER_ROOT/bin"
|
||||
|
||||
write-host ''
|
||||
write-host ------------------------------------
|
||||
write-host get-childitem -s "$env:CMDER_ROOT/config"
|
||||
write-host ------------------------------------
|
||||
get-childitem -s "$env:CMDER_ROOT/config"
|
||||
|
||||
write-host ''
|
||||
write-host ------------------------------------
|
||||
write-host get-childitem env:
|
||||
write-host ------------------------------------
|
||||
get-childitem env: |ft -autosize -wrap
|
||||
|
||||
write-host ''
|
||||
write-host ------------------------------------
|
||||
write-host get-command git
|
||||
write-host ------------------------------------
|
||||
get-command git
|
||||
|
||||
write-host ''
|
||||
write-host ------------------------------------
|
||||
write-host Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!
|
||||
write-host ------------------------------------
|
39
vendor/bin/cmder_diag.sh
vendored
Normal file
39
vendor/bin/cmder_diag.sh
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
echo ------------------------------------
|
||||
echo ls -la "$CMDER_ROOT"
|
||||
echo ------------------------------------
|
||||
ls -la "$CMDER_ROOT"
|
||||
|
||||
echo ''
|
||||
echo ------------------------------------
|
||||
echo ls -la "$CMDER_ROOT/vendor"
|
||||
echo ------------------------------------
|
||||
ls -la "$CMDER_ROOT/vendor"
|
||||
|
||||
echo ''
|
||||
echo ------------------------------------
|
||||
echo ls -la /s "$CMDER_ROOT/bin"
|
||||
echo ------------------------------------
|
||||
ls -laR /s "$CMDER_ROOT/bin"
|
||||
|
||||
echo ''
|
||||
echo ------------------------------------
|
||||
echo ls -la /s "$CMDER_ROOT/config"
|
||||
echo ------------------------------------
|
||||
ls -laR /s "$CMDER_ROOT/config"
|
||||
|
||||
echo ''
|
||||
echo ------------------------------------
|
||||
echo env
|
||||
echo ------------------------------------
|
||||
env
|
||||
|
||||
echo ''
|
||||
echo ------------------------------------
|
||||
echo which git
|
||||
echo ------------------------------------
|
||||
which git
|
||||
|
||||
echo ''
|
||||
echo ------------------------------------
|
||||
echo Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!
|
||||
echo ------------------------------------
|
22
vendor/bin/timer.cmd
vendored
Normal file
22
vendor/bin/timer.cmd
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
@echo off
|
||||
|
||||
set start=%~1
|
||||
set end=%~2
|
||||
|
||||
set options="tokens=1-4 delims=:.,"
|
||||
for /f %options% %%a in ("%start%") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100
|
||||
for /f %options% %%a in ("%end%") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100
|
||||
|
||||
set /a hours=%end_h%-%start_h%
|
||||
set /a mins=%end_m%-%start_m%
|
||||
set /a secs=%end_s%-%start_s%
|
||||
set /a ms=%end_ms%-%start_ms%
|
||||
if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms%
|
||||
if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs%
|
||||
if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins%
|
||||
if %hours% lss 0 set /a hours = 24%hours%
|
||||
if 1%ms% lss 100 set ms=0%ms%
|
||||
|
||||
:: Mission accomplished
|
||||
set /a totalsecs = %hours%*3600 + %mins%*60 + %secs%
|
||||
echo Elapsed Time: %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)
|
98
vendor/clink.lua
vendored
98
vendor/clink.lua
vendored
@ -41,13 +41,19 @@ local function set_prompt_filter()
|
||||
-- color codes: "\x1b[1;37;40m"
|
||||
local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;39;40m{lamb} \x1b[0m"
|
||||
local lambda = "λ"
|
||||
cwd = string.gsub(cwd, "%%", "{percent}")
|
||||
cmder_prompt = string.gsub(cmder_prompt, "{cwd}", cwd)
|
||||
|
||||
if env ~= nil then
|
||||
lambda = "("..env..") "..lambda
|
||||
end
|
||||
clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", lambda)
|
||||
end
|
||||
|
||||
local function percent_prompt_filter()
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{percent}", "%%")
|
||||
end
|
||||
|
||||
---
|
||||
-- Resolves closest directory location for specified directory.
|
||||
-- Navigates subsequently up one level and tries to find specified directory
|
||||
@ -216,6 +222,21 @@ local function get_git_status()
|
||||
return true
|
||||
end
|
||||
|
||||
---
|
||||
-- Gets the conflict status
|
||||
-- @return {bool} indicating true for conflict, false for no conflicts
|
||||
---
|
||||
function get_git_conflict()
|
||||
local file = io.popen("git diff --name-only --diff-filter=U 2>nul")
|
||||
for line in file:lines() do
|
||||
file:close()
|
||||
return true;
|
||||
end
|
||||
file:close()
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
---
|
||||
-- Get the status of working dir
|
||||
-- @return {bool}
|
||||
@ -235,7 +256,7 @@ end
|
||||
-- Get the status of working dir
|
||||
-- @return {bool}
|
||||
---
|
||||
function get_svn_status()
|
||||
local function get_svn_status()
|
||||
local file = io.popen("svn status -q")
|
||||
for line in file:lines() do
|
||||
file:close()
|
||||
@ -251,7 +272,8 @@ local function git_prompt_filter()
|
||||
-- Colors for git status
|
||||
local colors = {
|
||||
clean = "\x1b[1;37;40m",
|
||||
dirty = "\x1b[31;1m",
|
||||
dirty = "\x1b[33;3m",
|
||||
conflict = "\x1b[31;1m"
|
||||
}
|
||||
|
||||
local git_dir = get_git_dir()
|
||||
@ -261,12 +283,18 @@ local function git_prompt_filter()
|
||||
local color
|
||||
if branch then
|
||||
-- Has branch => therefore it is a git folder, now figure out status
|
||||
if get_git_status() then
|
||||
local gitStatus = get_git_status()
|
||||
local gitConflict = get_git_conflict()
|
||||
|
||||
color = colors.dirty
|
||||
if gitStatus then
|
||||
color = colors.clean
|
||||
else
|
||||
color = colors.dirty
|
||||
end
|
||||
|
||||
if gitConflict then
|
||||
color = colors.conflict
|
||||
end
|
||||
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", color.."("..branch..")")
|
||||
return false
|
||||
end
|
||||
@ -279,31 +307,40 @@ end
|
||||
|
||||
local function hg_prompt_filter()
|
||||
|
||||
-- Colors for mercurial status
|
||||
local colors = {
|
||||
clean = "\x1b[1;37;40m",
|
||||
dirty = "\x1b[31;1m",
|
||||
}
|
||||
local result = ""
|
||||
|
||||
if get_hg_dir() then
|
||||
-- if we're inside of mercurial repo then try to detect current branch
|
||||
local branch = get_hg_branch()
|
||||
local color
|
||||
if branch then
|
||||
-- Has branch => therefore it is a mercurial folder, now figure out status
|
||||
if get_hg_status() then
|
||||
color = colors.clean
|
||||
else
|
||||
color = colors.dirty
|
||||
local hg_dir = get_hg_dir()
|
||||
if hg_dir then
|
||||
-- Colors for mercurial status
|
||||
local colors = {
|
||||
clean = "\x1b[1;37;40m",
|
||||
dirty = "\x1b[31;1m",
|
||||
}
|
||||
|
||||
-- 'hg id' gives us BOTH the branch name AND an indicator that there
|
||||
-- are uncommitted changes, in one fast(er) call
|
||||
local pipe = io.popen("hg id 2>&1")
|
||||
local output = pipe:read('*all')
|
||||
local rc = { pipe:close() }
|
||||
|
||||
if output ~= nil and
|
||||
string.sub(output,1,7) ~= "abort: " and -- not an HG working copy
|
||||
string.sub(output,1,12) ~= "000000000000" and -- empty wc (needs update)
|
||||
(not string.find(output, "is not recognized")) then -- 'hg' not in path
|
||||
local color = colors.clean
|
||||
-- split elements on space delimiter
|
||||
local items = {}
|
||||
for i in string.gmatch(output, "%S+") do
|
||||
table.insert(items, i)
|
||||
end
|
||||
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", color.."("..branch..")")
|
||||
return false
|
||||
-- if the repo hash ends with '+', the wc has uncommitted changes
|
||||
if string.sub(items[1], -1, -1) == "+" then color = colors.dirty end
|
||||
-- substitute the branch in directly -- already WITH parentheses. :)
|
||||
result = color .. items[2] -- string.sub(items[2], 1, string.len(items[2]) - 1)
|
||||
end
|
||||
end
|
||||
|
||||
-- No mercurial present or not in mercurial file
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", "")
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", result)
|
||||
return false
|
||||
end
|
||||
|
||||
@ -340,6 +377,7 @@ clink.prompt.register_filter(set_prompt_filter, 1)
|
||||
clink.prompt.register_filter(hg_prompt_filter, 50)
|
||||
clink.prompt.register_filter(git_prompt_filter, 50)
|
||||
clink.prompt.register_filter(svn_prompt_filter, 50)
|
||||
clink.prompt.register_filter(percent_prompt_filter, 51)
|
||||
|
||||
local completions_dir = clink.get_env('CMDER_ROOT')..'/vendor/clink-completions/'
|
||||
for _,lua_module in ipairs(clink.find_files(completions_dir..'*.lua')) do
|
||||
@ -351,3 +389,13 @@ for _,lua_module in ipairs(clink.find_files(completions_dir..'*.lua')) do
|
||||
dofile(filename)
|
||||
end
|
||||
end
|
||||
|
||||
if clink.get_env('CMDER_USER_CONFIG') then
|
||||
local cmder_config_dir = clink.get_env('CMDER_ROOT')..'/config/'
|
||||
for _,lua_module in ipairs(clink.find_files(cmder_config_dir..'*.lua')) do
|
||||
local filename = cmder_config_dir..lua_module
|
||||
-- use dofile instead of require because require caches loaded modules
|
||||
-- so config reloading using Alt-Q won't reload updated modules.
|
||||
dofile(filename)
|
||||
end
|
||||
end
|
||||
|
35
vendor/cmder.sh
vendored
35
vendor/cmder.sh
vendored
@ -1,6 +1,6 @@
|
||||
# DO NOT EDIT THIS FILE IT WILL BE OVERWRITTEN ON UPDATE
|
||||
#
|
||||
# Add portable user customizations ${CMDER_ROOT}/config/user-profile.sh,
|
||||
# Add portable user customizations ${CMDER_ROOT}/config/user_profile.sh,
|
||||
# these customizations will follow Cmder if $CMDER_ROOT is copied
|
||||
# to another machine.
|
||||
#
|
||||
@ -45,7 +45,7 @@ if [[ ! "$PATH" =~ "${GIT_INSTALL_ROOT}/bin:" ]] ; then
|
||||
PATH=${GIT_INSTALL_ROOT}/bin:$PATH
|
||||
fi
|
||||
|
||||
PATH=${CMDER_ROOT}/bin:$PATH:${CMDER_ROOT}
|
||||
PATH=${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}
|
||||
|
||||
export PATH
|
||||
|
||||
@ -63,21 +63,34 @@ if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
|
||||
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
||||
fi
|
||||
|
||||
initialConfig="${CMDER_ROOT}/config/user-profile.sh"
|
||||
if [ -f "${CMDER_ROOT}/config/user-profile.sh" ] ; then
|
||||
. "${CMDER_ROOT}/config/user-profile.sh"
|
||||
|
||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
||||
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
|
||||
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
||||
fi
|
||||
|
||||
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
|
||||
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
|
||||
. "${CMDER_ROOT}/config/user_profile.sh"
|
||||
fi
|
||||
|
||||
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
||||
initialConfig="${CMDER_USER_CONFIG}/user-profile.sh"
|
||||
if [ -f "${CMDER_USER_CONFIG}/user-profile.sh" ] ; then
|
||||
. "${CMDER_USER_CONFIG}/user-profile.sh"
|
||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
||||
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
|
||||
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
|
||||
fi
|
||||
|
||||
export PATH=${CMDER_USER_CONFIG}/bin:$PATH
|
||||
|
||||
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
|
||||
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
|
||||
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -f "${initialConfig}" ] ; then
|
||||
echo Creating user startup file: "${initialConfig}"
|
||||
cat <<-eof >"${initialConfig}"
|
||||
if [ ! -f "${CmderUserProfilePath}" ] ; then
|
||||
echo Creating user startup file: "${CmderUserProfilePath}"
|
||||
cat <<-eof >"${CmderUserProfilePath}"
|
||||
# use this file to run your own startup commands for msys2 bash'
|
||||
|
||||
# To add a new vendor to the path, do something like:
|
||||
|
62
vendor/cmder_exinit
vendored
62
vendor/cmder_exinit
vendored
@ -1,4 +1,4 @@
|
||||
# Copy this file to your non integrated *nix-like environment,
|
||||
# Copy this file to your non integrated *nix-like environment,
|
||||
# Cygwin/MSys2/Git for Windows SDK, installs '/etc/profile.d/'
|
||||
# folder to integrate the externally installed Unix like environment
|
||||
# into Cmder so it has access to settings stored in Cmder/config
|
||||
@ -15,7 +15,7 @@
|
||||
# These customizations will follow Cmder if $CMDER_ROOT is copied
|
||||
# to another machine.
|
||||
#
|
||||
# Add system specific users customizations to $HOME/.bashrc, these
|
||||
# Add system specific users customizations to $HOME/.bashrc, these
|
||||
# customizations will not follow Cmder to another machine.
|
||||
|
||||
# # Uncomment and edit the CMDER_ROOT line to use Cmder/config even when launched
|
||||
@ -58,45 +58,57 @@ fi
|
||||
if [ ! "$CMDER_ROOT" = "" ] ; then
|
||||
# Remove any trailing '/'
|
||||
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
|
||||
|
||||
|
||||
echo "Using \"CMDER_ROOT\" at \"${CMDER_ROOT}\"."
|
||||
|
||||
|
||||
export CMDER_ROOT
|
||||
|
||||
PATH=${CMDER_ROOT}/bin:$PATH:${CMDER_ROOT}
|
||||
|
||||
|
||||
PATH=${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}
|
||||
|
||||
export PATH
|
||||
|
||||
|
||||
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
|
||||
# to source them at startup.
|
||||
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||
mkdir -p "${CMDER_ROOT}/config/profile.d"
|
||||
fi
|
||||
|
||||
|
||||
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||
runProfiled "${CMDER_ROOT}/config/profile.d"
|
||||
fi
|
||||
|
||||
|
||||
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
|
||||
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
||||
fi
|
||||
|
||||
|
||||
if [ -f "${CMDER_ROOT}/config/user-profile.sh" ] ; then
|
||||
. "${CMDER_ROOT}/config/user-profile.sh"
|
||||
|
||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
||||
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
|
||||
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
||||
fi
|
||||
|
||||
if [ -f "${CMDER_USER_CONFIG}/user-profile.sh" ] ; then
|
||||
. "${CMDER_USER_CONFIG}/user-profile.sh"
|
||||
else
|
||||
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
||||
initialProfile="${CMDER_USER_CONFIG}/user-profile.sh"
|
||||
else
|
||||
initialProfile="${CMDER_ROOT}/config/user-profile.sh"
|
||||
fi
|
||||
|
||||
echo Creating user startup file: "${initialProfile}"
|
||||
cat <<-eof >"${initialProfile}"
|
||||
|
||||
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
|
||||
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
|
||||
. "${CMDER_ROOT}/config/user_profile.sh"
|
||||
fi
|
||||
|
||||
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
||||
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
|
||||
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
|
||||
fi
|
||||
|
||||
export PATH=${CMDER_USER_CONFIG}/bin:$PATH
|
||||
|
||||
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
|
||||
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
|
||||
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -f "${CmderUserProfilePath}" ] ; then
|
||||
echo Creating user startup file: "${CmderUserProfilePath}"
|
||||
cat <<-eof >"${CmderUserProfilePath}"
|
||||
# use this file to run your own startup commands for msys2 bash'
|
||||
|
||||
# To add a new vendor to the path, do something like:
|
||||
|
243
vendor/init.bat
vendored
243
vendor/init.bat
vendored
@ -1,15 +1,20 @@
|
||||
@echo off
|
||||
|
||||
set CMDER_INIT_START=%time%
|
||||
|
||||
:: Init Script for cmd.exe
|
||||
:: Created as part of cmder project
|
||||
|
||||
:: !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||
:: !!! Use "%CMDER_ROOT%\config\user-profile.cmd" to add your own startup commands
|
||||
:: !!! Use "%CMDER_ROOT%\config\user_profile.cmd" to add your own startup commands
|
||||
|
||||
:: Use /v command line arg or set to > 0 for verbose output to aid in debugging.
|
||||
set verbose-output=0
|
||||
set debug-output=0
|
||||
set verbose_output=0
|
||||
set debug_output=0
|
||||
set time_init=0
|
||||
set fast_init=0
|
||||
set max_depth=1
|
||||
set "CMDER_USER_FLAGS= "
|
||||
|
||||
:: Find root dir
|
||||
if not defined CMDER_ROOT (
|
||||
@ -27,6 +32,7 @@ if not defined CMDER_ROOT (
|
||||
:: Remove trailing '\' from %CMDER_ROOT%
|
||||
if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%"
|
||||
|
||||
call "%cmder_root%\vendor\bin\cexec.cmd" /setpath
|
||||
call "%cmder_root%\vendor\lib\lib_base"
|
||||
call "%cmder_root%\vendor\lib\lib_path"
|
||||
call "%cmder_root%\vendor\lib\lib_console"
|
||||
@ -36,10 +42,14 @@ call "%cmder_root%\vendor\lib\lib_profile"
|
||||
:var_loop
|
||||
if "%~1" == "" (
|
||||
goto :start
|
||||
) else if /i "%1" == "/f" (
|
||||
set fast_init=1
|
||||
) else if /i "%1" == "/t" (
|
||||
set time_init=1
|
||||
) else if /i "%1"=="/v" (
|
||||
set verbose-output=1
|
||||
set verbose_output=1
|
||||
) else if /i "%1"=="/d" (
|
||||
set debug-output=1
|
||||
set debug_output=1
|
||||
) else if /i "%1" == "/max_depth" (
|
||||
if "%~2" geq "1" if "%~2" leq "5" (
|
||||
set "max_depth=%~2"
|
||||
@ -58,7 +68,7 @@ call "%cmder_root%\vendor\lib\lib_profile"
|
||||
)
|
||||
) else if /i "%1" == "/user_aliases" (
|
||||
if exist "%~2" (
|
||||
set "user-aliases=%~2"
|
||||
set "user_aliases=%~2"
|
||||
shift
|
||||
)
|
||||
) else if /i "%1" == "/git_install_root" (
|
||||
@ -80,16 +90,20 @@ call "%cmder_root%\vendor\lib\lib_profile"
|
||||
) else if /i "%1" == "/svn_ssh" (
|
||||
set SVN_SSH=%2
|
||||
shift
|
||||
) else (
|
||||
set "CMDER_USER_FLAGS=%1 %CMDER_USER_FLAGS%"
|
||||
)
|
||||
shift
|
||||
goto var_loop
|
||||
|
||||
:start
|
||||
%lib_console% debug-output init.bat "Env Var - CMDER_ROOT=%CMDER_ROOT%"
|
||||
%lib_console% debug-output init.bat "Env Var - debug-output=%debug-output%"
|
||||
:: Sets CMDER_SHELL, CMDER_CLINK, CMDER_ALIASES
|
||||
%lib_base% cmder_shell
|
||||
%lib_console% debug_output init.bat "Env Var - CMDER_ROOT=%CMDER_ROOT%"
|
||||
%lib_console% debug_output init.bat "Env Var - debug_output=%debug_output%"
|
||||
|
||||
if defined CMDER_USER_CONFIG (
|
||||
%lib_console% debug-output init.bat "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '%CMDER_USER_CONFIG%'!"
|
||||
%lib_console% debug_output init.bat "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '%CMDER_USER_CONFIG%'!"
|
||||
)
|
||||
|
||||
:: Pick right version of clink
|
||||
@ -101,21 +115,25 @@ if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
||||
set architecture_bits=64
|
||||
)
|
||||
|
||||
:: Tell the user about the clink config files...
|
||||
if defined "%CMDER_USER_CONFIG%\settings" if not exist "%CMDER_USER_CONFIG%\settings" (
|
||||
echo Generating clink initial settings in "%CMDER_USER_CONFIG%\settings"
|
||||
echo Additional *.lua files in "%CMDER_USER_CONFIG%" are loaded on startup.\
|
||||
if "%CMDER_CLINK%" == "1" (
|
||||
%lib_console% verbose_output "Injecting Clink!"
|
||||
|
||||
} else if not exist "%CMDER_ROOT%\config\settings" (
|
||||
echo Generating clink initial settings in "%CMDER_ROOT%\config\settings"
|
||||
echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup.
|
||||
)
|
||||
|
||||
:: Run clink
|
||||
if defined CMDER_USER_CONFIG (
|
||||
:: Run clink
|
||||
if defined CMDER_USER_CONFIG (
|
||||
if not exist "%CMDER_USER_CONFIG%\settings" (
|
||||
echo Generating clink initial settings in "%CMDER_USER_CONFIG%\settings"
|
||||
echo Additional *.lua files in "%CMDER_USER_CONFIG%" are loaded on startup.\
|
||||
)
|
||||
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_USER_CONFIG%" --scripts "%CMDER_ROOT%\vendor"
|
||||
) else (
|
||||
) else (
|
||||
if not exist "%CMDER_ROOT%\config\settings" (
|
||||
echo Generating clink initial settings in "%CMDER_ROOT%\config\settings"
|
||||
echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup.
|
||||
)
|
||||
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
|
||||
)
|
||||
) else (
|
||||
%lib_console% verbose_output "WARNING: Incompatible 'ComSpec/Shell' Detetected Skipping Clink Injection!"
|
||||
)
|
||||
|
||||
:: Prepare for git-for-windows
|
||||
@ -131,20 +149,34 @@ if not defined TERM set TERM=cygwin
|
||||
:: also check that we have a recent enough version of git by examining the version string
|
||||
setlocal enabledelayedexpansion
|
||||
if defined GIT_INSTALL_ROOT (
|
||||
if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" goto :FOUND_GIT)
|
||||
if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" goto :SPECIFIED_GIT
|
||||
) else if "%fast_init%" == "1" (
|
||||
if exist "%CMDER_ROOT%\vendor\git-for-windows\cmd\git.exe" (
|
||||
%lib_console% debug_output "Skipping Git Auto-Detect!"
|
||||
goto :VENDORED_GIT
|
||||
)
|
||||
)
|
||||
|
||||
%lib_console% debug-output init.bat "Looking for Git install root..."
|
||||
%lib_console% debug_output init.bat "Looking for Git install root..."
|
||||
|
||||
:: get the version information for vendored git binary
|
||||
%lib_git% read_version VENDORED "%CMDER_ROOT%\vendor\git-for-windows\cmd"
|
||||
%lib_git% validate_version VENDORED !GIT_VERSION_VENDORED!
|
||||
%lib_git% validate_version VENDORED %GIT_VERSION_VENDORED%
|
||||
|
||||
:: check if git is in path...
|
||||
for /F "delims=" %%F in ('where git.exe 2^>nul') do (
|
||||
:: get the absolute path to the user provided git binary
|
||||
pushd %%~dpF
|
||||
set "test_dir=!CD!"
|
||||
:: check if there's shim - and if yes follow the path
|
||||
if exist git.shim (
|
||||
for /F "tokens=2 delims== " %%I in (git.shim) do (
|
||||
pushd %%~dpI
|
||||
set "test_dir=!CD!"
|
||||
popd
|
||||
)
|
||||
) else (
|
||||
set "test_dir=!CD!"
|
||||
)
|
||||
popd
|
||||
|
||||
:: get the version information for the user provided git binary
|
||||
@ -165,49 +197,68 @@ for /F "delims=" %%F in ('where git.exe 2^>nul') do (
|
||||
set test_dir=
|
||||
goto :FOUND_GIT
|
||||
) else (
|
||||
call :verbose-output Found old !GIT_VERSION_USER! in "!test_dir!", but not using...
|
||||
call :verbose_output Found old !GIT_VERSION_USER! in "!test_dir!", but not using...
|
||||
set test_dir=
|
||||
)
|
||||
) else (
|
||||
|
||||
:: if the user provided git executable is not found
|
||||
if !errorlevel! equ -255 (
|
||||
call :verbose-output No git at "!git_executable!" found.
|
||||
call :verbose_output No git at "!git_executable!" found.
|
||||
set test_dir=
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
:: our last hope: our own git...
|
||||
:VENDORED_GIT
|
||||
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
|
||||
set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows"
|
||||
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\cmd"
|
||||
%lib_console% debug_output "Using vendored Git from '!GIT_INSTALL_ROOT!..."
|
||||
goto :CONFIGURE_GIT
|
||||
) else (
|
||||
goto :NO_GIT
|
||||
)
|
||||
|
||||
:SPECIFIED_GIT
|
||||
%lib_console% debug_output "Using /GIT_INSTALL_ROOT from '%GIT_INSTALL_ROOT%..."
|
||||
goto :CONFIGURE_GIT
|
||||
|
||||
:FOUND_GIT
|
||||
%lib_console% debug_output "Using found Git from '%GIT_INSTALL_ROOT%..."
|
||||
goto :CONFIGURE_GIT
|
||||
|
||||
:CONFIGURE_GIT
|
||||
:: Add git to the path
|
||||
if defined GIT_INSTALL_ROOT (
|
||||
rem add the unix commands at the end to not shadow windows commands like more
|
||||
if exist "!GIT_INSTALL_ROOT!\cmd\git.exe" %lib_path% enhance_path "!GIT_INSTALL_ROOT!\cmd" append
|
||||
if exist "!GIT_INSTALL_ROOT!\mingw32" (
|
||||
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\mingw32" append
|
||||
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\mingw32\bin" append
|
||||
) else if exist "!GIT_INSTALL_ROOT!\mingw64" (
|
||||
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\mingw64" append
|
||||
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\mingw64\bin" append
|
||||
)
|
||||
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\usr\bin" append
|
||||
|
||||
:: define SVN_SSH so we can use git svn with ssh svn repositories
|
||||
if not defined SVN_SSH set "SVN_SSH=%GIT_INSTALL_ROOT:\=\\%\\bin\\ssh.exe"
|
||||
|
||||
if not defined LANG (
|
||||
:: Find locale.exe: From the git install root, from the path, using the git installed env, or fallback using the env from the path.
|
||||
if not defined git_locale if exist "!GIT_INSTALL_ROOT!\usr\bin\locale.exe" set git_locale="!GIT_INSTALL_ROOT!\usr\bin\locale.exe"
|
||||
if not defined git_locale for /F "delims=" %%F in ('where locale.exe 2^>nul') do (if not defined git_locale set git_locale="%%F")
|
||||
if not defined git_locale if exist "!GIT_INSTALL_ROOT!\usr\bin\env.exe" set git_locale="!GIT_INSTALL_ROOT!\usr\bin\env.exe" /usr/bin/locale
|
||||
if not defined git_locale set git_locale=env /usr/bin/locale
|
||||
for /F "delims=" %%F in ('!git_locale! -uU 2') do (
|
||||
set "LANG=%%F"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
endlocal & set "PATH=%PATH%" & set "SVN_SSH=%SVN_SSH%" & set "GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
|
||||
%lib_console% debug-output init.bat "Env Var - GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
|
||||
%lib_console% debug-output init.bat "Found Git in: '%GIT_INSTALL_ROOT%'"
|
||||
endlocal & set "PATH=%PATH%" & set "LANG=%LANG%" & set "SVN_SSH=%SVN_SSH%" & set "GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
|
||||
%lib_console% debug_output init.bat "Env Var - GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
|
||||
%lib_console% debug_output init.bat "Found Git in: '%GIT_INSTALL_ROOT%'"
|
||||
goto :PATH_ENHANCE
|
||||
|
||||
:NO_GIT
|
||||
@ -215,6 +266,7 @@ goto :PATH_ENHANCE
|
||||
endlocal
|
||||
|
||||
:PATH_ENHANCE
|
||||
%lib_path% enhance_path "%CMDER_ROOT%\vendor\bin"
|
||||
%lib_path% enhance_path_recursive "%CMDER_ROOT%\bin" %max_depth%
|
||||
if defined CMDER_USER_BIN (
|
||||
%lib_path% enhance_path_recursive "%CMDER_USER_BIN%" %max_depth%
|
||||
@ -232,59 +284,63 @@ if defined CMDER_USER_CONFIG (
|
||||
:: scripts run above by setting the 'aliases' env variable.
|
||||
::
|
||||
:: Note: If overriding default aliases store file the aliases
|
||||
:: must also be self executing, see '.\user-aliases.cmd.example',
|
||||
:: must also be self executing, see '.\user_aliases.cmd.example',
|
||||
:: and be in profile.d folder.
|
||||
if not defined user-aliases (
|
||||
if not defined user_aliases (
|
||||
if defined CMDER_USER_CONFIG (
|
||||
set "user-aliases=%CMDER_USER_CONFIG%\user-aliases.cmd"
|
||||
set "user_aliases=%CMDER_USER_CONFIG%\user_aliases.cmd"
|
||||
) else (
|
||||
set "user-aliases=%CMDER_ROOT%\config\user-aliases.cmd"
|
||||
set "user_aliases=%CMDER_ROOT%\config\user_aliases.cmd"
|
||||
)
|
||||
)
|
||||
|
||||
:: The aliases environment variable is used by alias.bat to id
|
||||
:: the default file to store new aliases in.
|
||||
if not defined aliases (
|
||||
set "aliases=%user-aliases%"
|
||||
)
|
||||
if "%CMDER_ALIASES%" == "1" (
|
||||
REM The aliases environment variable is used by alias.bat to id
|
||||
REM the default file to store new aliases in.
|
||||
if not defined aliases (
|
||||
set "aliases=%user_aliases%"
|
||||
)
|
||||
|
||||
:: Make sure we have a self-extracting user-aliases.cmd file
|
||||
setlocal enabledelayedexpansion
|
||||
if not exist "%user-aliases%" (
|
||||
echo Creating initial user-aliases store in "%user-aliases%"...
|
||||
copy "%CMDER_ROOT%\vendor\user-aliases.cmd.example" "%user-aliases%"
|
||||
) else (
|
||||
type "%user-aliases%" | findstr /i ";= Add aliases below here" >nul
|
||||
if "!errorlevel!" == "1" (
|
||||
echo Creating initial user-aliases store in "%user-aliases%"...
|
||||
if defined CMDER_USER_CONFIG (
|
||||
copy "%user-aliases%" "%user-aliases%.old_format"
|
||||
copy "%CMDER_ROOT%\vendor\user-aliases.cmd.example" "%user-aliases%"
|
||||
) else (
|
||||
copy "%user-aliases%" "%user-aliases%.old_format"
|
||||
copy "%CMDER_ROOT%\vendor\user-aliases.cmd.example" "%user-aliases%"
|
||||
)
|
||||
)
|
||||
)
|
||||
REM Make sure we have a self-extracting user_aliases.cmd file
|
||||
setlocal enabledelayedexpansion
|
||||
if not exist "%user_aliases%" (
|
||||
echo Creating initial user_aliases store in "%user_aliases%"...
|
||||
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.example" "%user_aliases%"
|
||||
) else (
|
||||
type "%user_aliases%" | %WINDIR%\System32\findstr /i ";= Add aliases below here" >nul
|
||||
if "!errorlevel!" == "1" (
|
||||
echo Creating initial user_aliases store in "%user_aliases%"...
|
||||
if defined CMDER_USER_CONFIG (
|
||||
copy "%user_aliases%" "%user_aliases%.old_format"
|
||||
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.example" "%user_aliases%"
|
||||
) else (
|
||||
copy "%user_aliases%" "%user_aliases%.old_format"
|
||||
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.example" "%user_aliases%"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
:: Update old 'user-aliases' to new self executing 'user-aliases.cmd'
|
||||
if exist "%CMDER_ROOT%\config\aliases" (
|
||||
echo Updating old "%CMDER_ROOT%\config\aliases" to new format...
|
||||
type "%CMDER_ROOT%\config\aliases" >> "%user-aliases%" && del "%CMDER_ROOT%\config\aliases"
|
||||
) else if exist "%user-aliases%.old_format" (
|
||||
echo Updating old "%user-aliases%" to new format...
|
||||
type "%user-aliases%.old_format" >> "%user-aliases%" && del "%user-aliases%.old_format"
|
||||
:: Update old 'user_aliases' to new self executing 'user_aliases.cmd'
|
||||
if exist "%CMDER_ROOT%\config\aliases" (
|
||||
echo Updating old "%CMDER_ROOT%\config\aliases" to new format...
|
||||
type "%CMDER_ROOT%\config\aliases" >> "%user_aliases%"
|
||||
del "%CMDER_ROOT%\config\aliases"
|
||||
) else if exist "%user_aliases%.old_format" (
|
||||
echo Updating old "%user_aliases%" to new format...
|
||||
type "%user_aliases%.old_format" >> "%user_aliases%"
|
||||
del "%user_aliases%.old_format"
|
||||
)
|
||||
endlocal
|
||||
)
|
||||
endlocal
|
||||
|
||||
:: Add aliases to the environment
|
||||
call "%user-aliases%"
|
||||
call "%user_aliases%"
|
||||
|
||||
:: See vendor\git-for-windows\README.portable for why we do this
|
||||
:: Basically we need to execute this post-install.bat because we are
|
||||
:: manually extracting the archive rather than executing the 7z sfx
|
||||
if exist "%GIT_INSTALL_ROOT%\post-install.bat" (
|
||||
%lib_console% verbose-output "Running Git for Windows one time Post Install...."
|
||||
%lib_console% verbose_output "Running Git for Windows one time Post Install...."
|
||||
pushd "%GIT_INSTALL_ROOT%\"
|
||||
"%GIT_INSTALL_ROOT%\git-bash.exe" --no-needs-console --hide --no-cd --command=post-install.bat
|
||||
popd
|
||||
@ -292,19 +348,21 @@ if exist "%GIT_INSTALL_ROOT%\post-install.bat" (
|
||||
|
||||
:: Set home path
|
||||
if not defined HOME set "HOME=%USERPROFILE%"
|
||||
%lib_console% debug-output init.bat "Env Var - HOME=%HOME%"
|
||||
%lib_console% debug_output init.bat "Env Var - HOME=%HOME%"
|
||||
|
||||
set "initialConfig=%CMDER_ROOT%\config\user-profile.cmd"
|
||||
if exist "%CMDER_ROOT%\config\user-profile.cmd" (
|
||||
set "initialConfig=%CMDER_ROOT%\config\user_profile.cmd"
|
||||
if exist "%CMDER_ROOT%\config\user_profile.cmd" (
|
||||
REM Create this file and place your own command in there
|
||||
call "%CMDER_ROOT%\config\user-profile.cmd"
|
||||
%lib_console% debug_output init.bat "Calling - %CMDER_ROOT%\config\user_profile.cmd"
|
||||
call "%CMDER_ROOT%\config\user_profile.cmd"
|
||||
)
|
||||
|
||||
if defined CMDER_USER_CONFIG (
|
||||
set "initialConfig=%CMDER_USER_CONFIG%\user-profile.cmd"
|
||||
if exist "%CMDER_USER_CONFIG%\user-profile.cmd" (
|
||||
set "initialConfig=%CMDER_USER_CONFIG%\user_profile.cmd"
|
||||
if exist "%CMDER_USER_CONFIG%\user_profile.cmd" (
|
||||
REM Create this file and place your own command in there
|
||||
call "%CMDER_USER_CONFIG%\user-profile.cmd"
|
||||
%lib_console% debug_output init.bat "Calling - %CMDER_USER_CONFIG%\user_profile.cmd
|
||||
call "%CMDER_USER_CONFIG%\user_profile.cmd"
|
||||
)
|
||||
)
|
||||
|
||||
@ -312,21 +370,46 @@ if not exist "%initialConfig%" (
|
||||
echo Creating user startup file: "%initialConfig%"
|
||||
(
|
||||
echo :: use this file to run your own startup commands
|
||||
echo :: use in front of the command to prevent printing the command
|
||||
echo :: use in front of the command to prevent printing the command
|
||||
echo.
|
||||
echo :: uncomment this to have the ssh agent load when cmder starts
|
||||
echo :: call "%%GIT_INSTALL_ROOT%%/cmd/start-ssh-agent.cmd"
|
||||
echo.
|
||||
echo :: uncomment this next two lines to use pageant as the ssh authentication agent
|
||||
echo :: uncomment the next two lines to use pageant as the ssh authentication agent
|
||||
echo :: SET SSH_AUTH_SOCK=/tmp/.ssh-pageant-auth-sock
|
||||
echo :: call "%%GIT_INSTALL_ROOT%%/cmd/start-ssh-pageant.cmd"
|
||||
echo.
|
||||
echo :: you can add your plugins to the cmder path like so
|
||||
echo :: set "PATH=%%CMDER_ROOT%%\vendor\whatever;%%PATH%%"
|
||||
echo.
|
||||
echo :: arguments in this batch are passed from init.bat, you can quickly parse them like so:
|
||||
echo :: more useage can be seen by typing "cexec /?"
|
||||
echo.
|
||||
echo :: %%ccall%% "/customOption" "command/program"
|
||||
echo.
|
||||
echo @echo off
|
||||
) >"%initialConfig%"
|
||||
)
|
||||
|
||||
if "%CMDER_ALIASES%" == "1" if exist "%CMDER_ROOT%\bin\alias.bat" if exist "%CMDER_ROOT%\vendor\bin\alias.cmd" (
|
||||
echo Cmder's 'alias' command has been moved into "%CMDER_ROOT%\vendor\bin\alias.cmd"
|
||||
echo to get rid of this message either:
|
||||
echo.
|
||||
echo Delete the file "%CMDER_ROOT%\bin\alias.bat"
|
||||
echo.
|
||||
echo or
|
||||
echo.
|
||||
echo If you have customized it and want to continue using it instead of the included version
|
||||
echo * Rename "%CMDER_ROOT%\bin\alias.bat" to "%CMDER_ROOT%\bin\alias.cmd".
|
||||
echo * Search for 'user-aliases' and replace it with 'user_aliases'.
|
||||
)
|
||||
|
||||
set initialConfig=
|
||||
set CMDER_CONFIGURED=1
|
||||
|
||||
set CMDER_INIT_END=%time%
|
||||
|
||||
if %time_init% gtr 0 (
|
||||
"%cmder_root%\vendor\bin\timer.cmd" %CMDER_INIT_START% %CMDER_INIT_END%
|
||||
)
|
||||
exit /b
|
||||
|
40
vendor/lib/lib_base.cmd
vendored
40
vendor/lib/lib_base.cmd
vendored
@ -3,7 +3,7 @@
|
||||
set lib_base=call "%~dp0lib_base.cmd"
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%0"
|
||||
%lib_base% help "%~0"
|
||||
) else if "%1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
@ -16,7 +16,7 @@ exit /b
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "$0"
|
||||
::: call "lib_base.cmd"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
@ -27,12 +27,9 @@ exit /b
|
||||
::: file <in> full path to file containing lib_routines to display
|
||||
:::.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
for /f "tokens=* delims=:" %%a in ('type "%~1" ^| findstr /i /r "^:::"') do (
|
||||
for /f "tokens=* delims=:" %%a in ('type "%~1" ^| %WINDIR%\System32\findstr /i /r "^:::"') do (
|
||||
rem echo a="%%a"
|
||||
|
||||
if "%%a"==" " (
|
||||
echo.
|
||||
if "%%a"=="." (
|
||||
echo.
|
||||
) else if /i "%%a" == "usage" (
|
||||
@ -46,3 +43,34 @@ exit /b
|
||||
|
||||
pause
|
||||
exit /b
|
||||
|
||||
:cmder_shell
|
||||
:::===============================================================================
|
||||
:::show_subs - shows all sub routines in a .bat/.cmd file with documentation
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "lib_base.cmd"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_base% cmder_shell
|
||||
:::.
|
||||
:::options:
|
||||
:::.
|
||||
::: file <in> full path to file containing lib_routines to display
|
||||
:::.
|
||||
:::-------------------------------------------------------------------------------
|
||||
echo %comspec% | %WINDIR%\System32\find /i "\cmd.exe" > nul && set "CMDER_SHELL=cmd"
|
||||
echo %comspec% | %WINDIR%\System32\find /i "\tcc.exe" > nul && set "CMDER_SHELL=tcc"
|
||||
echo %comspec% | %WINDIR%\System32\find /i "\tccle" > nul && set "CMDER_SHELL=tccle"
|
||||
|
||||
set CMDER_CLINK=1
|
||||
if "%CMDER_SHELL%" equ "tcc" set CMDER_CLINK=0
|
||||
if "%CMDER_SHELL%" equ "tccle" set CMDER_CLINK=0
|
||||
|
||||
set CMDER_ALIASES=1
|
||||
if "%CMDER_SHELL%" equ "tcc" set CMDER_ALIASES=0
|
||||
if "%CMDER_SHELL%" equ "tccle" set CMDER_ALIASES=0
|
||||
|
||||
exit /b
|
||||
|
24
vendor/lib/lib_console.cmd
vendored
24
vendor/lib/lib_console.cmd
vendored
@ -1,44 +1,44 @@
|
||||
@echo off
|
||||
|
||||
rem set args=%*
|
||||
if "%fast_init%" == "1" exit /b
|
||||
|
||||
call "%~dp0lib_base.cmd"
|
||||
set lib_console=call "%~dp0lib_console.cmd"
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%0"
|
||||
%lib_base% help "%~0"
|
||||
) else if "%1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
|
||||
exit /b
|
||||
|
||||
:debug-output
|
||||
:debug_output
|
||||
:::===============================================================================
|
||||
:::debug-output - Output a debug message to the console.
|
||||
:::debug_output - Output a debug message to the console.
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "$0"
|
||||
::: call "lib_console.cmd"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_console% debug-output [caller] [message]
|
||||
::: %lib_console% debug_output [caller] [message]
|
||||
:::.
|
||||
:::required:
|
||||
:::.
|
||||
::: [caller] <in> Script/sub routine name calling debug-output
|
||||
::: [caller] <in> Script/sub routine name calling debug_output
|
||||
:::.
|
||||
::: [message] <in> Message text to display.
|
||||
:::.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
if %debug-output% gtr 0 echo DEBUG(%~1): %~2 & echo.
|
||||
if %debug_output% gtr 0 echo DEBUG(%~1): %~2 & echo.
|
||||
exit /b
|
||||
|
||||
:verbose-output
|
||||
:verbose_output
|
||||
:::===============================================================================
|
||||
:::verbose-output - Output a debug message to the console.
|
||||
:::verbose_output - Output a debug message to the console.
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
@ -46,7 +46,7 @@ exit /b
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_console% verbose-output "[message]"
|
||||
::: %lib_console% verbose_output "[message]"
|
||||
:::.
|
||||
:::required:
|
||||
:::.
|
||||
@ -54,7 +54,7 @@ exit /b
|
||||
:::.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
if %verbose-output% gtr 0 echo %~1
|
||||
if %verbose_output% gtr 0 echo %~1
|
||||
exit /b
|
||||
|
||||
:show_error
|
||||
|
26
vendor/lib/lib_git.cmd
vendored
26
vendor/lib/lib_git.cmd
vendored
@ -1,13 +1,11 @@
|
||||
@echo off
|
||||
|
||||
|
||||
call "%~dp0lib_base.cmd"
|
||||
call "%%~dp0lib_console.cmd"
|
||||
set lib_git=call "%~dp0lib_git.cmd"
|
||||
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%0"
|
||||
%lib_base% help "%~0"
|
||||
) else if "%1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
@ -20,7 +18,7 @@ exit /b
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "$0"
|
||||
::: call "lib_git.cmd"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
@ -42,19 +40,19 @@ exit /b
|
||||
|
||||
:: set the executable path
|
||||
set "git_executable=%~2\git.exe"
|
||||
%lib_console% debug-output :read_version "Env Var - git_executable=%git_executable%"
|
||||
%lib_console% debug_output :read_version "Env Var - git_executable=%git_executable%"
|
||||
|
||||
:: check if the executable actually exists
|
||||
if not exist "%git_executable%" (
|
||||
%lib_console% debug-output :read_version "%git_executable% does not exist."
|
||||
%lib_console% debug_output :read_version "%git_executable% does not exist."
|
||||
exit /b -255
|
||||
)
|
||||
|
||||
:: get the git version in the provided directory
|
||||
for /F "tokens=1,2,3 usebackq" %%A in (`"%git_executable%" --version 2^>nul`) do (
|
||||
if /i "%%A %%B" == "git version" (
|
||||
set "GIT_VERSION_%~1=%%C"
|
||||
%lib_console% debug-output :read_version "Env Var - GIT_VERSION_%~1=%%C"
|
||||
set "GIT_VERSION=%%C"
|
||||
%lib_console% debug_output :read_version "Env Var - GIT_VERSION_%~1=!GIT_VERSION!"
|
||||
) else (
|
||||
%lib_console% show_error "git --version" returned an inproper version string!
|
||||
pause
|
||||
@ -62,7 +60,7 @@ exit /b
|
||||
)
|
||||
)
|
||||
|
||||
endlocal & set GIT_VERSION%~1=!GIT_VERSION%~1!
|
||||
endlocal & set "GIT_VERSION_%~1=%GIT_VERSION%"
|
||||
exit /b
|
||||
|
||||
:parse_version
|
||||
@ -92,6 +90,7 @@ exit /b
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
:: process a `x.x.x.xxxx.x` formatted string
|
||||
%lib_console% debug_output :parse_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
||||
for /F "tokens=1-3* delims=.,-" %%A in ("%2") do (
|
||||
set "%~1_MAJOR=%%A"
|
||||
set "%~1_MINOR=%%B"
|
||||
@ -121,10 +120,11 @@ exit /b
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
:: now parse the version information into the corresponding variables
|
||||
%lib_console% debug_output :validate_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
||||
call :parse_version %~1 %~2
|
||||
|
||||
:: ... and maybe display it, for debugging purposes.
|
||||
%lib_console% debug-output :validate_version "Found Git Version for %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!"
|
||||
%lib_console% debug_output :validate_version "Found Git Version for %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!"
|
||||
exit /b
|
||||
|
||||
:compare_versions
|
||||
@ -148,9 +148,9 @@ exit /b
|
||||
:: checks all major, minor, patch and build variables for the given arguments.
|
||||
:: whichever binary that has the most recent version will be used based on the return code.
|
||||
|
||||
:: %lib_console% debug-output Comparing:
|
||||
:: %lib_console% debug-output %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!
|
||||
:: %lib_console% debug-output %~2: !%~2_MAJOR!.!%~2_MINOR!.!%~2_PATCH!.!%~2_BUILD!
|
||||
%lib_console% debug_output Comparing:
|
||||
%lib_console% debug_output %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!
|
||||
%lib_console% debug_output %~2: !%~2_MAJOR!.!%~2_MINOR!.!%~2_PATCH!.!%~2_BUILD!
|
||||
|
||||
if !%~1_MAJOR! GTR !%~2_MAJOR! (exit /b 1)
|
||||
if !%~1_MAJOR! LSS !%~2_MAJOR! (exit /b -1)
|
||||
|
63
vendor/lib/lib_path.cmd
vendored
63
vendor/lib/lib_path.cmd
vendored
@ -6,7 +6,7 @@ call "%%~dp0lib_console"
|
||||
set lib_path=call "%~dp0lib_path.cmd"
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%0"
|
||||
%lib_base% help "%~0"
|
||||
) else if "%1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
@ -19,7 +19,7 @@ exit /b
|
||||
:::
|
||||
:::include:
|
||||
:::
|
||||
::: call "$0"
|
||||
::: call "lib_path.cmd"
|
||||
:::
|
||||
:::usage:
|
||||
:::
|
||||
@ -52,35 +52,49 @@ exit /b
|
||||
set "position="
|
||||
)
|
||||
|
||||
if "%fast_init%" == "1" (
|
||||
if "%position%" == "append" (
|
||||
set "PATH=%PATH%;%add_path%"
|
||||
) else (
|
||||
set "PATH=%add_path%;%PATH%"
|
||||
)
|
||||
goto :end_enhance_path
|
||||
)
|
||||
|
||||
set found=0
|
||||
set "find_query=%add_path%"
|
||||
set "find_query=%find_query:\=\\%"
|
||||
set "find_query=%find_query: =\ %"
|
||||
set found=0
|
||||
|
||||
%lib_console% debug-output :enhance_path "Env Var - find_query=%find_query%"
|
||||
echo "%PATH%"|findstr >nul /I /R ";%find_query%\"$"
|
||||
if "!ERRORLEVEL!" == "0" set found=1
|
||||
if "%CMDER_CONFIGURED%" == "1" (
|
||||
%lib_console% debug_output :enhance_path "Env Var - find_query=%find_query%"
|
||||
echo "%path%"|%WINDIR%\System32\findstr >nul /I /R ";%find_query%\"$"
|
||||
if "!ERRORLEVEL!" == "0" set found=1
|
||||
)
|
||||
%lib_console% debug_output :enhance_path "Env Var 1 - found=!found!"
|
||||
|
||||
%lib_console% debug-output :enhance_path "Env Var 1 - found=!found!"
|
||||
if "!found!" == "0" (
|
||||
echo "%PATH%"|findstr >nul /i /r ";%find_query%;"
|
||||
if "!ERRORLEVEL!" == "0" set found=1
|
||||
%lib_console% debug-output :enhance_path "Env Var 2 - found=!found!"
|
||||
if "%CMDER_CONFIGURED%" == "1" (
|
||||
echo "%path%"|%WINDIR%\System32\findstr >nul /i /r ";%find_query%;"
|
||||
if "!ERRORLEVEL!" == "0" set found=1
|
||||
)
|
||||
%lib_console% debug_output :enhance_path "Env Var 2 - found=!found!"
|
||||
)
|
||||
|
||||
if "%found%" == "0" (
|
||||
%lib_console% debug-output :enhance_path "BEFORE Env Var - PATH=!path!"
|
||||
%lib_console% debug_output :enhance_path "BEFORE Env Var - PATH=!path!"
|
||||
if /i "%position%" == "append" (
|
||||
%lib_console% debug-output :enhance_path "Appending '%add_path%'"
|
||||
%lib_console% debug_output :enhance_path "Appending '%add_path%'"
|
||||
set "PATH=%PATH%;%add_path%"
|
||||
) else (
|
||||
%lib_console% debug-output :enhance_path "Prepending '%add_path%'"
|
||||
%lib_console% debug_output :enhance_path "Prepending '%add_path%'"
|
||||
set "PATH=%add_path%;%PATH%"
|
||||
)
|
||||
|
||||
%lib_console% debug-output :enhance_path "AFTER Env Var - PATH=!path!"
|
||||
%lib_console% debug_output :enhance_path "AFTER Env Var - PATH=!path!"
|
||||
)
|
||||
|
||||
:end_enhance_path
|
||||
endlocal & set "PATH=%PATH:;;=;%"
|
||||
exit /b
|
||||
|
||||
@ -111,7 +125,6 @@ exit /b
|
||||
:::.
|
||||
::: path <out> Sets the path env variable if required.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
if "%~1" neq "" (
|
||||
set "add_path=%~1"
|
||||
@ -132,24 +145,30 @@ exit /b
|
||||
set "position="
|
||||
)
|
||||
|
||||
if "%fast_init%" == "1" (
|
||||
call :enhance_path "%add_path%" %position%
|
||||
goto :end_enhance_path_recursive
|
||||
)
|
||||
|
||||
if "%depth%" == "" set depth=0
|
||||
|
||||
%lib_console% debug-output :enhance_path_recursive "Env Var - add_path=%add_path%"
|
||||
%lib_console% debug-output :enhance_path_recursive "Env Var - position=%position%"
|
||||
%lib_console% debug-output :enhance_path_recursive "Env Var - max_depth=%max_depth%"
|
||||
%lib_console% debug_output :enhance_path_recursive "Env Var - add_path=%add_path%"
|
||||
%lib_console% debug_output :enhance_path_recursive "Env Var - position=%position%"
|
||||
%lib_console% debug_output :enhance_path_recursive "Env Var - max_depth=%max_depth%"
|
||||
|
||||
if %max_depth% gtr !depth! (
|
||||
%lib_console% debug-output :enhance_path_recursive "Adding parent directory - '%add_path%'"
|
||||
%lib_console% debug_output :enhance_path_recursive "Adding parent directory - '%add_path%'"
|
||||
call :enhance_path "%add_path%" %position%
|
||||
set /a "depth=!depth!+1"
|
||||
|
||||
for /d %%i in ("%add_path%\*") do (
|
||||
%lib_console% debug-output :enhance_path_recursive "Env Var BEFORE - depth=!depth!"
|
||||
%lib_console% debug-output :enhance_path_recursive "Found Subdirectory - '%%~fi'"
|
||||
%lib_console% debug_output :enhance_path_recursive "Env Var BEFORE - depth=!depth!"
|
||||
%lib_console% debug_output :enhance_path_recursive "Found Subdirectory - '%%~fi'"
|
||||
call :enhance_path_recursive "%%~fi" %max_depth% %position%
|
||||
%lib_console% debug-output :enhance_path_recursive "Env Var AFTER- depth=!depth!"
|
||||
%lib_console% debug_output :enhance_path_recursive "Env Var AFTER- depth=!depth!"
|
||||
)
|
||||
)
|
||||
|
||||
:end_enhance_path_recursive
|
||||
endlocal & set "PATH=%PATH%"
|
||||
exit /b
|
||||
|
8
vendor/lib/lib_profile.cmd
vendored
8
vendor/lib/lib_profile.cmd
vendored
@ -1,12 +1,11 @@
|
||||
@echo off
|
||||
|
||||
|
||||
call "%~dp0lib_base.cmd"
|
||||
call "%%~dp0lib_console"
|
||||
set lib_profile=call "%~dp0lib_profile.cmd"
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%0"
|
||||
%lib_base% help "%~0"
|
||||
) else if "%1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
@ -19,7 +18,7 @@ exit /b
|
||||
:::
|
||||
:::include:
|
||||
:::
|
||||
::: call "$0"
|
||||
::: call "lib_profile.cmd"
|
||||
:::
|
||||
:::usage:
|
||||
:::
|
||||
@ -39,8 +38,9 @@ exit /b
|
||||
|
||||
pushd "%~1"
|
||||
for /f "usebackq" %%x in ( `dir /b *.bat *.cmd 2^>nul` ) do (
|
||||
%lib_console% verbose-output "Calling '%~1\%%x'..."
|
||||
%lib_console% verbose_output "Calling '%~1\%%x'..."
|
||||
call "%~1\%%x"
|
||||
)
|
||||
popd
|
||||
exit /b
|
||||
|
||||
|
46
vendor/profile.ps1
vendored
46
vendor/profile.ps1
vendored
@ -2,7 +2,7 @@
|
||||
# Created as part of cmder project
|
||||
|
||||
# !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||
# !!! Use "%CMDER_ROOT%\config\user-profile.ps1" to add your own startup commands
|
||||
# !!! Use "%CMDER_ROOT%\config\user_profile.ps1" to add your own startup commands
|
||||
|
||||
# Compatibility with PS major versions <= 2
|
||||
if(!$PSScriptRoot) {
|
||||
@ -29,10 +29,6 @@ $ENV:CMDER_ROOT = (($ENV:CMDER_ROOT).trimend("\"))
|
||||
# -> recent PowerShell versions include PowerShellGet out of the box
|
||||
$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue | Out-Null)
|
||||
|
||||
# do not load bundled psget if a module installer is already available
|
||||
# -> recent PowerShell versions include PowerShellGet out of the box
|
||||
$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue | Out-Null)
|
||||
|
||||
# Add Cmder modules directory to the autoload path.
|
||||
$CmderModulePath = Join-path $PSScriptRoot "psmodules/"
|
||||
|
||||
@ -93,11 +89,11 @@ if (Get-Module PSReadline -ErrorAction "SilentlyContinue") {
|
||||
}
|
||||
|
||||
# Enhance Path
|
||||
$env:Path = "$Env:CMDER_ROOT\bin;$env:Path;$Env:CMDER_ROOT"
|
||||
$env:Path = "$Env:CMDER_ROOT\bin;$Env:CMDER_ROOT\vendor\bin;$env:Path;$Env:CMDER_ROOT"
|
||||
|
||||
#
|
||||
# Prompt Section
|
||||
# Users should modify their user-profile.ps1 as it will be safe from updates.
|
||||
# Users should modify their user_profile.ps1 as it will be safe from updates.
|
||||
#
|
||||
|
||||
# Pre assign the hooks so the first run of cmder gets a working prompt.
|
||||
@ -132,6 +128,11 @@ if (-not (test-path "$ENV:CMDER_ROOT\config\profile.d")) {
|
||||
}
|
||||
|
||||
pushd $ENV:CMDER_ROOT\config\profile.d
|
||||
foreach ($x in Get-ChildItem *.psm1) {
|
||||
# write-host write-host Sourcing $x
|
||||
Import-Module $x
|
||||
}
|
||||
|
||||
foreach ($x in Get-ChildItem *.ps1) {
|
||||
# write-host write-host Sourcing $x
|
||||
. $x
|
||||
@ -142,6 +143,11 @@ popd
|
||||
# to source them at startup. Requires using cmder.exe /C [cmder_user_root_path] argument
|
||||
if ($ENV:CMDER_USER_CONFIG -ne "" -and (test-path "$ENV:CMDER_USER_CONFIG\profile.d")) {
|
||||
pushd $ENV:CMDER_USER_CONFIG\profile.d
|
||||
foreach ($x in Get-ChildItem *.psm1) {
|
||||
# write-host write-host Sourcing $x
|
||||
Import-Module $x
|
||||
}
|
||||
|
||||
foreach ($x in Get-ChildItem *.ps1) {
|
||||
# write-host write-host Sourcing $x
|
||||
. $x
|
||||
@ -149,22 +155,32 @@ if ($ENV:CMDER_USER_CONFIG -ne "" -and (test-path "$ENV:CMDER_USER_CONFIG\profil
|
||||
popd
|
||||
}
|
||||
|
||||
# Renaming to "config\user_profile.ps1" to "user_profile.ps1" for consistency.
|
||||
if (test-path "$env:CMDER_ROOT\config\user-profile.ps1") {
|
||||
rename-item "$env:CMDER_ROOT\config\user-profile.ps1" user_profile.ps1
|
||||
}
|
||||
|
||||
|
||||
$CmderUserProfilePath = Join-Path $env:CMDER_ROOT "config\user-profile.ps1"
|
||||
$CmderUserProfilePath = Join-Path $env:CMDER_ROOT "config\user_profile.ps1"
|
||||
if (Test-Path $CmderUserProfilePath) {
|
||||
# Create this file and place your own command in there.
|
||||
. "$CmderUserProfilePath"
|
||||
|
||||
. "$CmderUserProfilePath" # user_profile.ps1 is not a module DO NOT USE import-module
|
||||
}
|
||||
|
||||
if ($ENV:CMDER_USER_CONFIG) {
|
||||
$CmderUserProfilePath = Join-Path $ENV:CMDER_USER_CONFIG "user-profile.ps1"
|
||||
# Renaming to "$env:CMDER_USER_CONFIG\user-profile.ps1" to "user_profile.ps1" for consistency.
|
||||
if (test-path "$env:CMDER_USER_CONFIG\user-profile.ps1") {
|
||||
rename-item "$env:CMDER_USER_CONFIG\user-profile.ps1" user_profile.ps1
|
||||
}
|
||||
|
||||
$env:Path = "$Env:CMDER_USER_CONFIG\bin;$env:Path"
|
||||
|
||||
$CmderUserProfilePath = Join-Path $ENV:CMDER_USER_CONFIG "user_profile.ps1"
|
||||
if (Test-Path $CmderUserProfilePath) {
|
||||
. "$CmderUserProfilePath" # user_profile.ps1 is not a module DO NOT USE import-module
|
||||
}
|
||||
}
|
||||
|
||||
if (Test-Path $CmderUserProfilePath) {
|
||||
. "$CmderUserProfilePath"
|
||||
} else {
|
||||
if (! (Test-Path $CmderUserProfilePath) ) {
|
||||
# This multiline string cannot be indented, for this reason I've not indented the whole block
|
||||
|
||||
Write-Host -BackgroundColor Darkgreen -ForegroundColor White "First Run: Creating user startup file: $CmderUserProfilePath"
|
||||
|
8
vendor/sources.json
vendored
8
vendor/sources.json
vendored
@ -1,8 +1,8 @@
|
||||
[
|
||||
{
|
||||
"name": "git-for-windows",
|
||||
"version": "v2.17.1.windows.2",
|
||||
"url": "https://github.com/git-for-windows/git/releases/download/v2.17.1.windows.2/PortableGit-2.17.1.2-64-bit.7z.exe"
|
||||
"version": "v2.19.0.windows.1",
|
||||
"url": "https://github.com/git-for-windows/git/releases/download/v2.19.0.windows.1/PortableGit-2.19.0-64-bit.7z.exe"
|
||||
},
|
||||
{
|
||||
"name": "clink",
|
||||
@ -11,8 +11,8 @@
|
||||
},
|
||||
{
|
||||
"name": "conemu-maximus5",
|
||||
"version": "180528",
|
||||
"url": "https://github.com/Maximus5/ConEmu/releases/download/v18.05.28/ConEmuPack.180528.7z"
|
||||
"version": "180626",
|
||||
"url": "https://github.com/Maximus5/ConEmu/releases/download/v18.06.26/ConEmuPack.180626.7z"
|
||||
},
|
||||
{
|
||||
"name": "clink-completions",
|
||||
|
Reference in New Issue
Block a user