mirror of
https://github.com/cmderdev/cmder.git
synced 2025-07-16 12:39:38 +08:00
Compare commits
69 Commits
Author | SHA1 | Date | |
---|---|---|---|
19d5a87224 | |||
44aadccbec | |||
83f411384c | |||
7d31eeaa5a | |||
36403df91e | |||
a843e85c8b | |||
4f3fcae9d9 | |||
13ea026dc9 | |||
dc8e572ca5 | |||
b2262522c9 | |||
9d0729fe42 | |||
a1e47ceaca | |||
2a18ba084c | |||
12e3761017 | |||
b8890ed297 | |||
063f30c193 | |||
bc72f20a2d | |||
78a9711447 | |||
55d9b25f57 | |||
7294092618 | |||
959073ac5c | |||
e746101ed2 | |||
65bf25f1d0 | |||
94e7c24b72 | |||
d6569192fc | |||
7d04ded1c2 | |||
5c3f46fd88 | |||
502129d4f9 | |||
b36b8a4cb3 | |||
3965852c26 | |||
93d2c427ad | |||
624deec2f0 | |||
c817df2032 | |||
236aefe8c6 | |||
2f3f1d474a | |||
cb4d95e7a3 | |||
1dadade661 | |||
2bc17c4ff2 | |||
ae473ecea6 | |||
3aeca3c972 | |||
57a28f118d | |||
018bf45df4 | |||
f8359fc3f7 | |||
249f7b9baf | |||
eaf7048ed7 | |||
f4321bbc33 | |||
96736feecc | |||
dc9e385365 | |||
a85cd81f00 | |||
1662678ebf | |||
bcf8527f74 | |||
72ab0f064f | |||
91f5c5379a | |||
19bad7dfa9 | |||
afb8f52516 | |||
6543c204b7 | |||
0438ce5763 | |||
471369f73b | |||
66d36fdc1c | |||
17247f2065 | |||
63f3f8020f | |||
b37001b591 | |||
60880362a9 | |||
91651fc98b | |||
997e799138 | |||
ff2e09849e | |||
8237b1010c | |||
cf311fb1c2 | |||
78b9c97fa9 |
5
.gitattributes
vendored
5
.gitattributes
vendored
@ -1,2 +1,7 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
*.cmd text eol=crlf
|
||||
*.bat text eol=crlf
|
||||
*.ps1 text eol=crlf
|
||||
*.md text eol=lf
|
||||
*.sh text eol=lf
|
||||
|
78
.github/issue_template.md
vendored
Normal file
78
.github/issue_template.md
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
<!--
|
||||
|
||||
Thank you for reporting a bug for the Cmder project!
|
||||
------------------------------------------------------------------
|
||||
|
||||
Please make sure you read and follow the following instructions
|
||||
carefully before reporting bugs, and/or requesting new features.
|
||||
|
||||
Make sure that you have:
|
||||
|
||||
• Searched for existing issues (including the **closed** ones)
|
||||
for the similar problems here:
|
||||
https://github.com/cmderdev/cmder/issues?q=is:issue
|
||||
|
||||
• Read the README.md and the Wiki:
|
||||
- https://github.com/cmderdev/cmder/blob/master/README.md
|
||||
- https://github.com/cmderdev/cmder/wiki
|
||||
|
||||
(What you may be asking here could already be explained there!)
|
||||
|
||||
• Please understand that Cmder by default uses ConEmu as the
|
||||
underlying Terminal Emulator. If your issue is regarding
|
||||
the **Terminal Emulator**, please visit the ConEmu issues page:
|
||||
|
||||
https://github.com/Maximus5/ConEmu/issues?q=is:issue
|
||||
|
||||
If there isn't an existing issue, you may open a new one there.
|
||||
|
||||
(We don't resolve issues regarding ConEmu here, so please
|
||||
make sure you open the issue in the correct place.)
|
||||
|
||||
more info: https://conemu.github.io/en/ThirdPartyProblems.html
|
||||
|
||||
• If you are asking for guides on how to integrate Cmder into
|
||||
your favorite IDE of choice, or how to perform an specific
|
||||
task with Cmder, make sure you visit our label section first!
|
||||
You may already have an answer under the Guides or Questions section.
|
||||
|
||||
For a list of labels, visit:
|
||||
- https://github.com/cmderdev/cmder/labels
|
||||
|
||||
(Be sure to also check “Closed” issues in the labels section!)
|
||||
|
||||
• If the issue is regarding the other upstream technologies that
|
||||
Cmder uses (e.g. Clink, Git, etc), please make sure that the
|
||||
bug you are reporting only applies when they are used in
|
||||
combination with Cmder. If the bug applies when the mentioned
|
||||
tools are NOT used within Cmder, there's a good chance that
|
||||
you should open the bug at the corresponding repo instead.
|
||||
|
||||
Read more on about Cmder on ConEmu docs:
|
||||
https://conemu.github.io/en/cmder.html
|
||||
|
||||
|
||||
Thank you for making sure you are opening a new valid issue!
|
||||
|
||||
-->
|
||||
|
||||
<!--
|
||||
Some tips on how to write a better report:
|
||||
- Put an `x` into all the boxes [ ] relevant to your issue (example: [x]).
|
||||
- Use the *Preview* tab to see how your issue will actually look like, before sending it.
|
||||
- Make sure the description is worded well enough to be understood, and with as much context and examples as possible.
|
||||
- Post a screenshot or the command the triggered the problem, if applicable.
|
||||
- Avoid using ambiguous phrases like: doesn't work, there'a problem, etc.
|
||||
Help us reproduce the issue by explaining what went wrong, and what did you expect to happen.
|
||||
- Please keep the ticket language to English only here.
|
||||
We can't process your issue if it's written in Russian or Chinese as we can't understand them.
|
||||
- ⚠ Read the following page to avoid posting a bad issue: https://conemu.github.io/en/BadIssue.html
|
||||
-->
|
||||
|
||||
### Purpose of the issue
|
||||
- [ ] Bug report (encountered problems/errors)
|
||||
- [ ] Feature request (request for new functionality)
|
||||
- [ ] Question
|
||||
|
||||
### Description of the issue
|
||||
<!-- Provide a clear, simple description of your issue here -->
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,6 +2,7 @@
|
||||
## Those files should be taken from their repositary
|
||||
|
||||
vendor/*/*
|
||||
!vendor/lib/*
|
||||
!vendor/*
|
||||
!vendor/psmodules/PsGet
|
||||
|
||||
|
1498
CHANGELOG.md
1498
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
145
README.md
145
README.md
@ -10,14 +10,45 @@ Cmder is a **software package** created out of pure frustration over absence of
|
||||
|
||||
The main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies, which makes it great for **USB Sticks** or **cloud storage**. So you can carry your console, aliases and binaries (like wget, curl and git) with you anywhere.
|
||||
|
||||
The Cmder's user interface is also designed to be more eye pleasing, and you can compare the main differences between Cmder and ConEmu [here](https://conemu.github.io/en/cmder.html).
|
||||
|
||||
## Installation
|
||||
### Single User Portable Config
|
||||
|
||||
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
|
||||
2. Extract the archive
|
||||
3. (optional) Place your own executable files into the `bin` folder to be injected into your PATH. (nb: This path should not be `C:\Program Files` or anywhere else that would require Administrator access for modifying configuration files)
|
||||
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
|
||||
|
||||
## Integration
|
||||
### Shared Cmder install with Non-Portable Individual User Config
|
||||
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
|
||||
2. Extract the archive to a shared location.
|
||||
3. (optional) Place your own executable files into the `%cmder_root%\bin` folder to be injected into your PATH.
|
||||
4. (optional) Create `%userprofile%\cmder_config\bin` folder to be injected into individual users PATH. Default is to auto create this on first run.
|
||||
5. (optional) Place your own executable files into the `%userprofile%\cmder_config\bin` folder to be injected into your PATH.
|
||||
6. Run Cmder.exe with "/C" command line argument. Example: `cmder.exe /C %userprofile%\cmder_config`
|
||||
* This will create the following directory structure if it is missing.
|
||||
|
||||
```
|
||||
c:\users\[username]\cmder_config
|
||||
├───bin
|
||||
└───config
|
||||
└───profile.d
|
||||
```
|
||||
|
||||
* Both the shared install and the individual user config locations can contain a full set of init and profile.d scripts enabling shared config with user overrides. See below.
|
||||
|
||||
## Cmder.exe Command Line Arguments
|
||||
|
||||
|
||||
| Argument | Description |
|
||||
| ------------------- | ----------------------------------------------------------------------- |
|
||||
| /C [user_root_path] | Individual user Cmder root folder. Example: %userprofile%\cmder_config |
|
||||
| /SINGLE | Start Cmder is single mode. |
|
||||
| /START [start_path] | Folder path to start in. |
|
||||
| /TASK [task_name] | Task to start after launch. |
|
||||
|
||||
## Context Menu Integration
|
||||
|
||||
So you've experimented with Cmder a little and want to give it a shot in a more permanent home;
|
||||
|
||||
@ -50,29 +81,33 @@ In a file explorer window right click in or on a directory to see "Cmder Here" i
|
||||
* <kbd>Ctrl</kbd> + <kbd>R</kbd> : History search
|
||||
* <kbd>Shift</kbd> + Mouse : Select and copy text from buffer
|
||||
|
||||
(Some shortcuts are not yet documented, though they exist - please document them here)
|
||||
_(Some shortcuts are not yet documented, though they exist - please document them here)_
|
||||
|
||||
## Features
|
||||
|
||||
### Access to multiple shells in one window using tabs
|
||||
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|
|
||||
| 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, 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.
|
||||
|
||||
Mintty tabs use a program called 'mintty' as the terminal that is not based on the Windows Console API so some differences in functionality are normal, as a result mintty specific config is done via the '[%USERPROFILE%|$HOME]/.minttyrc' file.
|
||||
⚠ *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.
|
||||
|
||||
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. For more on Mintty and its config click [here](https://github.com/mintty/mintty).
|
||||
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.
|
||||
|
||||
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:
|
||||
|
||||
@ -85,26 +120,53 @@ cd mintty-colors-solarized/
|
||||
echo source \$CMDER_ROOT/vendor/mintty-colors-solarized/mintty-solarized-dark.sh>>$CMDER_ROOT/config/user-profile.sh
|
||||
```
|
||||
|
||||
### Cmder Portable Shell User Config
|
||||
User specific configuration is possible using the cmder specific shell config files. Edit the below files to add your own configuration:
|
||||
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).
|
||||
|
||||
|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|
|
||||
### 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:
|
||||
|
||||
*Note: Pay attention to the quotes!*
|
||||
|
||||
```
|
||||
cmd /s /k ""%ConEmuDir%\..\init.bat" [ADD ARGS HERE]"
|
||||
```
|
||||
|
||||
##### Command Line Arguments for `init.bat`
|
||||
|
||||
| Argument | Description | Default |
|
||||
| ----------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------- |
|
||||
| /c [user cmder root] | Enables user bin and config folders for 'Cmder as admin' sessions due to non-shared environment. | not set |
|
||||
| /d | Enables debug output. | not set |
|
||||
| /git_install_root [file path] | User specified Git installation root path. | '%CMDER_ROOT%\vendor\Git-for-Windows' |
|
||||
| /home [home folder] | User specified folder path to set `%HOME%` environment variable. | '%userprofile%' |
|
||||
| /max_depth [1-5] | Define max recurse depth when adding to the path for `%cmder_root%\bin` and `%cmder_user_bin%` | 1 |
|
||||
| /svn_ssh [path to ssh.exe] | Define %SVN_SSH% so we can use git svn with ssh svn repositories. | '%GIT_INSTALL_ROOT%\bin\ssh.exe' |
|
||||
| /user_aliases [file path] | File path pointing to user aliases. | '%CMDER_ROOT%\config\user-liases.cmd' |
|
||||
| /v | Enables verbose output. | not set |
|
||||
|
||||
### Cmder Shell User Config
|
||||
Single user portable configuration is possible using the cmder specific shell config files. Edit the below files to add your own configuration:
|
||||
|
||||
| Shell | Cmder Portable User Config |
|
||||
| ------------- | ----------------------------------------- |
|
||||
| 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'.
|
||||
|
||||
### Linux like 'profile.d' support for all supported shell types.
|
||||
You can write *.cmd|*.bat, *.ps1, and *.sh scripts and just drop them in the %CMDER_ROOT%\config\profile.d folder to add startup config to Cmder.
|
||||
|
||||
|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|
|
||||
|
||||
| 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 |
|
||||
|
||||
### Aliases
|
||||
#### Cmder(Cmd.exe) Aliases
|
||||
@ -147,11 +209,19 @@ Note: These are loaded in this order by '$ENV:CMDER_ROOT\\vendor\\user-profile.p
|
||||
|
||||
### SSH Agent
|
||||
|
||||
To start SSH agent simply call `start-ssh-agent`, which is in the `vendor/git-for-windows/cmd` folder.
|
||||
To start the vendored SSH agent simply call `start-ssh-agent`, which is in the `vendor/git-for-windows/cmd` folder.
|
||||
|
||||
If you want to run SSH agent on startup, include the line `@call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd"` in `%CMDER_ROOT%/config/user-profile.cmd` (usually just uncomment it).
|
||||
|
||||
### Using external Cygwin/Babun, MSys2, or Git for Windows SDK with Cmder.
|
||||
### Vendored Git
|
||||
|
||||
Cmder is by default shipped with a vendored Git installation. On each instance of launching Cmder, an attempt is made to locate any other user provided Git binaries. Upon finding a `git.exe` binary, Cmder further compares its version against the vendored one _by executing_ it. The vendored `git.exe` binary is _only_ used when it is more recent than the user-installed one.
|
||||
|
||||
You may use your favorite version of Git by including its path in the `%PATH%` enviroment variable. Moreover, the **Mini** edition of Cmder (found on the [downloads page](https://github.com/cmderdev/cmder/releases)) excludes any vendored Git binaries.
|
||||
|
||||
### Using external Cygwin/Babun, MSys2, WSL, or Git for Windows SDK with Cmder.
|
||||
|
||||
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.
|
||||
@ -159,7 +229,7 @@ If you want to run SSH agent on startup, include the line `@call "%GIT_INSTALL_R
|
||||
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.
|
||||
|
||||
Recommended Optional Steps:
|
||||
**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.
|
||||
|
||||
@ -176,9 +246,16 @@ 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
|
||||
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.
|
||||
|
||||
For instructions on how to integrate Cmder with your IDE, please read our [Wiki section](https://github.com/cmderdev/cmder/wiki#cmder-integration).
|
||||
|
||||
## Upgrading
|
||||
|
||||
The process of upgrading Cmder depends on the version/build you are currently running
|
||||
The process of upgrading Cmder depends on the version/build you are currently running.
|
||||
|
||||
If you have a `[cmder_root]/config/user-conemu.xml`, you are running a newer version of Cmder, follow the below process:
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<key name="Software">
|
||||
<key name="ConEmu">
|
||||
<key name=".Vanilla" modified="2015-11-24 14:43:35" build="151119">
|
||||
<key name=".Vanilla" modified="2018-02-22 06:02:11" build="171109">
|
||||
<value name="ColorTable00" type="dword" data="00222827"/>
|
||||
<value name="ColorTable01" type="dword" data="009e5401"/>
|
||||
<value name="ColorTable02" type="dword" data="0004aa74"/>
|
||||
@ -59,6 +59,7 @@
|
||||
<value name="FadeInactive" type="hex" data="01"/>
|
||||
<value name="FadeInactiveLow" type="hex" data="00"/>
|
||||
<value name="FadeInactiveHigh" type="hex" data="c8"/>
|
||||
<value name="ComSpec.UncPaths" type="hex" data="01"/>
|
||||
<value name="ConVisible" type="hex" data="00"/>
|
||||
<value name="ConInMode" type="dword" data="ffffffff"/>
|
||||
<value name="UseInjects" type="hex" data="01"/>
|
||||
@ -101,12 +102,12 @@
|
||||
<value name="FontName" type="string" data="Consolas"/>
|
||||
<value name="FontName2" type="string" data="Lucida Console"/>
|
||||
<value name="FontAutoSize" type="hex" data="00"/>
|
||||
<value name="FontSize" type="dword" data="00000010"/>
|
||||
<value name="FontSizeX" type="dword" data="00000000"/>
|
||||
<value name="FontSizeX2" type="dword" data="00000000"/>
|
||||
<value name="FontSizeX3" type="dword" data="00000000"/>
|
||||
<value name="FontSize" type="ulong" data="16"/>
|
||||
<value name="FontSizeX" type="ulong" data="0"/>
|
||||
<value name="FontSizeX2" type="ulong" data="0"/>
|
||||
<value name="FontSizeX3" type="ulong" data="0"/>
|
||||
<value name="FontCharSet" type="hex" data="00"/>
|
||||
<value name="Anti-aliasing" type="dword" data="00000006"/>
|
||||
<value name="Anti-aliasing" type="ulong" data="6"/>
|
||||
<value name="FontBold" type="hex" data="00"/>
|
||||
<value name="FontItalic" type="hex" data="00"/>
|
||||
<value name="Monospace" type="hex" data="01"/>
|
||||
@ -123,29 +124,29 @@
|
||||
<value name="ColorKeyTransparent" type="hex" data="00"/>
|
||||
<value name="ColorKeyValue" type="dword" data="00010101"/>
|
||||
<value name="UseCurrentSizePos" type="hex" data="01"/>
|
||||
<value name="WindowMode" type="dword" data="0000051f"/>
|
||||
<value name="WindowMode" type="dword" data="00000520"/>
|
||||
<value name="ConWnd Width" type="dword" data="00000078"/>
|
||||
<value name="ConWnd Height" type="dword" data="0000001e"/>
|
||||
<value name="Cascaded" type="hex" data="01"/>
|
||||
<value name="ConWnd X" type="dword" data="000001f4"/>
|
||||
<value name="ConWnd Y" type="dword" data="000001f4"/>
|
||||
<value name="16bit Height" type="dword" data="00000000"/>
|
||||
<value name="ConWnd X" type="long" data="500"/>
|
||||
<value name="ConWnd Y" type="long" data="500"/>
|
||||
<value name="16bit Height" type="ulong" data="0"/>
|
||||
<value name="AutoSaveSizePos" type="hex" data="01"/>
|
||||
<value name="IntegralSize" type="hex" data="00"/>
|
||||
<value name="QuakeStyle" type="hex" data="00"/>
|
||||
<value name="QuakeAnimation" type="dword" data="0000012c"/>
|
||||
<value name="QuakeAnimation" type="ulong" data="300"/>
|
||||
<value name="HideCaption" type="hex" data="00"/>
|
||||
<value name="HideChildCaption" type="hex" data="01"/>
|
||||
<value name="FocusInChildWindows" type="hex" data="01"/>
|
||||
<value name="HideCaptionAlways" type="hex" data="00"/>
|
||||
<value name="HideCaptionAlwaysFrame" type="hex" data="00"/>
|
||||
<value name="HideCaptionAlwaysDelay" type="dword" data="000007d0"/>
|
||||
<value name="HideCaptionAlwaysDisappear" type="dword" data="000007d0"/>
|
||||
<value name="HideCaptionAlwaysDelay" type="ulong" data="2000"/>
|
||||
<value name="HideCaptionAlwaysDisappear" type="ulong" data="2000"/>
|
||||
<value name="DownShowHiddenMessage" type="hex" data="00"/>
|
||||
<value name="ConsoleFontName" type="string" data="Lucida Console"/>
|
||||
<value name="ConsoleFontWidth" type="dword" data="00000003"/>
|
||||
<value name="ConsoleFontHeight" type="dword" data="00000005"/>
|
||||
<value name="DefaultBufferHeight" type="dword" data="000003e8"/>
|
||||
<value name="ConsoleFontWidth" type="long" data="3"/>
|
||||
<value name="ConsoleFontHeight" type="long" data="5"/>
|
||||
<value name="DefaultBufferHeight" type="long" data="1000"/>
|
||||
<value name="AutoBufferHeight" type="hex" data="01"/>
|
||||
<value name="CmdOutputCP" type="dword" data="00000000"/>
|
||||
<value name="ComSpec.Type" type="hex" data="00"/>
|
||||
@ -167,7 +168,7 @@
|
||||
<value name="CTS.MBtnAction" type="hex" data="00"/>
|
||||
<value name="CTS.ColorIndex" type="hex" data="e0"/>
|
||||
<value name="ClipboardConfirmEnter" type="hex" data="01"/>
|
||||
<value name="ClipboardConfirmLonger" type="dword" data="000000c8"/>
|
||||
<value name="ClipboardConfirmLonger" type="ulong" data="200"/>
|
||||
<value name="FarGotoEditorOpt" type="hex" data="01"/>
|
||||
<value name="FarGotoEditorPath" type="string" data="far.exe /e%1:%2 "%3""/>
|
||||
<value name="FixFarBorders" type="hex" data="01"/>
|
||||
@ -198,7 +199,7 @@
|
||||
<value name="MouseSkipActivation" type="hex" data="01"/>
|
||||
<value name="MouseSkipMoving" type="hex" data="01"/>
|
||||
<value name="FarHourglass" type="hex" data="01"/>
|
||||
<value name="FarHourglassDelay" type="dword" data="000001f4"/>
|
||||
<value name="FarHourglassDelay" type="ulong" data="500"/>
|
||||
<value name="Dnd" type="hex" data="01"/>
|
||||
<value name="DndDrop" type="hex" data="01"/>
|
||||
<value name="DefCopy" type="hex" data="01"/>
|
||||
@ -212,8 +213,8 @@
|
||||
<value name="StatusBar.Show" type="hex" data="00"/>
|
||||
<value name="StatusBar.Flags" type="dword" data="00000002"/>
|
||||
<value name="StatusFontFace" type="string" data="Tahoma"/>
|
||||
<value name="StatusFontCharSet" type="dword" data="00000000"/>
|
||||
<value name="StatusFontHeight" type="dword" data="0000000e"/>
|
||||
<value name="StatusFontCharSet" type="ulong" data="0"/>
|
||||
<value name="StatusFontHeight" type="long" data="14"/>
|
||||
<value name="StatusBar.Color.Back" type="dword" data="00404040"/>
|
||||
<value name="StatusBar.Color.Light" type="dword" data="00ffffff"/>
|
||||
<value name="StatusBar.Color.Dark" type="dword" data="00a0a0a0"/>
|
||||
@ -254,34 +255,34 @@
|
||||
<value name="TabSelf" type="hex" data="01"/>
|
||||
<value name="TabLazy" type="hex" data="01"/>
|
||||
<value name="TabRecent" type="hex" data="00"/>
|
||||
<value name="TabDblClick" type="dword" data="00000001"/>
|
||||
<value name="TabDblClick" type="ulong" data="1"/>
|
||||
<value name="TabsOnTaskBar" type="hex" data="02"/>
|
||||
<value name="TaskBarOverlay" type="hex" data="01"/>
|
||||
<value name="TabCloseMacro" type="string" data=""/>
|
||||
<value name="TabFontFace" type="string" data="Segoe UI"/>
|
||||
<value name="TabFontCharSet" type="dword" data="00000000"/>
|
||||
<value name="TabFontHeight" type="dword" data="00000010"/>
|
||||
<value name="TabFontCharSet" type="ulong" data="0"/>
|
||||
<value name="TabFontHeight" type="long" data="16"/>
|
||||
<value name="SaveAllEditors" type="string" data=""/>
|
||||
<value name="ToolbarAddSpace" type="dword" data="00000000"/>
|
||||
<value name="ToolbarAddSpace" type="long" data="0"/>
|
||||
<value name="TabConsole" type="string" data=" %n "/>
|
||||
<value name="TabSkipWords" type="string" data="Administrator:|Администратор:"/>
|
||||
<value name="TabPanels" type="string" data="<%c> %s"/>
|
||||
<value name="TabEditor" type="string" data="<%c.%i>{%s}"/>
|
||||
<value name="TabEditorModified" type="string" data="<%c.%i>[%s] *"/>
|
||||
<value name="TabViewer" type="string" data="<%c.%i>[%s]"/>
|
||||
<value name="TabLenMax" type="dword" data="00000014"/>
|
||||
<value name="TabLenMax" type="ulong" data="20"/>
|
||||
<value name="AdminTitleSuffix" type="string" data=" (Admin)"/>
|
||||
<value name="AdminShowShield" type="hex" data="01"/>
|
||||
<value name="HideInactiveConsoleTabs" type="hex" data="00"/>
|
||||
<value name="ShowFarWindows" type="hex" data="01"/>
|
||||
<value name="TryToCenter" type="hex" data="01"/>
|
||||
<value name="CenterConsolePad" type="dword" data="00000008"/>
|
||||
<value name="CenterConsolePad" type="ulong" data="8"/>
|
||||
<value name="ShowScrollbar" type="hex" data="02"/>
|
||||
<value name="ScrollBarAppearDelay" type="dword" data="00000064"/>
|
||||
<value name="ScrollBarDisappearDelay" type="dword" data="000003e8"/>
|
||||
<value name="IconID" type="dword" data="00000001"/>
|
||||
<value name="MainTimerElapse" type="dword" data="0000000a"/>
|
||||
<value name="MainTimerInactiveElapse" type="dword" data="000003e8"/>
|
||||
<value name="ScrollBarAppearDelay" type="ulong" data="100"/>
|
||||
<value name="ScrollBarDisappearDelay" type="ulong" data="1000"/>
|
||||
<value name="IconID" type="ulong" data="1"/>
|
||||
<value name="MainTimerElapse" type="ulong" data="10"/>
|
||||
<value name="MainTimerInactiveElapse" type="ulong" data="1000"/>
|
||||
<value name="AffinityMask" type="dword" data="00000000"/>
|
||||
<value name="SkipFocusEvents" type="hex" data="00"/>
|
||||
<value name="MonitorConsoleLang" type="hex" data="03"/>
|
||||
@ -297,32 +298,32 @@
|
||||
<value name="FindMatchWholeWords" type="hex" data="00"/>
|
||||
<value name="FindTransparent" type="hex" data="01"/>
|
||||
<value name="PanView.BackColor" type="dword" data="30ffffff"/>
|
||||
<value name="PanView.PFrame" type="dword" data="00000001"/>
|
||||
<value name="PanView.PFrame" type="long" data="1"/>
|
||||
<value name="PanView.PFrameColor" type="dword" data="28808080"/>
|
||||
<value name="PanView.SFrame" type="dword" data="00000001"/>
|
||||
<value name="PanView.SFrame" type="long" data="1"/>
|
||||
<value name="PanView.SFrameColor" type="dword" data="07c0c0c0"/>
|
||||
<value name="PanView.Thumbs.ImgSize" type="dword" data="00000060"/>
|
||||
<value name="PanView.Thumbs.SpaceX1" type="dword" data="00000001"/>
|
||||
<value name="PanView.Thumbs.SpaceY1" type="dword" data="00000001"/>
|
||||
<value name="PanView.Thumbs.SpaceX2" type="dword" data="00000005"/>
|
||||
<value name="PanView.Thumbs.SpaceY2" type="dword" data="00000014"/>
|
||||
<value name="PanView.Thumbs.LabelSpacing" type="dword" data="00000002"/>
|
||||
<value name="PanView.Thumbs.LabelPadding" type="dword" data="00000000"/>
|
||||
<value name="PanView.Thumbs.ImgSize" type="long" data="96"/>
|
||||
<value name="PanView.Thumbs.SpaceX1" type="long" data="1"/>
|
||||
<value name="PanView.Thumbs.SpaceY1" type="long" data="1"/>
|
||||
<value name="PanView.Thumbs.SpaceX2" type="long" data="5"/>
|
||||
<value name="PanView.Thumbs.SpaceY2" type="long" data="20"/>
|
||||
<value name="PanView.Thumbs.LabelSpacing" type="long" data="2"/>
|
||||
<value name="PanView.Thumbs.LabelPadding" type="long" data="0"/>
|
||||
<value name="PanView.Thumbs.FontName" type="string" data="Tahoma"/>
|
||||
<value name="PanView.Thumbs.FontHeight" type="dword" data="0000000e"/>
|
||||
<value name="PanView.Tiles.ImgSize" type="dword" data="00000030"/>
|
||||
<value name="PanView.Tiles.SpaceX1" type="dword" data="00000004"/>
|
||||
<value name="PanView.Tiles.SpaceY1" type="dword" data="00000004"/>
|
||||
<value name="PanView.Tiles.SpaceX2" type="dword" data="000000ac"/>
|
||||
<value name="PanView.Tiles.SpaceY2" type="dword" data="00000004"/>
|
||||
<value name="PanView.Tiles.LabelSpacing" type="dword" data="00000004"/>
|
||||
<value name="PanView.Tiles.LabelPadding" type="dword" data="00000001"/>
|
||||
<value name="PanView.Thumbs.FontHeight" type="long" data="14"/>
|
||||
<value name="PanView.Tiles.ImgSize" type="long" data="48"/>
|
||||
<value name="PanView.Tiles.SpaceX1" type="long" data="4"/>
|
||||
<value name="PanView.Tiles.SpaceY1" type="long" data="4"/>
|
||||
<value name="PanView.Tiles.SpaceX2" type="long" data="172"/>
|
||||
<value name="PanView.Tiles.SpaceY2" type="long" data="4"/>
|
||||
<value name="PanView.Tiles.LabelSpacing" type="long" data="4"/>
|
||||
<value name="PanView.Tiles.LabelPadding" type="long" data="1"/>
|
||||
<value name="PanView.Tiles.FontName" type="string" data="Tahoma"/>
|
||||
<value name="PanView.Tiles.FontHeight" type="dword" data="0000000e"/>
|
||||
<value name="PanView.Tiles.FontHeight" type="long" data="14"/>
|
||||
<value name="PanView.LoadPreviews" type="hex" data="03"/>
|
||||
<value name="PanView.LoadFolders" type="hex" data="01"/>
|
||||
<value name="PanView.LoadTimeout" type="dword" data="0000000f"/>
|
||||
<value name="PanView.MaxZoom" type="dword" data="00000258"/>
|
||||
<value name="PanView.LoadTimeout" type="ulong" data="15"/>
|
||||
<value name="PanView.MaxZoom" type="ulong" data="600"/>
|
||||
<value name="PanView.UsePicView2" type="hex" data="01"/>
|
||||
<value name="PanView.RestoreOnStartup" type="hex" data="00"/>
|
||||
<value name="Update.VerLocation" type="string" data=""/>
|
||||
@ -483,89 +484,98 @@
|
||||
<value name="DndLKey" type="hex" data="00"/>
|
||||
<value name="DndRKey" type="hex" data="a2"/>
|
||||
<value name="WndDragKey" type="dword" data="00121101"/>
|
||||
<key name="Tasks" modified="2015-11-24 14:43:35" build="151119">
|
||||
<value name="Count" type="dword" data="00000008"/>
|
||||
<key name="Task1" modified="2015-11-24 14:49:10" build="151119">
|
||||
<key name="Tasks" modified="2018-02-22 06:02:12" build="171109">
|
||||
<value name="Count" type="long" data="9"/>
|
||||
<key name="Task1" modified="2018-02-22 06:02:12" build="171109">
|
||||
<value name="Name" type="string" data="{cmd::Cmder as Admin}"/>
|
||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Cmd1" type="string" data="*cmd /k "%ConEmuDir%\..\init.bat""/>
|
||||
<value name="Active" type="dword" data="00000000"/>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<value name="Cmd1" type="string" data="*cmd /k ""%ConEmuDir%\..\init.bat" ""/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
</key>
|
||||
<key name="Task2" modified="2015-11-24 14:49:10" build="151119">
|
||||
<key name="Task2" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="{cmd::Cmder}"/>
|
||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Cmd1" type="string" data="cmd /k "%ConEmuDir%\..\init.bat""/>
|
||||
<value name="Active" type="dword" data="00000000"/>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<value name="Cmd1" type="string" data="cmd /k ""%ConEmuDir%\..\init.bat" ""/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
</key>
|
||||
<key name="Task3" modified="2015-11-24 14:49:10" build="151119">
|
||||
<value name="Name" type="string" data="{Powershell::PowerShell as Admin}"/>
|
||||
<key name="Task3" modified="2018-02-22 06:05:13" build="171109">
|
||||
<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="Active" type="dword" data="00000000"/>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
</key>
|
||||
<key name="Task4" modified="2015-11-24 14:49:10" build="151119">
|
||||
<value name="Name" type="string" data="{Powershell::Powershell}"/>
|
||||
<key name="Task4" modified="2018-02-22 06:05:13" build="171109">
|
||||
<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="Cmd2" type="string" data="%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe"/>
|
||||
<value name="Active" type="dword" data="00000000"/>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<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"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
</key>
|
||||
<key name="Task5" modified="2015-11-24 14:49:10" build="151119">
|
||||
<key name="Task5" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="{bash::mintty as Admin}"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="GuiArgs" type="string" data="/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico""/>
|
||||
<value name="Cmd1" type="string" data="*%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe /bin/bash -l"/>
|
||||
<value name="Active" type="dword" data="00000000"/>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<value name="Cmd1" type="string" data="*"%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe" /bin/bash -l"/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
</key>
|
||||
<key name="Task6" modified="2015-11-24 14:49:10" build="151119">
|
||||
<key name="Task6" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="{bash::mintty}"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="GuiArgs" type="string" data="/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico""/>
|
||||
<value name="Cmd1" type="string" data="%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe /bin/bash -l"/>
|
||||
<value name="Active" type="dword" data="00000000"/>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<value name="Cmd2" type="string" data="%CMDER_ROOT%vendor\git-for-windows\usr\bin\mintty.exe /bin/bash -l"/>
|
||||
<value name="Cmd1" type="string" data=""%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe" /bin/bash -l"/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
<value name="Cmd2" type="string" data=""%CMDER_ROOT%vendor\git-for-windows\usr\bin\mintty.exe" /bin/bash -l"/>
|
||||
</key>
|
||||
<key name="Task7" modified="2015-11-24 14:49:10" build="151119">
|
||||
<key name="Task7" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="{bash::bash as Admin}"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Active" type="dword" data="00000000"/>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<value name="Cmd1" type="string" data="*cmd /c "%ConEmuDir%\..\git-for-windows\bin\bash --login -i""/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
<value name="Cmd1" type="string" data="*cmd /c ""%ConEmuDir%\..\git-for-windows\bin\bash" --login -i""/>
|
||||
</key>
|
||||
<key name="Task8" modified="2015-11-24 14:49:10" build="151119">
|
||||
<key name="Task8" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="{bash::bash}"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Cmd1" type="string" data="cmd /c "%ConEmuDir%\..\git-for-windows\bin\bash --login -i""/>
|
||||
<value name="Active" type="dword" data="00000000"/>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<value name="Cmd1" type="string" data="cmd /c ""%ConEmuDir%\..\git-for-windows\bin\bash" --login -i""/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
</key>
|
||||
<key name="Task9" modified="2018-03-23 23:26:53" build="180318">
|
||||
<value name="Name" type="string" data="{WSL::bash}"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="GuiArgs" type="string" data='-icon "%USERPROFILE%\AppData\Local\lxss\bash.ico"'/>
|
||||
<value name="Cmd1" type="string" data='set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -cur_console:pm:/mnt'/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
</key>
|
||||
</key>
|
||||
|
||||
<key name="Apps" modified="2015-11-24 14:49:10" build="151119">
|
||||
<value name="Count" type="dword" data="00000000"/>
|
||||
<key name="Apps" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Count" type="long" data="0"/>
|
||||
</key>
|
||||
<key name="Colors" modified="2015-11-24 14:49:10" build="151119">
|
||||
<key name="Palette1" modified="2015-11-24 14:49:10" build="151119">
|
||||
<key name="Colors" modified="2018-02-22 06:05:13" build="171109">
|
||||
<key name="Palette1" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="Monokai"/>
|
||||
<value name="ExtendColors" type="hex" data="00"/>
|
||||
<value name="ExtendColorIdx" type="hex" data="0e"/>
|
||||
@ -606,11 +616,11 @@
|
||||
<value name="ColorTable30" type="dword" data="0000ffff"/>
|
||||
<value name="ColorTable31" type="dword" data="00ffffff"/>
|
||||
</key>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
</key>
|
||||
<value name="OneTabPerGroup" type="hex" data="00"/>
|
||||
<value name="ActivateSplitMouseOver" type="hex" data="01"/>
|
||||
<value name="TabBtnDblClick" type="dword" data="00000000"/>
|
||||
<value name="TabBtnDblClick" type="ulong" data="0"/>
|
||||
<value name="ConsoleExceptionHandler" type="hex" data="00"/>
|
||||
<value name="SaveCmdHistory" type="hex" data="00"/>
|
||||
<value name="CTS.IBeam" type="hex" data="01"/>
|
||||
@ -664,9 +674,9 @@
|
||||
<value name="StatusBar.Hide.WVDC" type="hex" data="01"/>
|
||||
<value name="StatusBar.Hide.Zoom" type="hex" data="01"/>
|
||||
<value name="StatusBar.Hide.Dpi" type="hex" data="01"/>
|
||||
<value name="TabFlashChanged" type="dword" data="00000008"/>
|
||||
<value name="TabFlashChanged" type="long" data="8"/>
|
||||
<value name="TabModifiedSuffix" type="string" data="[*]"/>
|
||||
<key name="HotKeys" modified="2015-11-24 14:43:35" build="151119">
|
||||
<key name="HotKeys" modified="2018-02-22 06:02:12" build="171109">
|
||||
<value name="KeyMacroVersion" type="hex" data="02"/>
|
||||
<value name="Multi.Modifier" type="dword" data="00000011"/>
|
||||
<value name="Multi.ArrowsModifier" type="dword" data="0000005b"/>
|
||||
@ -847,16 +857,51 @@
|
||||
<value name="Key.DebugProcess" type="dword" data="00105b44"/>
|
||||
<value name="Key.DumpProcess" type="dword" data="00000000"/>
|
||||
<value name="Key.DumpTree" type="dword" data="00000000"/>
|
||||
<value name="Multi.SplitSwap" type="dword" data="00125d58"/>
|
||||
<value name="Multi.SplitSwapU" type="dword" data="00125d26"/>
|
||||
<value name="Multi.SplitSwapD" type="dword" data="00125d28"/>
|
||||
<value name="Multi.SplitSwapL" type="dword" data="00125d25"/>
|
||||
<value name="Multi.SplitSwapR" type="dword" data="00125d27"/>
|
||||
<value name="Multi.GroupInputAll" type="dword" data="00105d47"/>
|
||||
<value name="Multi.GroupInputKey" type="dword" data="00125d47"/>
|
||||
<value name="Key.AltNumpad" type="dword" data="00000000"/>
|
||||
<value name="Key.JumpActiveMonitor" type="dword" data="00000000"/>
|
||||
<value name="Key.BufPrUp" type="dword" data="00121121"/>
|
||||
<value name="Key.BufPrDn" type="dword" data="00121122"/>
|
||||
<value name="Key.ResetTerm" type="dword" data="00000000"/>
|
||||
</key>
|
||||
<value name="StartCreateDelay" type="dword" data="00000064"/>
|
||||
<value name="StartCreateDelay" type="ulong" data="100"/>
|
||||
<value name="DefaultTerminalDebugLog" type="hex" data="00"/>
|
||||
<value name="LastMonitor" type="string" data="0,0,1920,1020"/>
|
||||
<value name="LastMonitor" type="string" data="0,0,1440,1050"/>
|
||||
<value name="Restore2ActiveMon" type="hex" data="00"/>
|
||||
<value name="DownShowExOnTopMessage" type="hex" data="00"/>
|
||||
<value name="EnvironmentSet" type="multi"/>
|
||||
<value name="EnvironmentSet" type="multi">
|
||||
<line data="set PATH=%ConEmuBaseDir%\Scripts;%PATH%"/>
|
||||
</value>
|
||||
<value name="Update.InetTool" type="hex" data="00"/>
|
||||
<value name="Update.InetToolCmd" type="string" data=""/>
|
||||
<value name="SuppressBells" type="hex" data="01"/>
|
||||
<value name="ClipboardAllLinesPosix" type="hex" data="00"/>
|
||||
<value name="ClipboardFirstLinePosix" type="hex" data="00"/>
|
||||
<value name="VividColors" type="hex" data="01"/>
|
||||
<value name="AnsiExecution" type="hex" data="01"/>
|
||||
<value name="AnsiAllowedCommands" type="multi">
|
||||
<line data="cmd -cur_console:R /cGitShowBranch.cmd"/>
|
||||
</value>
|
||||
<value name="KillSshAgent" type="hex" data="01"/>
|
||||
<value name="ProcessCtrlZ" type="hex" data="00"/>
|
||||
<value name="JumpListAutoUpdate" type="hex" data="01"/>
|
||||
<value name="CompressLongStrings" type="hex" data="01"/>
|
||||
<value name="DynamicBufferHeight" type="hex" data="01"/>
|
||||
<value name="CTS.ResetOnRelease" type="hex" data="00"/>
|
||||
<value name="CTS.EraseBeforeReset" type="hex" data="01"/>
|
||||
<value name="Anti-aliasing2" type="hex" data="00"/>
|
||||
<value name="UseAltGrayPlus" type="hex" data="01"/>
|
||||
<value name="MouseDragWindow" type="hex" data="01"/>
|
||||
<value name="DebugLog" type="hex" data="00"/>
|
||||
<value name="StatusBar.Hide.TMode" type="hex" data="01"/>
|
||||
<value name="StatusBar.Hide.RMode" type="hex" data="01"/>
|
||||
<value name="StatusBar.Hide.CellI" type="hex" data="01"/>
|
||||
</key>
|
||||
</key>
|
||||
</key>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
@ -14,6 +14,7 @@
|
||||
<ProjectGuid>{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>CmderLauncher</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
@ -25,9 +26,9 @@
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v141_xp</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
@ -60,6 +61,12 @@
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<Manifest>
|
||||
<AdditionalManifestFiles>src/app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
|
||||
</Manifest>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
@ -80,6 +87,9 @@
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
<Manifest>
|
||||
<AdditionalManifestFiles>src/app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
|
||||
</Manifest>
|
||||
<PostBuildEvent>
|
||||
<Command>copy $(TargetPath) $(SolutionDir)..\$(TargetFileName)</Command>
|
||||
</PostBuildEvent>
|
||||
@ -98,4 +108,4 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
|
@ -3,6 +3,10 @@
|
||||
#include <Shlwapi.h>
|
||||
#include "resource.h"
|
||||
#include <vector>
|
||||
#include <shlobj.h>
|
||||
|
||||
#include <regex>
|
||||
#include <iostream>
|
||||
|
||||
#pragma comment(lib, "Shlwapi.lib")
|
||||
|
||||
@ -12,8 +16,6 @@
|
||||
|
||||
#define USE_TASKBAR_API (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
|
||||
|
||||
#define XP (_WIN32_WINNT < _WIN32_WINNT_VISTA)
|
||||
|
||||
#define MB_TITLE L"Cmder Launcher"
|
||||
#define SHELL_MENU_REGISTRY_PATH_BACKGROUND L"Directory\\Background\\shell\\Cmder"
|
||||
#define SHELL_MENU_REGISTRY_PATH_LISTITEM L"Directory\\shell\\Cmder"
|
||||
@ -53,33 +55,6 @@ typedef struct _option
|
||||
|
||||
typedef std::pair<std::wstring, std::wstring> optpair;
|
||||
|
||||
optpair GetOption()
|
||||
{
|
||||
wchar_t * cmd = GetCommandLine();
|
||||
int argc;
|
||||
wchar_t ** argv = CommandLineToArgvW(cmd, &argc);
|
||||
optpair pair;
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
// no commandline argument...
|
||||
pair = optpair(L"/START", L"");
|
||||
}
|
||||
else if (argc == 2 && argv[1][0] != L'/')
|
||||
{
|
||||
// only a single argument: this should be a path...
|
||||
pair = optpair(L"/START", argv[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
pair = optpair(argv[1], argc > 2 ? argv[2] : L"");
|
||||
}
|
||||
|
||||
LocalFree(argv);
|
||||
|
||||
return pair;
|
||||
}
|
||||
|
||||
bool FileExists(const wchar_t * filePath)
|
||||
{
|
||||
HANDLE hFile = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
|
||||
@ -93,7 +68,7 @@ bool FileExists(const wchar_t * filePath)
|
||||
return false;
|
||||
}
|
||||
|
||||
void StartCmder(std::wstring path, bool is_single_mode, std::wstring taskName = L"")
|
||||
void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstring taskName = L"", std::wstring cfgRoot = L"")
|
||||
{
|
||||
#if USE_TASKBAR_API
|
||||
wchar_t appId[MAX_PATH] = { 0 };
|
||||
@ -104,10 +79,20 @@ void StartCmder(std::wstring path, bool is_single_mode, std::wstring taskName =
|
||||
wchar_t backupCfgPath[MAX_PATH] = { 0 };
|
||||
wchar_t cpuCfgPath[MAX_PATH] = { 0 };
|
||||
wchar_t userCfgPath[MAX_PATH] = { 0 };
|
||||
wchar_t oldCfgPath[MAX_PATH] = { 0 };
|
||||
wchar_t defaultCfgPath[MAX_PATH] = { 0 };
|
||||
wchar_t conEmuPath[MAX_PATH] = { 0 };
|
||||
wchar_t configDirPath[MAX_PATH] = { 0 };
|
||||
wchar_t userConfigDirPath[MAX_PATH] = { 0 };
|
||||
wchar_t userBinDirPath[MAX_PATH] = { 0 };
|
||||
wchar_t userProfiledDirPath[MAX_PATH] = { 0 };
|
||||
wchar_t args[MAX_PATH * 2 + 256] = { 0 };
|
||||
|
||||
std::wstring cmderStart = path;
|
||||
std::wstring cmderTask = taskName;
|
||||
|
||||
std::copy(cfgRoot.begin(), cfgRoot.end(), userConfigDirPath);
|
||||
userConfigDirPath[cfgRoot.length()] = 0;
|
||||
|
||||
GetModuleFileName(NULL, exeDir, sizeof(exeDir));
|
||||
|
||||
#if USE_TASKBAR_API
|
||||
@ -118,28 +103,102 @@ void StartCmder(std::wstring path, bool is_single_mode, std::wstring taskName =
|
||||
|
||||
PathCombine(icoPath, exeDir, L"icons\\cmder.ico");
|
||||
|
||||
// Check for machine-specific then user config source file.
|
||||
PathCombine(cpuCfgPath, exeDir, L"config\\ConEmu-%COMPUTERNAME%.xml");
|
||||
ExpandEnvironmentStrings(cpuCfgPath, cpuCfgPath, sizeof(cpuCfgPath) / sizeof(cpuCfgPath[0]));
|
||||
|
||||
PathCombine(userCfgPath, exeDir, L"config\\user-ConEmu.xml");
|
||||
|
||||
if (PathFileExists(cpuCfgPath)) {
|
||||
wcsncpy_s(oldCfgPath, cpuCfgPath, sizeof(cpuCfgPath));
|
||||
wcsncpy_s(backupCfgPath, cpuCfgPath, sizeof(cpuCfgPath));
|
||||
PathCombine(configDirPath, exeDir, L"config");
|
||||
if (wcscmp(userConfigDirPath, L"") == 0)
|
||||
{
|
||||
PathCombine(userConfigDirPath, exeDir, L"config");
|
||||
}
|
||||
else if (PathFileExists(userCfgPath)) {
|
||||
wcsncpy_s(oldCfgPath, userCfgPath, sizeof(userCfgPath));
|
||||
wcsncpy_s(backupCfgPath, userCfgPath, sizeof(userCfgPath));
|
||||
}
|
||||
else {
|
||||
PathCombine(oldCfgPath, exeDir, L"config\\ConEmu.xml");
|
||||
wcsncpy_s(backupCfgPath, userCfgPath, sizeof(userCfgPath));
|
||||
else
|
||||
{
|
||||
PathCombine(userBinDirPath, userConfigDirPath, L"bin");
|
||||
SHCreateDirectoryEx(0, userBinDirPath, 0);
|
||||
|
||||
PathCombine(userConfigDirPath, userConfigDirPath, L"config");
|
||||
SHCreateDirectoryEx(0, userConfigDirPath, 0);
|
||||
|
||||
PathCombine(userProfiledDirPath, userConfigDirPath, L"profile.d");
|
||||
SHCreateDirectoryEx(0, userProfiledDirPath, 0);
|
||||
}
|
||||
|
||||
// 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");
|
||||
|
||||
// Check for machine-specific then user config source file.
|
||||
PathCombine(cpuCfgPath, userConfigDirPath, L"ConEmu-%COMPUTERNAME%.xml");
|
||||
ExpandEnvironmentStrings(cpuCfgPath, cpuCfgPath, sizeof(cpuCfgPath) / sizeof(cpuCfgPath[0]));
|
||||
|
||||
PathCombine(userCfgPath, userConfigDirPath, L"user-ConEmu.xml");
|
||||
|
||||
if (PathFileExists(cpuCfgPath)) {
|
||||
if (PathFileExists(cfgPath)) {
|
||||
if (!CopyFile(cfgPath, cpuCfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy ConEmu.xml file to ConEmu-%COMPUTERNAME%.xml backup location! Restart Cmder as Administrator."
|
||||
: L"Failed to copy ConEmu.xml file to ConEmu-%COMPUTERNAME%.xml backup location!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!CopyFile(cpuCfgPath, cfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy ConEmu-%COMPUTERNAME%.xml file to vendored ConEmu.xml location! Restart Cmder as Administrator."
|
||||
: L"Failed to copy ConEmu-%COMPUTERNAME%.xml file to vendored ConEmu.xml location!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (PathFileExists(userCfgPath)) {
|
||||
if (PathFileExists(cfgPath)) {
|
||||
if (!CopyFile(cfgPath, userCfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy ConEmu.xml file to backup location! Restart Cmder as Administrator."
|
||||
: L"Failed to copy ConEmu.xml file to backup location!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!CopyFile(userCfgPath, cfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy ConEmu.xml file to vendored ConEmu.xml location! Restart Cmder as Administrator."
|
||||
: L"Failed to copy ConEmu.xml file to vendored ConEmu.xml location!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (PathFileExists(cfgPath)) {
|
||||
if (!CopyFile(cfgPath, userCfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy ConEmu.xml file to user-conemu.xml backup location! Restart Cmder as Administrator."
|
||||
: L"Failed to copy ConEmu.xml file to user-conemu.xml backup location!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!CopyFile(defaultCfgPath, cfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy Cmder default ConEmu.xml file to vendored ConEmu.xml location! Restart Cmder as Administrator."
|
||||
: L"Failed to copy Cmder default ConEmu.xml file to vendored ConEmu.xml location!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
SYSTEM_INFO sysInfo;
|
||||
GetNativeSystemInfo(&sysInfo);
|
||||
if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
|
||||
@ -149,51 +208,36 @@ void StartCmder(std::wstring path, bool is_single_mode, std::wstring taskName =
|
||||
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.exe");
|
||||
}
|
||||
|
||||
if (FileExists(oldCfgPath) && !FileExists(cfgPath))
|
||||
{
|
||||
if (!CopyFile(oldCfgPath, cfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to copy ConEmu.xml file to new location! Restart Cmder as administrator."
|
||||
: L"Failed to copy ConEmu.xml file to new location!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
else if (!CopyFile(cfgPath, backupCfgPath, FALSE))
|
||||
{
|
||||
MessageBox(NULL,
|
||||
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||
? L"Failed to backup ConEmu.xml file to ./config folder!"
|
||||
: L"Failed to backup ConEmu.xml file to ./config folder!", MB_TITLE, MB_ICONSTOP);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (streqi(path.c_str(), L""))
|
||||
{
|
||||
TCHAR buff[MAX_PATH];
|
||||
const DWORD ret = GetEnvironmentVariable(L"USERPROFILE", buff, MAX_PATH);
|
||||
path = buff;
|
||||
}
|
||||
|
||||
if (is_single_mode)
|
||||
{
|
||||
swprintf_s(args, L"/single /Icon \"%s\" /Title Cmder /dir \"%s\"", icoPath, path.c_str());
|
||||
if (!streqi(cmderTask.c_str(), L"")) {
|
||||
swprintf_s(args, L"%s /single /Icon \"%s\" /Title Cmder /dir \"%s\" /run {%s}", args, icoPath, cmderStart.c_str(), cmderTask.c_str());
|
||||
}
|
||||
else {
|
||||
swprintf_s(args, L"%s /single /Icon \"%s\" /Title Cmder /dir \"%s\"", args, icoPath, cmderStart.c_str());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
swprintf_s(args, L"/Icon \"%s\" /Title Cmder /dir \"%s\"", icoPath, path.c_str());
|
||||
}
|
||||
|
||||
if (!taskName.empty()) {
|
||||
swprintf_s(args, L"%s /run {%s}", args, taskName.c_str());
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
||||
if (wcscmp(userConfigDirPath, configDirPath) != 0)
|
||||
{
|
||||
SetEnvironmentVariable(L"CMDER_USER_CONFIG", userConfigDirPath);
|
||||
SetEnvironmentVariable(L"CMDER_USER_BIN", userBinDirPath);
|
||||
}
|
||||
|
||||
// Ensure EnvironmentVariables are propagated.
|
||||
|
||||
STARTUPINFO si = { 0 };
|
||||
|
||||
si.cb = sizeof(STARTUPINFO);
|
||||
#if USE_TASKBAR_API
|
||||
si.lpTitle = appId;
|
||||
@ -264,7 +308,6 @@ void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
||||
PathCombine(icoPath, exePath, L"icons\\cmder.ico");
|
||||
|
||||
// Now set the registry keys
|
||||
|
||||
HKEY root = GetRootKey(opt);
|
||||
|
||||
HKEY cmderKey;
|
||||
@ -290,15 +333,112 @@ void UnregisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
||||
HKEY root = GetRootKey(opt);
|
||||
HKEY cmderKey;
|
||||
FAIL_ON_ERROR(RegCreateKeyEx(root, keyBaseName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
||||
#if XP
|
||||
FAIL_ON_ERROR(SHDeleteKey(cmderKey, NULL));
|
||||
#else
|
||||
FAIL_ON_ERROR(RegDeleteTree(cmderKey, NULL));
|
||||
#endif
|
||||
RegDeleteKeyEx(root, keyBaseName, KEY_ALL_ACCESS, NULL);
|
||||
RegCloseKey(cmderKey);
|
||||
RegCloseKey(root);
|
||||
}
|
||||
|
||||
struct cmderOptions
|
||||
{
|
||||
std::wstring cmderCfgRoot = L"";
|
||||
std::wstring cmderStart = L"";
|
||||
std::wstring cmderTask = L"";
|
||||
std::wstring cmderRegScope = L"USER";
|
||||
bool cmderSingle = false;
|
||||
bool registerApp = false;
|
||||
bool unRegisterApp = false;
|
||||
bool error = false;
|
||||
};
|
||||
|
||||
cmderOptions GetOption()
|
||||
{
|
||||
cmderOptions cmderOptions;
|
||||
LPWSTR *szArgList;
|
||||
int argCount;
|
||||
|
||||
szArgList = CommandLineToArgvW(GetCommandLine(), &argCount);
|
||||
|
||||
for (int i = 1; i < argCount; i++)
|
||||
{
|
||||
// MessageBox(NULL, szArgList[i], L"Arglist contents", MB_OK);
|
||||
|
||||
if (_wcsicmp(L"/c", szArgList[i]) == 0)
|
||||
{
|
||||
TCHAR userProfile[MAX_PATH];
|
||||
const DWORD ret = GetEnvironmentVariable(L"USERPROFILE", userProfile, MAX_PATH);
|
||||
|
||||
wchar_t cmderCfgRoot[MAX_PATH] = { 0 };
|
||||
PathCombine(cmderCfgRoot, userProfile, L"cmder_cfg");
|
||||
|
||||
cmderOptions.cmderCfgRoot = cmderCfgRoot;
|
||||
|
||||
if (szArgList[i + 1] != NULL && szArgList[i + 1][0] != '/') {
|
||||
cmderOptions.cmderCfgRoot = szArgList[i + 1];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else if (_wcsicmp(L"/start", szArgList[i]) == 0)
|
||||
{
|
||||
if (PathFileExists(szArgList[i + 1]))
|
||||
{
|
||||
cmderOptions.cmderStart = szArgList[i + 1];
|
||||
i++;
|
||||
}
|
||||
else {
|
||||
MessageBox(NULL, szArgList[i + 1], L"/START - Folder doses not exist!", MB_OK);
|
||||
}
|
||||
}
|
||||
else if (_wcsicmp(L"/task", szArgList[i]) == 0)
|
||||
{
|
||||
cmderOptions.cmderTask = szArgList[i + 1];
|
||||
i++;
|
||||
}
|
||||
else if (_wcsicmp(L"/single", szArgList[i]) == 0)
|
||||
{
|
||||
cmderOptions.cmderSingle = true;
|
||||
}
|
||||
else if (_wcsicmp(L"/register", szArgList[i]) == 0)
|
||||
{
|
||||
cmderOptions.registerApp = true;
|
||||
cmderOptions.unRegisterApp = false;
|
||||
if (szArgList[i + 1] != NULL)
|
||||
{
|
||||
if (_wcsicmp(L"all", szArgList[i + 1]) == 0 || _wcsicmp(L"user", szArgList[i + 1]) == 0)
|
||||
{
|
||||
cmderOptions.cmderRegScope = szArgList[i + 1];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (_wcsicmp(L"/unregister", szArgList[i]) == 0)
|
||||
{
|
||||
cmderOptions.unRegisterApp = true;
|
||||
cmderOptions.registerApp = false;
|
||||
if (szArgList[i + 1] != NULL)
|
||||
{
|
||||
if (_wcsicmp(L"all", szArgList[i + 1]) == 0 || _wcsicmp(L"user", szArgList[i + 1]) == 0)
|
||||
{
|
||||
cmderOptions.cmderRegScope = szArgList[i + 1];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (cmderOptions.cmderStart == L"" && PathFileExists(szArgList[i]))
|
||||
{
|
||||
cmderOptions.cmderStart = szArgList[i];
|
||||
}
|
||||
else {
|
||||
MessageBox(NULL, L"Unrecognized parameter.\n\nValid options:\n\n /c [CMDER User Root Path]\n\n /task [ConEmu Task Name]\n\n [/start [Start in Path] | [Start in Path]]\n\n /single\n\nor\n\n /register [USER | ALL]\n\nor\n\n /unregister [USER | ALL]\n", MB_TITLE, MB_OK);
|
||||
cmderOptions.error = true;
|
||||
}
|
||||
}
|
||||
|
||||
LocalFree(szArgList);
|
||||
|
||||
return cmderOptions;
|
||||
}
|
||||
|
||||
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
||||
_In_opt_ HINSTANCE hPrevInstance,
|
||||
_In_ LPTSTR lpCmdLine,
|
||||
@ -308,34 +448,24 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
||||
UNREFERENCED_PARAMETER(lpCmdLine);
|
||||
UNREFERENCED_PARAMETER(nCmdShow);
|
||||
|
||||
optpair opt = GetOption();
|
||||
cmderOptions cmderOptions = GetOption();
|
||||
|
||||
if (streqi(opt.first.c_str(), L"/START"))
|
||||
{
|
||||
StartCmder(opt.second, false);
|
||||
if (cmderOptions.registerApp == true) {
|
||||
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
|
||||
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM);
|
||||
}
|
||||
else if (streqi(opt.first.c_str(), L"/SINGLE"))
|
||||
else if (cmderOptions.unRegisterApp == true)
|
||||
{
|
||||
StartCmder(opt.second, true);
|
||||
UnregisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
|
||||
UnregisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM);
|
||||
}
|
||||
else if (streqi(opt.first.c_str(), L"/TASK"))
|
||||
else if (cmderOptions.error == true)
|
||||
{
|
||||
StartCmder(L"", false, opt.second);
|
||||
}
|
||||
else if (streqi(opt.first.c_str(), L"/REGISTER"))
|
||||
{
|
||||
RegisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
|
||||
RegisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_LISTITEM);
|
||||
}
|
||||
else if (streqi(opt.first.c_str(), L"/UNREGISTER"))
|
||||
{
|
||||
UnregisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
|
||||
UnregisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_LISTITEM);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox(NULL, L"Unrecognized parameter.\n\nValid options:\n /START <path>\n /SINGLE <path>\n /TASK <name>\n /REGISTER [USER/ALL]\n /UNREGISTER [USER/ALL]", MB_TITLE, MB_OK);
|
||||
return 1;
|
||||
StartCmder(cmderOptions.cmderStart, cmderOptions.cmderSingle, cmderOptions.cmderTask, cmderOptions.cmderCfgRoot);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Binary file not shown.
54
launcher/src/app.manifest
Normal file
54
launcher/src/app.manifest
Normal file
@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||
|
||||
<!-- Project description definition -->
|
||||
<description>Cmder Console Emulator</description>
|
||||
|
||||
<!-- Project dependency definition -->
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity
|
||||
type="win32"
|
||||
name="Microsoft.Windows.Common-Controls"
|
||||
version="6.0.0.0" processorArchitecture="*"
|
||||
publicKeyToken="6595b64144ccf1df"
|
||||
language="*" />
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
|
||||
<!-- Win32 User Account Control definition -->
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<security>
|
||||
<requestedPrivileges>
|
||||
<requestedExecutionLevel
|
||||
level="asInvoker"
|
||||
uiAccess="false" />
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
|
||||
<!-- Required for appcompat behaviour -->
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<!-- Windows Vista -->
|
||||
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
|
||||
<!-- Windows 7 -->
|
||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
|
||||
<!-- Windows 8 -->
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
|
||||
<!-- Windows 8.1 -->
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
|
||||
<!-- Windows 10 -->
|
||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
|
||||
</application>
|
||||
</compatibility>
|
||||
|
||||
<!-- Add dpi awareness -->
|
||||
<asmv3:application>
|
||||
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
|
||||
<dpiAware>true/pm</dpiAware>
|
||||
</asmv3:windowsSettings>
|
||||
</asmv3:application>
|
||||
|
||||
</assembly>
|
27
launcher/src/version.rc2.sample
Normal file
27
launcher/src/version.rc2.sample
Normal file
@ -0,0 +1,27 @@
|
||||
|
||||
/**
|
||||
* WARNING: do NOT modify this file! the content of this file should be
|
||||
* automatically genereted before AppVeyor builds using the
|
||||
* respective .ps1 Powershell scripts.
|
||||
*
|
||||
*/
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Define the version numbers and build information manually here:
|
||||
|
||||
#define CMDER_MAJOR_VERSION {Cmder-Major-Version}
|
||||
#define CMDER_MINOR_VERSION {Cmder-Minor-Version}
|
||||
#define CMDER_REVISION_VERSION {Cmder-Revision-Version}
|
||||
#define CMDER_BUILD_VERSION {Cmder-Build-Version}
|
||||
#define CMDER_VERSION_STR {Cmder-Version-Str}
|
||||
|
||||
#define CMDER_PRODUCT_NAME_STR "Cmder"
|
||||
#define CMDER_FILE_DESCRIPTION_STR "Cmder: Lovely Console Emulator."
|
||||
#define CMDER_INTERNAL_NAME_STR "Cmder"
|
||||
#define CMDER_ORIGINAL_FILENAME_STR "Cmder.exe"
|
||||
#define CMDER_COMPANY_NAME_STR "Samuel Vasko"
|
||||
#define CMDER_COPYRIGHT_YEAR_STR "2016"
|
||||
|
||||
#define CMDER_DEBUGFLAG 0x0L // set to 0x1L to enable debug mode
|
||||
#define CMDER_BUILDFLAGS 0x0L
|
||||
/////////////////////////////////////////////////////////////////////////////
|
@ -2,7 +2,8 @@ launcher
|
||||
.gitignore
|
||||
.gitattributes
|
||||
.git
|
||||
*.rb
|
||||
.github
|
||||
*.md
|
||||
build
|
||||
scripts
|
||||
config\.history
|
||||
@ -19,4 +20,3 @@ appveyor.yml
|
||||
vendor\cmder.sh
|
||||
vendor\git-prompt.sh
|
||||
config\user-*
|
||||
.github_changelog_generator
|
@ -58,12 +58,15 @@ $ScriptRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
|
||||
$cmder_root = $ScriptRoot.replace("\scripts","")
|
||||
|
||||
# Dot source util functions into this scope
|
||||
. ".\utils.ps1"
|
||||
. "$PSScriptRoot\utils.ps1"
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
Push-Location -Path $saveTo
|
||||
$sources = Get-Content $sourcesPath | Out-String | Convertfrom-Json
|
||||
|
||||
# Get the version string
|
||||
$version = Get-VersionStr
|
||||
|
||||
# Check for requirements
|
||||
Ensure-Exists $sourcesPath
|
||||
Ensure-Executable "7z"
|
||||
@ -116,10 +119,17 @@ Pop-Location
|
||||
|
||||
if($Compile) {
|
||||
Push-Location -Path $launcher
|
||||
msbuild CmderLauncher.vcxproj /p:configuration=Release
|
||||
Create-RC $version ($launcher + '\src\version.rc2');
|
||||
msbuild CmderLauncher.vcxproj /t:Clean,Build /p:configuration=Release
|
||||
if ($LastExitCode -ne 0) {
|
||||
throw "msbuild failed to build the executable."
|
||||
}
|
||||
else {
|
||||
Write-Verbose "successfully built Cmder v$version!"
|
||||
if ( $Env:APPVEYOR -eq 'True' ) {
|
||||
Add-AppveyorMessage -Message "Building Cmder v$version was successful." -Category Information
|
||||
}
|
||||
}
|
||||
Pop-Location
|
||||
} else {
|
||||
Write-Warning "You are not building a launcher, Use -Compile"
|
||||
|
@ -48,7 +48,7 @@ $targets = @{
|
||||
Delete-Existing "..\Version*"
|
||||
Delete-Existing "..\build\*"
|
||||
|
||||
$version = Invoke-Expression "git describe --abbrev=0 --tags"
|
||||
$version = Get-VersionStr
|
||||
(New-Item -ItemType file "$cmderRoot\Version $version") | Out-Null
|
||||
|
||||
foreach ($t in $targets.GetEnumerator()) {
|
||||
|
@ -62,6 +62,85 @@ function Digest-Hash($path) {
|
||||
return Invoke-Expression "md5sum $path"
|
||||
}
|
||||
|
||||
function Get-VersionStr() {
|
||||
|
||||
# Clear existing variable
|
||||
if ($string) { Clear-Variable -name string }
|
||||
|
||||
# Determine if git is available
|
||||
if (Get-Command "git.exe" -ErrorAction SilentlyContinue)
|
||||
{
|
||||
|
||||
# Determine if the current diesctory is a git repository
|
||||
$GitPresent = Invoke-Expression "git rev-parse --is-inside-work-tree" -erroraction SilentlyContinue
|
||||
|
||||
if ( $GitPresent -eq 'true' )
|
||||
{
|
||||
$string = Invoke-Expression "git describe --abbrev=0 --tags"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
# Fallback used when Git is not available
|
||||
if ( -not($string) )
|
||||
{
|
||||
$string = Parse-Changelog ($PSScriptRoot + '\..\' + 'CHANGELOG.md')
|
||||
}
|
||||
|
||||
# Add build number, if AppVeyor is present
|
||||
if ( $Env:APPVEYOR -eq 'True' )
|
||||
{
|
||||
$string = $string + '.' + $Env:APPVEYOR_BUILD_NUMBER
|
||||
}
|
||||
|
||||
# Remove starting 'v' characters
|
||||
$string = $string -replace '^v+','' # normalize version string
|
||||
|
||||
return $string
|
||||
|
||||
}
|
||||
|
||||
function Parse-Changelog($file) {
|
||||
|
||||
# Define the regular expression to match the version string from changelog
|
||||
[regex]$regex = '^## \[(?<version>[\w\-\.]+)\]\([^\n()]+\)\s+\([^\n()]+\)$';
|
||||
|
||||
# Find the first match of the version string which means the latest version
|
||||
$version = Select-String -Path $file -Pattern $regex | Select-Object -First 1 | % { $_.Matches.Groups[1].Value }
|
||||
|
||||
return $version
|
||||
}
|
||||
|
||||
function Create-RC($string, $path) {
|
||||
|
||||
$version = $string + '.0.0.0.0' # padding for version string
|
||||
|
||||
if ( !(Test-Path "$path.sample") ) {
|
||||
throw "Invalid path provided for resources file."
|
||||
}
|
||||
|
||||
$resource = Get-Content -Path "$path.sample"
|
||||
$pattern = @( "Cmder-Major-Version", "Cmder-Minor-Version", "Cmder-Revision-Version", "Cmder-Build-Version" )
|
||||
$index = 0
|
||||
|
||||
# Replace all non-numeric characters to dots and split to array
|
||||
$version = $version -replace '[^0-9]+','.' -split '\.'
|
||||
|
||||
foreach ($fragment in $version) {
|
||||
if ( !$fragment ) { break }
|
||||
elseif ($index -le $pattern.length) {
|
||||
$resource = $resource.Replace( "{" + $pattern[$index++] + "}", $fragment )
|
||||
}
|
||||
}
|
||||
|
||||
# Add the version string
|
||||
$resource = $resource.Replace( "{Cmder-Version-Str}", '"' + $string + '"' )
|
||||
|
||||
# Write the results
|
||||
Set-Content -Path $path -Value $resource
|
||||
|
||||
}
|
||||
|
||||
function Register-Cmder() {
|
||||
[CmdletBinding()]
|
||||
Param
|
||||
@ -121,6 +200,8 @@ function Download-File {
|
||||
$Url,
|
||||
$File
|
||||
)
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
|
||||
# I think this is the problem
|
||||
$File = $File -Replace "/", "\"
|
||||
Write-Verbose "Downloading from $Url to $File"
|
||||
|
8
vendor/clink.lua
vendored
8
vendor/clink.lua
vendored
@ -40,12 +40,10 @@ local function set_prompt_filter()
|
||||
-- orig: $E[1;32;40m$P$S{git}{hg}$S$_$E[1;30;40m{lamb}$S$E[0m
|
||||
-- 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
|
||||
local lambda = "λ"
|
||||
cmder_prompt = string.gsub(cmder_prompt, "{cwd}", cwd)
|
||||
if env == nil then
|
||||
lambda = "λ"
|
||||
else
|
||||
lambda = "("..env..") λ"
|
||||
if env ~= nil then
|
||||
lambda = "("..env..") "..lambda
|
||||
end
|
||||
clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", lambda)
|
||||
end
|
||||
|
48
vendor/cmder.sh
vendored
48
vendor/cmder.sh
vendored
@ -4,9 +4,23 @@
|
||||
# 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.
|
||||
|
||||
function runProfiled {
|
||||
unset profile_d_scripts
|
||||
pushd "${1}" >/dev/null
|
||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||
|
||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
||||
for x in ${profile_d_scripts} ; do
|
||||
# echo Sourcing "${1}/${x}"...
|
||||
. "${1}/${x}"
|
||||
done
|
||||
fi
|
||||
popd >/dev/null
|
||||
}
|
||||
|
||||
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
|
||||
if [ "$CMDER_ROOT" == "" ] ; then
|
||||
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
|
||||
@ -42,24 +56,28 @@ if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||
fi
|
||||
|
||||
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||
unset profile_d_scripts
|
||||
pushd "${CMDER_ROOT}/config/profile.d" >/dev/null
|
||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||
|
||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
||||
for x in ${profile_d_scripts} ; do
|
||||
# echo Sourcing "${CMDER_ROOT}/config/profile.d/${x}"...
|
||||
. "${CMDER_ROOT}/config/profile.d/${x}"
|
||||
done
|
||||
fi
|
||||
popd >/dev/null
|
||||
runProfiled "${CMDER_ROOT}/config/profile.d"
|
||||
fi
|
||||
|
||||
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"
|
||||
else
|
||||
echo Creating user startup file: "${CMDER_ROOT}/config/user-profile.sh"
|
||||
cat <<-eof >"${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"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -f "${initialConfig}" ] ; then
|
||||
echo Creating user startup file: "${initialConfig}"
|
||||
cat <<-eof >"${initialConfig}"
|
||||
# use this file to run your own startup commands for msys2 bash'
|
||||
|
||||
# To add a new vendor to the path, do something like:
|
||||
|
54
vendor/cmder_exinit
vendored
54
vendor/cmder_exinit
vendored
@ -22,6 +22,25 @@
|
||||
# # from outside Cmder.
|
||||
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
||||
|
||||
function runProfiled {
|
||||
unset profile_d_scripts
|
||||
pushd "${1}" >/dev/null
|
||||
|
||||
if [ ! "x${ZSH_VERSION}" = "x" ]; then
|
||||
profile_d_scripts=$(ls *.zsh 2>/dev/null)
|
||||
elif [ ! "x${BASH_VERSION}" = "x" ]; then
|
||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||
fi
|
||||
|
||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
||||
for x in ${profile_d_scripts} ; do
|
||||
echo Sourcing "${1}/${x}"...
|
||||
. "${1}/${x}"
|
||||
done
|
||||
fi
|
||||
popd >/dev/null
|
||||
}
|
||||
|
||||
# Check that we haven't already been sourced.
|
||||
[[ -z ${CMDER_EXINIT} ]] && CMDER_EXINIT="1" || return
|
||||
|
||||
@ -55,28 +74,29 @@ if [ ! "$CMDER_ROOT" = "" ] ; then
|
||||
fi
|
||||
|
||||
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||
unset profile_d_scripts
|
||||
pushd "${CMDER_ROOT}/config/profile.d" >/dev/null
|
||||
if [ ! "x${ZSH_VERSION}" = "x" ]; then
|
||||
profile_d_scripts=$(ls *.zsh 2>/dev/null)
|
||||
elif [ ! "x${BASH_VERSION}" = "x" ]; then
|
||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||
fi
|
||||
|
||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
||||
for x in ${profile_d_scripts} ; do
|
||||
# echo Sourcing "${CMDER_ROOT}/config/profile.d/${x}"...
|
||||
. "${CMDER_ROOT}/config/profile.d/${x}"
|
||||
done
|
||||
fi
|
||||
popd >/dev/null
|
||||
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"
|
||||
fi
|
||||
|
||||
if [ -f "${CMDER_USER_CONFIG}/user-profile.sh" ] ; then
|
||||
. "${CMDER_USER_CONFIG}/user-profile.sh"
|
||||
else
|
||||
echo Creating user startup file: "${CMDER_ROOT}/config/user-profile.sh"
|
||||
cat <<-eof >"${CMDER_ROOT}/config/user-profile.sh"
|
||||
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}"
|
||||
# use this file to run your own startup commands for msys2 bash'
|
||||
|
||||
# To add a new vendor to the path, do something like:
|
||||
|
269
vendor/init.bat
vendored
269
vendor/init.bat
vendored
@ -6,36 +6,117 @@
|
||||
:: !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||
:: !!! Use "%CMDER_ROOT%\config\user-profile.cmd" to add your own startup commands
|
||||
|
||||
:: Set to > 0 for verbose output to aid in debugging.
|
||||
if not defined verbose-output ( set verbose-output=0 )
|
||||
:: 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 max_depth=1
|
||||
|
||||
:: Find root dir
|
||||
if not defined CMDER_ROOT (
|
||||
if defined ConEmuDir (
|
||||
for /f "delims=" %%i in ("%ConEmuDir%\..\..") do set "CMDER_ROOT=%%~fi"
|
||||
for /f "delims=" %%i in ("%ConEmuDir%\..\..") do (
|
||||
set "CMDER_ROOT=%%~fi"
|
||||
)
|
||||
) else (
|
||||
for /f "delims=" %%i in ("%~dp0\..") do set "CMDER_ROOT=%%~fi"
|
||||
for /f "delims=" %%i in ("%~dp0\..") do (
|
||||
set "CMDER_ROOT=%%~fi"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
:: Remove trailing '\'
|
||||
:: Remove trailing '\' from %CMDER_ROOT%
|
||||
if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%"
|
||||
|
||||
call "%cmder_root%\vendor\lib\lib_base"
|
||||
call "%cmder_root%\vendor\lib\lib_path"
|
||||
call "%cmder_root%\vendor\lib\lib_console"
|
||||
call "%cmder_root%\vendor\lib\lib_git"
|
||||
call "%cmder_root%\vendor\lib\lib_profile"
|
||||
|
||||
:var_loop
|
||||
if "%~1" == "" (
|
||||
goto :start
|
||||
) else if /i "%1"=="/v" (
|
||||
set verbose-output=1
|
||||
) else if /i "%1"=="/d" (
|
||||
set debug-output=1
|
||||
) else if /i "%1" == "/max_depth" (
|
||||
if "%~2" geq "1" if "%~2" leq "5" (
|
||||
set "max_depth=%~2"
|
||||
shift
|
||||
) else (
|
||||
%lib_console% show_error "'/max_depth' requires a number between 1 and 5!"
|
||||
exit /b
|
||||
)
|
||||
) else if /i "%1" == "/c" (
|
||||
if exist "%~2" (
|
||||
if not exist "%~2\bin" mkdir "%~2\bin"
|
||||
set "cmder_user_bin=%~2\bin"
|
||||
if not exist "%~2\config\profile.d" mkdir "%~2\config\profile.d"
|
||||
set "cmder_user_config=%~2\config"
|
||||
shift
|
||||
)
|
||||
) else if /i "%1" == "/user_aliases" (
|
||||
if exist "%~2" (
|
||||
set "user-aliases=%~2"
|
||||
shift
|
||||
)
|
||||
) else if /i "%1" == "/git_install_root" (
|
||||
if exist "%~2" (
|
||||
set "GIT_INSTALL_ROOT=%~2"
|
||||
shift
|
||||
) else (
|
||||
%lib_console% show_error "The Git install root folder "%~2", you specified does not exist!"
|
||||
exit /b
|
||||
)
|
||||
) else if /i "%1" == "/home" (
|
||||
if exist "%~2" (
|
||||
set "HOME=%~2"
|
||||
shift
|
||||
) else (
|
||||
%lib_console% show_error The home folder "%2", you specified does not exist!
|
||||
exit /b
|
||||
)
|
||||
) else if /i "%1" == "/svn_ssh" (
|
||||
set SVN_SSH=%2
|
||||
shift
|
||||
)
|
||||
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%"
|
||||
|
||||
if defined 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
|
||||
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
||||
set architecture=86
|
||||
set architecture_bits=32
|
||||
) else (
|
||||
set architecture=64
|
||||
set architecture_bits=64
|
||||
)
|
||||
|
||||
:: Tell the user about the clink config files...
|
||||
if not exist "%CMDER_ROOT%\config\settings" (
|
||||
if defined "%CMDER_USER_CONFIG%\settings" if not exist "%CMDER_USER_CONFIG%\settings" (
|
||||
echo Generating clink initial settings in "%CMDER_USER_CONFIG%\settings"
|
||||
echo Additional *.lua files in "%CMDER_USER_CONFIG%" are loaded on startup.\
|
||||
|
||||
} else if not exist "%CMDER_ROOT%\config\settings" (
|
||||
echo Generating clink initial settings in "%CMDER_ROOT%\config\settings"
|
||||
echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup.
|
||||
)
|
||||
|
||||
:: Run clink
|
||||
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
|
||||
if defined CMDER_USER_CONFIG (
|
||||
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_USER_CONFIG%" --scripts "%CMDER_ROOT%\vendor"
|
||||
) else (
|
||||
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
|
||||
)
|
||||
|
||||
:: Prepare for git-for-windows
|
||||
|
||||
@ -47,34 +128,63 @@ if not defined TERM set TERM=cygwin
|
||||
:: * if the users points as to a specific git, use that
|
||||
:: * test if a git is in path and if yes, use that
|
||||
:: * last, use our vendored git
|
||||
:: also check that we have a recent enough version of git (e.g. test for GIT\cmd\git.exe)
|
||||
:: also check that we have a recent enough version of git by examining the version string
|
||||
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 :FOUND_GIT)
|
||||
)
|
||||
|
||||
%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!
|
||||
|
||||
:: check if git is in path...
|
||||
setlocal enabledelayedexpansion
|
||||
for /F "delims=" %%F in ('where git.exe 2^>nul') do @(
|
||||
for /F "delims=" %%F in ('where git.exe 2^>nul') do (
|
||||
:: get the absolute path to the user provided git binary
|
||||
pushd %%~dpF
|
||||
cd ..
|
||||
set "test_dir=!CD!"
|
||||
popd
|
||||
if exist "!test_dir!\cmd\git.exe" (
|
||||
set "GIT_INSTALL_ROOT=!test_dir!"
|
||||
set test_dir=
|
||||
goto :FOUND_GIT
|
||||
|
||||
:: get the version information for the user provided git binary
|
||||
%lib_git% read_version USER "!test_dir!"
|
||||
%lib_git% validate_version USER !GIT_VERSION_USER!
|
||||
|
||||
if !errorlevel! geq 0 (
|
||||
:: compare the user git version against the vendored version
|
||||
%lib_git% compare_versions USER VENDORED
|
||||
|
||||
:: use the user provided git if its version is greater than, or equal to the vendored git
|
||||
if !errorlevel! geq 0 if exist "!test_dir:~0,-4!\cmd\git.exe" (
|
||||
set "GIT_INSTALL_ROOT=!test_dir:~0,-4!"
|
||||
set test_dir=
|
||||
goto :FOUND_GIT
|
||||
) else if !errorlevel! geq 0 (
|
||||
set "GIT_INSTALL_ROOT=!test_dir!"
|
||||
set test_dir=
|
||||
goto :FOUND_GIT
|
||||
) else (
|
||||
call :verbose-output Found old !GIT_VERSION_USER! in "!test_dir!", but not using...
|
||||
set test_dir=
|
||||
)
|
||||
) else (
|
||||
echo Found old git version in "!test_dir!", but not using...
|
||||
set test_dir=
|
||||
|
||||
:: if the user provided git executable is not found
|
||||
if !errorlevel! equ -255 (
|
||||
call :verbose-output No git at "!git_executable!" found.
|
||||
set test_dir=
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
:: our last hope: our own git...
|
||||
:VENDORED_GIT
|
||||
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
|
||||
set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows"
|
||||
call :verbose-output Add the minimal git commands to the front of the path
|
||||
set "PATH=!GIT_INSTALL_ROOT!\cmd;%PATH%"
|
||||
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\cmd"
|
||||
) else (
|
||||
goto :NO_GIT
|
||||
)
|
||||
@ -83,38 +193,54 @@ if exist "%CMDER_ROOT%\vendor\git-for-windows" (
|
||||
:: 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
|
||||
call :verbose-output Enhancing PATH with unix commands from git in "%GIT_INSTALL_ROOT%\usr\bin"
|
||||
set "PATH=%PATH%;%GIT_INSTALL_ROOT%\usr\bin;%GIT_INSTALL_ROOT%\usr\share\vim\vim74"
|
||||
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
|
||||
) else if exist "!GIT_INSTALL_ROOT!\mingw64" (
|
||||
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\mingw64" 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"
|
||||
)
|
||||
|
||||
:NO_GIT
|
||||
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%'"
|
||||
goto :PATH_ENHANCE
|
||||
|
||||
:: Enhance Path
|
||||
set "PATH=%CMDER_ROOT%\bin;%PATH%;%CMDER_ROOT%\"
|
||||
:NO_GIT
|
||||
:: Skip this if GIT WAS FOUND else we did 'endlocal' above!
|
||||
endlocal
|
||||
|
||||
:PATH_ENHANCE
|
||||
%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%
|
||||
)
|
||||
%lib_path% enhance_path "%CMDER_ROOT%" append
|
||||
|
||||
:: Drop *.bat and *.cmd files into "%CMDER_ROOT%\config\profile.d"
|
||||
:: to run them at startup.
|
||||
if not exist "%CMDER_ROOT%\config\profile.d" (
|
||||
mkdir "%CMDER_ROOT%\config\profile.d"
|
||||
%lib_profile% run_profile_d "%CMDER_ROOT%\config\profile.d"
|
||||
if defined CMDER_USER_CONFIG (
|
||||
%lib_profile% run_profile_d "%CMDER_USER_CONFIG%\profile.d"
|
||||
)
|
||||
|
||||
pushd "%CMDER_ROOT%\config\profile.d"
|
||||
for /f "usebackq" %%x in ( `dir /b *.bat *.cmd 2^>nul` ) do (
|
||||
call :verbose-output Calling "%CMDER_ROOT%\config\profile.d\%%x"...
|
||||
call "%CMDER_ROOT%\config\profile.d\%%x"
|
||||
)
|
||||
popd
|
||||
|
||||
:: Allows user to override default aliases store using profile.d
|
||||
:: 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',
|
||||
:: and be in profile.d folder.
|
||||
set "user-aliases=%CMDER_ROOT%\config\user-aliases.cmd"
|
||||
if not defined user-aliases (
|
||||
if defined CMDER_USER_CONFIG (
|
||||
set "user-aliases=%CMDER_USER_CONFIG%\user-aliases.cmd"
|
||||
) else (
|
||||
set "user-aliases=%CMDER_ROOT%\config\user-aliases.cmd"
|
||||
)
|
||||
)
|
||||
|
||||
:: The aliases environment variable is used by alias.bat to id
|
||||
:: the default file to store new aliases in.
|
||||
@ -131,8 +257,13 @@ if not exist "%user-aliases%" (
|
||||
type "%user-aliases%" | findstr /i ";= Add aliases below here" >nul
|
||||
if "!errorlevel!" == "1" (
|
||||
echo Creating initial user-aliases store in "%user-aliases%"...
|
||||
copy "%CMDER_ROOT%\%user-aliases%" "%user-aliases%.old_format"
|
||||
copy "%CMDER_ROOT%\vendor\user-aliases.cmd.example" "%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%"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@ -145,49 +276,57 @@ if exist "%CMDER_ROOT%\config\aliases" (
|
||||
type "%user-aliases%.old_format" >> "%user-aliases%" && del "%user-aliases%.old_format"
|
||||
)
|
||||
endlocal
|
||||
|
||||
:: Add aliases to the environment
|
||||
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 "%CMDER_ROOT%\vendor\git-for-windows\post-install.bat" (
|
||||
call :verbose-output Running Git for Windows one time Post Install....
|
||||
pushd "%CMDER_ROOT%\vendor\git-for-windows\"
|
||||
"%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe" --no-needs-console --hide --no-cd --command=post-install.bat
|
||||
if exist "%GIT_INSTALL_ROOT%\post-install.bat" (
|
||||
%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
|
||||
)
|
||||
|
||||
:: Set home path
|
||||
if not defined HOME set "HOME=%USERPROFILE%"
|
||||
%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" (
|
||||
REM Create this file and place your own command in there
|
||||
call "%CMDER_ROOT%\config\user-profile.cmd"
|
||||
) else (
|
||||
echo Creating user startup file: "%CMDER_ROOT%\config\user-profile.cmd"
|
||||
(
|
||||
echo :: use this file to run your own startup commands
|
||||
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 :: 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.
|
||||
) > "%CMDER_ROOT%\config\user-profile.cmd"
|
||||
)
|
||||
|
||||
exit /b
|
||||
if defined CMDER_USER_CONFIG (
|
||||
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"
|
||||
)
|
||||
)
|
||||
|
||||
::
|
||||
:: sub-routines below here
|
||||
::
|
||||
:verbose-output
|
||||
if %verbose-output% gtr 0 echo %*
|
||||
exit /b
|
||||
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.
|
||||
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 :: 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 @echo off
|
||||
) >"%initialConfig%"
|
||||
)
|
||||
|
||||
set initialConfig=
|
||||
exit /b
|
||||
|
48
vendor/lib/lib_base.cmd
vendored
Normal file
48
vendor/lib/lib_base.cmd
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
@echo off
|
||||
|
||||
set lib_base=call "%~dp0lib_base.cmd"
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%0"
|
||||
) else if "%1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
|
||||
exit /b
|
||||
|
||||
:help
|
||||
:::===============================================================================
|
||||
:::show_subs - shows all sub routines in a .bat/.cmd file with documentation
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "$0"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_base% show_subs "file"
|
||||
:::.
|
||||
:::options:
|
||||
:::.
|
||||
::: file <in> full path to file containing lib_routines to display
|
||||
:::.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
for /f "tokens=* delims=:" %%a in ('type "%~1" ^| findstr /i /r "^:::"') do (
|
||||
rem echo a="%%a"
|
||||
|
||||
if "%%a"==" " (
|
||||
echo.
|
||||
if "%%a"=="." (
|
||||
echo.
|
||||
) else if /i "%%a" == "usage" (
|
||||
echo %%a:
|
||||
) else if /i "%%a" == "options" (
|
||||
echo %%a:
|
||||
) else if not "%%a" == "" (
|
||||
echo %%a
|
||||
)
|
||||
)
|
||||
|
||||
pause
|
||||
exit /b
|
79
vendor/lib/lib_console.cmd
vendored
Normal file
79
vendor/lib/lib_console.cmd
vendored
Normal file
@ -0,0 +1,79 @@
|
||||
@echo off
|
||||
|
||||
rem set args=%*
|
||||
|
||||
call "%~dp0lib_base.cmd"
|
||||
set lib_console=call "%~dp0lib_console.cmd"
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%0"
|
||||
) else if "%1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
|
||||
exit /b
|
||||
|
||||
:debug-output
|
||||
:::===============================================================================
|
||||
:::debug-output - Output a debug message to the console.
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "$0"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_console% debug-output [caller] [message]
|
||||
:::.
|
||||
:::required:
|
||||
:::.
|
||||
::: [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.
|
||||
exit /b
|
||||
|
||||
:verbose-output
|
||||
:::===============================================================================
|
||||
:::verbose-output - Output a debug message to the console.
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "$0"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_console% verbose-output "[message]"
|
||||
:::.
|
||||
:::required:
|
||||
:::.
|
||||
::: [message] <in> Message text to display.
|
||||
:::.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
if %verbose-output% gtr 0 echo %~1
|
||||
exit /b
|
||||
|
||||
:show_error
|
||||
:::===============================================================================
|
||||
:::show_error - Output an error message to the console.
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "$0"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_console% show_error "[message]"
|
||||
:::.
|
||||
:::required:
|
||||
:::.
|
||||
::: [message] <in> Message text to display.
|
||||
:::.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
echo ERROR: %~1
|
||||
exit /b
|
168
vendor/lib/lib_git.cmd
vendored
Normal file
168
vendor/lib/lib_git.cmd
vendored
Normal file
@ -0,0 +1,168 @@
|
||||
@echo off
|
||||
|
||||
|
||||
call "%~dp0lib_base.cmd"
|
||||
call "%%~dp0lib_console.cmd"
|
||||
set lib_git=call "%~dp0lib_git.cmd"
|
||||
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%0"
|
||||
) else if "%1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
|
||||
exit /b
|
||||
|
||||
:read_version
|
||||
:::===============================================================================
|
||||
:::read_version - Get the git.exe verion
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "$0"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_git% read_version "[dir_path]"
|
||||
:::.
|
||||
:::required:
|
||||
:::.
|
||||
::: [GIT SCOPE] <in> USER | VENDORED
|
||||
::: [GIT PATH] <in> Fully qualified path to the Git command root.
|
||||
:::.
|
||||
:::output:
|
||||
:::.
|
||||
::: GIT_VERSION_[GIT SCOPE] <out> Env variable containing Git semantic version string
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
:: clear the variables
|
||||
set GIT_VERSION_%~1=
|
||||
|
||||
:: set the executable path
|
||||
set "git_executable=%~2\git.exe"
|
||||
%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."
|
||||
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"
|
||||
) else (
|
||||
%lib_console% show_error "git --version" returned an inproper version string!
|
||||
pause
|
||||
exit /b
|
||||
)
|
||||
)
|
||||
|
||||
endlocal & set GIT_VERSION%~1=!GIT_VERSION%~1!
|
||||
exit /b
|
||||
|
||||
:parse_version
|
||||
:::===============================================================================
|
||||
:::parse_version - Parse semantic version string 'x.x.x.x' and return the pieces
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "$0"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_git% parse_version "[VERSION]"
|
||||
:::.
|
||||
:::required:
|
||||
:::.
|
||||
::: [SCOPE] <in> USER | VENDORED
|
||||
::: [VERSION] <in> Semantic version String. Ex: 1.2.3.4
|
||||
:::.
|
||||
:::output:
|
||||
:::.
|
||||
::: [SCOPE]_MAJOR <out> Scoped Major version.
|
||||
::: [SCOPE]_MINOR <out> Scoped Minor version.
|
||||
::: [SCOPE]_PATCH <out> Scoped Patch version.
|
||||
::: [SCOPE]_BUILD <out> Scoped Build version.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
:: process a `x.x.x.xxxx.x` formatted string
|
||||
for /F "tokens=1-3* delims=.,-" %%A in ("%2") do (
|
||||
set "%~1_MAJOR=%%A"
|
||||
set "%~1_MINOR=%%B"
|
||||
set "%~1_PATCH=%%C"
|
||||
set "%~1_BUILD=%%D"
|
||||
)
|
||||
|
||||
endlocal & set "%~1_MAJOR=!%~1_MAJOR!" & set "%~1_MINOR=!%~1_MINOR!" & set "%~1_PATCH=!%~1_PATCH!" & set "%~1_BUILD=!%~1_BUILD!"
|
||||
exit /b
|
||||
|
||||
:validate_version
|
||||
:::===============================================================================
|
||||
:::validate_version - Validate semantic version string 'x.x.x.x'.
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "$0"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_git% validate_version [SCOPE] [VERSION]
|
||||
:::.
|
||||
:::required:
|
||||
:::.
|
||||
::: [SCOPE] <in> Example: USER | VENDORED
|
||||
::: [VERSION] <in> Semantic version String. Ex: 1.2.3.4
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
:: now parse the version information into the corresponding variables
|
||||
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!"
|
||||
exit /b
|
||||
|
||||
:compare_versions
|
||||
:::===============================================================================
|
||||
:::compare_version - Compare semantic versions return latest version.
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "$0"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_git% validate_version [SCOPE1] [SCOPE2]
|
||||
:::.
|
||||
:::required:
|
||||
:::.
|
||||
::: [SCOPE1] <in> Example: USER
|
||||
::: [SCOPE2] <in> Example: VENDOR
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
:: 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!
|
||||
|
||||
if !%~1_MAJOR! GTR !%~2_MAJOR! (exit /b 1)
|
||||
if !%~1_MAJOR! LSS !%~2_MAJOR! (exit /b -1)
|
||||
|
||||
if !%~1_MINOR! GTR !%~2_MINOR! (exit /b 1)
|
||||
if !%~1_MINOR! LSS !%~2_MINOR! (exit /b -1)
|
||||
|
||||
if !%~1_PATCH! GTR !%~2_PATCH! (exit /b 1)
|
||||
if !%~1_PATCH! LSS !%~2_PATCH! (exit /b -1)
|
||||
|
||||
if !%~1_BUILD! GTR !%~2_BUILD! (exit /b 1)
|
||||
if !%~1_BUILD! LSS !%~2_BUILD! (exit /b -1)
|
||||
|
||||
:: looks like we have the same versions.
|
||||
exit /b 0
|
155
vendor/lib/lib_path.cmd
vendored
Normal file
155
vendor/lib/lib_path.cmd
vendored
Normal file
@ -0,0 +1,155 @@
|
||||
@echo off
|
||||
|
||||
|
||||
call "%~dp0lib_base.cmd"
|
||||
call "%%~dp0lib_console"
|
||||
set lib_path=call "%~dp0lib_path.cmd"
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%0"
|
||||
) else if "%1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
|
||||
exit /b
|
||||
|
||||
:enhance_path
|
||||
:::===============================================================================
|
||||
:::enhance_path - Add a directory to the path env variable if required.
|
||||
:::
|
||||
:::include:
|
||||
:::
|
||||
::: call "$0"
|
||||
:::
|
||||
:::usage:
|
||||
:::
|
||||
::: %lib_path% enhance_path "[dir_path]" [append]
|
||||
:::
|
||||
:::required:
|
||||
:::
|
||||
::: [dir_path] <in> Fully qualified directory path. Ex: "c:\bin"
|
||||
:::
|
||||
:::options:
|
||||
:::
|
||||
::: append <in> Append to the path env variable rather than pre-pend.
|
||||
:::
|
||||
:::output:
|
||||
:::
|
||||
::: path <out> Sets the path env variable if required.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
if "%~1" neq "" (
|
||||
set "add_path=%~1"
|
||||
) else (
|
||||
%lib_console% show_error "You must specify a directory to add to the path!"
|
||||
exit 1
|
||||
)
|
||||
|
||||
if "%~2" neq "" if /i "%~2" == "append" (
|
||||
set "position=%~2"
|
||||
) else (
|
||||
set "position="
|
||||
)
|
||||
|
||||
set "find_query=%add_path%"
|
||||
set "find_query=%find_query:\=\\%"
|
||||
set "find_query=%find_query: =\ %"
|
||||
set found=0
|
||||
|
||||
%lib_console% debug-output :enhance_path "Env Var - find_query=%find_query%"
|
||||
echo "%PATH%"|findstr >nul /I /R ";%find_query%\"$"
|
||||
if "!ERRORLEVEL!" == "0" set found=1
|
||||
|
||||
%lib_console% debug-output :enhance_path "Env Var 1 - found=!found!"
|
||||
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 "%found%" == "0" (
|
||||
%lib_console% debug-output :enhance_path "BEFORE Env Var - PATH=!path!"
|
||||
if /i "%position%" == "append" (
|
||||
%lib_console% debug-output :enhance_path "Appending '%add_path%'"
|
||||
set "PATH=%PATH%;%add_path%"
|
||||
) else (
|
||||
%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!"
|
||||
)
|
||||
|
||||
endlocal & set "PATH=%PATH:;;=;%"
|
||||
exit /b
|
||||
|
||||
:enhance_path_recursive
|
||||
:::===============================================================================
|
||||
:::enhance_path_recursive - Add a directory and subs to the path env variable if
|
||||
::: required.
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "$0"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: call "%~DP0lib_path" enhance_path_recursive "[dir_path]" [max_depth] [append]
|
||||
:::.
|
||||
:::required:
|
||||
:::.
|
||||
::: [dir_path] <in> Fully qualified directory path. Ex: "c:\bin"
|
||||
:::.
|
||||
:::options:
|
||||
:::.
|
||||
::: [max_depth] <in> Max recuse depth. Default: 1
|
||||
:::.
|
||||
::: append <in> Append instead to path env variable rather than pre-pend.
|
||||
:::.
|
||||
:::output:
|
||||
:::.
|
||||
::: path <out> Sets the path env variable if required.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
if "%~1" neq "" (
|
||||
set "add_path=%~1"
|
||||
) else (
|
||||
%lib_console% show_error "You must specify a directory to add to the path!"
|
||||
exit 1
|
||||
)
|
||||
|
||||
if "%~2" gtr "1" (
|
||||
set "max_depth=%~2"
|
||||
) else (
|
||||
set "max_depth=1"
|
||||
)
|
||||
|
||||
if "%~3" neq "" if /i "%~3" == "append" (
|
||||
set "position=%~3"
|
||||
) else (
|
||||
set "position="
|
||||
)
|
||||
|
||||
if "%depth%" == "" set depth=0
|
||||
|
||||
%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%'"
|
||||
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'"
|
||||
call :enhance_path_recursive "%%~fi" %max_depth% %position%
|
||||
%lib_console% debug-output :enhance_path_recursive "Env Var AFTER- depth=!depth!"
|
||||
)
|
||||
)
|
||||
|
||||
endlocal & set "PATH=%PATH%"
|
||||
exit /b
|
46
vendor/lib/lib_profile.cmd
vendored
Normal file
46
vendor/lib/lib_profile.cmd
vendored
Normal file
@ -0,0 +1,46 @@
|
||||
@echo off
|
||||
|
||||
|
||||
call "%~dp0lib_base.cmd"
|
||||
call "%%~dp0lib_console"
|
||||
set lib_profile=call "%~dp0lib_profile.cmd"
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%0"
|
||||
) else if "%1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
|
||||
exit /b
|
||||
|
||||
:run_profile_d
|
||||
:::===============================================================================
|
||||
:::run_profile_d - Run all scripts in the passed dir path
|
||||
:::
|
||||
:::include:
|
||||
:::
|
||||
::: call "$0"
|
||||
:::
|
||||
:::usage:
|
||||
:::
|
||||
::: %lib_profile% "[dir_path]"
|
||||
:::
|
||||
:::required:
|
||||
:::
|
||||
::: [dir_path] <in> Fully qualified directory path containing init *.cmd|*.bat.
|
||||
::: Example: "c:\bin"
|
||||
:::
|
||||
::: path <out> Sets the path env variable if required.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
if not exist "%~1" (
|
||||
mkdir "%~1"
|
||||
)
|
||||
|
||||
pushd "%~1"
|
||||
for /f "usebackq" %%x in ( `dir /b *.bat *.cmd 2^>nul` ) do (
|
||||
%lib_console% verbose-output "Calling '%~1\%%x'..."
|
||||
call "%~1\%%x"
|
||||
)
|
||||
popd
|
||||
exit /b
|
32
vendor/profile.ps1
vendored
32
vendor/profile.ps1
vendored
@ -9,6 +9,10 @@ if(!$PSScriptRoot) {
|
||||
$PSScriptRoot = Split-Path $Script:MyInvocation.MyCommand.Path
|
||||
}
|
||||
|
||||
if ($ENV:CMDER_USER_CONFIG) {
|
||||
# write-host "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '$ENV:CMDER_USER_CONFIG'!"
|
||||
}
|
||||
|
||||
# We do this for Powershell as Admin Sessions because CMDER_ROOT is not beng set.
|
||||
if (! $ENV:CMDER_ROOT ) {
|
||||
if ( $ENV:ConEmuDir ) {
|
||||
@ -25,6 +29,10 @@ $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/"
|
||||
|
||||
@ -130,10 +138,32 @@ foreach ($x in Get-ChildItem *.ps1) {
|
||||
}
|
||||
popd
|
||||
|
||||
# Drop *.ps1 files into "$ENV:CMDER_USER_CONFIG\config\profile.d"
|
||||
# to source them at startup. Requires using cmder.exe /C [cmder_user_root_path] argument
|
||||
if ($ENV:CMDER_USER_CONFIG -ne "" -and (test-path "$ENV:CMDER_USER_CONFIG\profile.d")) {
|
||||
pushd $ENV:CMDER_USER_CONFIG\profile.d
|
||||
foreach ($x in Get-ChildItem *.ps1) {
|
||||
# write-host write-host Sourcing $x
|
||||
. $x
|
||||
}
|
||||
popd
|
||||
}
|
||||
|
||||
|
||||
|
||||
$CmderUserProfilePath = Join-Path $env:CMDER_ROOT "config\user-profile.ps1"
|
||||
if(Test-Path $CmderUserProfilePath) {
|
||||
if (Test-Path $CmderUserProfilePath) {
|
||||
# Create this file and place your own command in there.
|
||||
. "$CmderUserProfilePath"
|
||||
|
||||
}
|
||||
|
||||
if ($ENV:CMDER_USER_CONFIG) {
|
||||
$CmderUserProfilePath = Join-Path $ENV:CMDER_USER_CONFIG "user-profile.ps1"
|
||||
}
|
||||
|
||||
if (Test-Path $CmderUserProfilePath) {
|
||||
. "$CmderUserProfilePath"
|
||||
} else {
|
||||
# This multiline string cannot be indented, for this reason I've not indented the whole block
|
||||
|
||||
|
81
vendor/psmodules/PsGet/PsGet.psm1
vendored
81
vendor/psmodules/PsGet/PsGet.psm1
vendored
@ -9,8 +9,16 @@
|
||||
#region Setup
|
||||
|
||||
Write-Debug 'Set up the global scope config variables.'
|
||||
$global:UserModuleBasePath = Join-Path -Path ([Environment]::GetFolderPath('MyDocuments')) -ChildPath 'WindowsPowerShell\Modules'
|
||||
$global:CommonGlobalModuleBasePath = Join-Path -Path $env:CommonProgramFiles -ChildPath 'Modules'
|
||||
if ([Environment]::GetFolderPath('MyDocuments')) {
|
||||
$global:UserModuleBasePath = Join-Path -Path ([Environment]::GetFolderPath('MyDocuments')) -ChildPath 'WindowsPowerShell\Modules'
|
||||
}
|
||||
else {
|
||||
# Support scenarios where PSGet is running without a MyDocuments special folder (e.g. executing within a DSC resource)
|
||||
$global:UserModuleBasePath = Join-Path -Path $env:ProgramFiles -ChildPath 'WindowsPowerShell\Modules'
|
||||
}
|
||||
|
||||
# NOTE: Path changed to align with current MS conventions
|
||||
$global:CommonGlobalModuleBasePath = Join-Path -Path $env:ProgramFiles -ChildPath 'WindowsPowerShell\Modules'
|
||||
|
||||
if (-not (Test-Path -Path:variable:global:PsGetDirectoryUrl)) {
|
||||
$global:PsGetDirectoryUrl = 'https://github.com/psget/psget/raw/master/Directory.xml'
|
||||
@ -96,16 +104,16 @@ Set-Variable -Name PSGET_PSD1 -Value 'PSD1' -Option Constant -Scope Script
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
Default: definition in directory file or 'Install.ps1'
|
||||
|
||||
.PARAMETER Force
|
||||
OBSOLATE
|
||||
OBSOLETE
|
||||
Alternative name for 'Update'.
|
||||
|
||||
.PARAMETER Startup
|
||||
OBSOLATE
|
||||
OBSOLETE
|
||||
Alternative name for 'AddToProfile'.
|
||||
|
||||
.LINK
|
||||
@ -349,7 +357,7 @@ function Install-Module {
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
Will not be check in combination with -All switch.
|
||||
Default: 'Install.ps1'
|
||||
@ -414,7 +422,7 @@ function Update-Module {
|
||||
|
||||
}
|
||||
else {
|
||||
Install-Module -Module:$Module -Destination:$Destination -ModuleHash:$ModuleHash -Global:$Global -DoNotImport:$DoNotImport -AddToProfile:$AddToProfile -DirectoryUrl:$DirectoryUrl -Updat -DoNotPostInstall:$DoNotPostInstall -PostInstallHook:$PostInstallHook
|
||||
Install-Module -Module:$Module -Destination:$Destination -ModuleHash:$ModuleHash -Global:$Global -DoNotImport:$DoNotImport -AddToProfile:$AddToProfile -DirectoryUrl:$DirectoryUrl -Update -DoNotPostInstall:$DoNotPostInstall -PostInstallHook:$PostInstallHook
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -480,7 +488,9 @@ function Get-PsGetModuleInfo {
|
||||
|
||||
try {
|
||||
Write-Verbose "Downloading modules repository from $DirectoryUrl"
|
||||
$repoRaw = $client.DownloadString($DirectoryUrl)
|
||||
$stream = $client.OpenRead($DirectoryUrl)
|
||||
$repoXmlTemp = New-Object -TypeName System.Xml.XmlDocument
|
||||
$repoXmlTemp.Load($stream)
|
||||
$StatusCode = 200
|
||||
}
|
||||
catch [System.Net.WebException] {
|
||||
@ -489,7 +499,7 @@ function Get-PsGetModuleInfo {
|
||||
}
|
||||
|
||||
if ($StatusCode -eq 200) {
|
||||
$repoXml = [xml]$repoRaw
|
||||
$repoXml = [xml]$repoXmlTemp
|
||||
|
||||
$CacheEntry.ETag = $client.ResponseHeaders['ETag']
|
||||
if (-not (Test-Path -Path $PsGetDataPath)) {
|
||||
@ -629,7 +639,7 @@ function Get-PsGetModuleHash {
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
Default: definition in directory file or 'Install.ps1'
|
||||
#>
|
||||
@ -754,7 +764,7 @@ function Install-ModuleFromDirectory {
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
Default: 'Install.ps1'
|
||||
#>
|
||||
@ -863,7 +873,7 @@ function Install-ModuleFromWeb {
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
Default: 'Install.ps1'
|
||||
#>
|
||||
@ -1010,7 +1020,7 @@ function Install-ModuleFromLocal {
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
Default: 'Install.ps1'
|
||||
#>
|
||||
@ -1311,6 +1321,13 @@ function Import-ModuleGlobally {
|
||||
Write-Verbose "Importing installed module '$ModuleName' from '$($installedModule.ModuleBase)'"
|
||||
Import-Module -Name $ModuleBase -Global -Force:$Force
|
||||
|
||||
# For psget no further checks are needed and their execution cause
|
||||
# an error for the update process of 'psget'
|
||||
# https://github.com/psget/psget/issues/186
|
||||
if ($ModuleName -eq 'PsGet') {
|
||||
return
|
||||
}
|
||||
|
||||
$IdentityExtension = [System.IO.Path]::GetExtension((Get-ModuleFile -Path $ModuleBase -ModuleName $ModuleName))
|
||||
if ($IdentityExtension -eq '.dll') {
|
||||
# import module twice for binary modules to workaround PowerShell bug:
|
||||
@ -1514,7 +1531,7 @@ function Invoke-DownloadModuleFromWeb {
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
#>
|
||||
function Install-ModuleToDestination {
|
||||
@ -1628,7 +1645,7 @@ function Install-ModuleToDestination {
|
||||
|
||||
$isDestinationInPSModulePath = $env:PSModulePath.Contains($Destination)
|
||||
if ($isDestinationInPSModulePath) {
|
||||
if (-not (Get-Module $ModuleName -ListAvailable)) {
|
||||
if (-not (Get-Module $InstallWithModuleName -ListAvailable)) {
|
||||
throw 'For some unexpected reasons module was not installed.'
|
||||
}
|
||||
}
|
||||
@ -1639,14 +1656,14 @@ function Install-ModuleToDestination {
|
||||
}
|
||||
|
||||
if ($Update) {
|
||||
Write-Host "Module $ModuleName was successfully updated." -Foreground Green
|
||||
Write-Host "Module $InstallWithModuleName was successfully updated." -Foreground Green
|
||||
}
|
||||
else {
|
||||
Write-Host "Module $ModuleName was successfully installed." -Foreground Green
|
||||
Write-Host "Module $InstallWithModuleName was successfully installed." -Foreground Green
|
||||
}
|
||||
|
||||
if (-not $DoNotImport) {
|
||||
Import-ModuleGlobally -ModuleName:$ModuleName -ModuleBase:$targetFolderPath -Force:$Update
|
||||
Import-ModuleGlobally -ModuleName:$InstallWithModuleName -ModuleBase:$targetFolderPath -Force:$Update
|
||||
}
|
||||
|
||||
if ($isDestinationInPSModulePath -and $AddToProfile) {
|
||||
@ -1657,8 +1674,8 @@ function Install-ModuleToDestination {
|
||||
New-Item $PROFILE -Type File -Force -ErrorAction Stop
|
||||
}
|
||||
|
||||
if (Select-String $PROFILE -Pattern "Import-Module $ModuleName") {
|
||||
Write-Verbose "Import-Module $ModuleName command already in your profile"
|
||||
if (Select-String $PROFILE -Pattern "Import-Module $InstallWithModuleName") {
|
||||
Write-Verbose "Import-Module $InstallWithModuleName command already in your profile"
|
||||
}
|
||||
else {
|
||||
$signature = Get-AuthenticodeSignature -FilePath $PROFILE
|
||||
@ -1667,8 +1684,8 @@ function Install-ModuleToDestination {
|
||||
Write-Error "PsGet cannot modify code-signed profile '$PROFILE'."
|
||||
}
|
||||
else {
|
||||
Write-Verbose "Add Import-Module $ModuleName command to the profile"
|
||||
"`nImport-Module $ModuleName" | Add-Content $PROFILE
|
||||
Write-Verbose "Add Import-Module $InstallWithModuleName command to the profile"
|
||||
"`nImport-Module $InstallWithModuleName" | Add-Content $PROFILE
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1736,7 +1753,7 @@ function Test-ModuleInstalledAndImport {
|
||||
return $false
|
||||
}
|
||||
|
||||
Write-Warning "The module '$ModuleName' was installed at more then one location. Installed paths:`n`t$($installedModule.ModuleBase | Format-List | Out-String)`n'$($firstInstalledModule.ModuleBase)' is the searched destination."
|
||||
Write-Warning "The module '$ModuleName' was installed at more than one location. Installed paths:`n`t$($installedModule.ModuleBase | Format-List | Out-String)`n'$($firstInstalledModule.ModuleBase)' is the searched destination."
|
||||
$installedModule = $targetModule
|
||||
}
|
||||
elseif ((Split-Path $installedModule.ModuleBase) -ne $Destination) {
|
||||
@ -1801,7 +1818,7 @@ function Expand-ZipModule {
|
||||
|
||||
# Check if powershell v3+ and .net v4.5 is available
|
||||
$netFailed = $true
|
||||
if ( $PSVersionTable.PSVersion.Major -ge 3 -and (Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4' -Recurse | Get-ItemProperty -Name Version | Where-Object { $_.Version -like '4.5*' }) ) {
|
||||
if ( $PSVersionTable.PSVersion.Major -ge 3 -and (Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4' -Recurse | Get-ItemProperty -Name Version | Where-Object { $_.Version -like '4.5*' -Or $_.Version -ge '4.5' }) ) {
|
||||
Write-Debug 'Attempting unzip using the .NET Framework...'
|
||||
|
||||
try {
|
||||
@ -1910,14 +1927,20 @@ function Invoke-DownloadNuGetPackage {
|
||||
}
|
||||
|
||||
Write-Verbose "Querying '$Source' repository for package with Id '$NuGetPackageId'"
|
||||
$Url = "{1}Packages()?`$filter=tolower(Id)+eq+'{0}'&`$orderby=Id" -f $NuGetPackageId.ToLower(), $Source
|
||||
Write-Debug "NuGet query url: $Url"
|
||||
|
||||
try {
|
||||
$Url = "{1}Packages()?`$filter=tolower(Id)+eq+'{0}'&`$orderby=Id" -f $NuGetPackageId.ToLower(), $Source
|
||||
Write-Debug "Trying NuGet query url: $Url"
|
||||
$XmlDoc = [xml]$WebClient.DownloadString($Url)
|
||||
}
|
||||
catch {
|
||||
throw "Unable to download from NuGet feed: $($_.Exception.InnerException.Message)"
|
||||
try {
|
||||
$Url = "{1}Packages(Id='{0}')?`$orderby=Id" -f $NuGetPackageId, $Source
|
||||
Write-Debug "Trying NuGet query url: $Url"
|
||||
$XmlDoc = [xml]$WebClient.DownloadString($Url)
|
||||
}
|
||||
catch {
|
||||
throw "Unable to download from NuGet feed: $($_.Exception.InnerException.Message)"
|
||||
}
|
||||
}
|
||||
|
||||
if ($PackageVersion) {
|
||||
@ -2110,7 +2133,7 @@ function TabExpansion {
|
||||
Get-PsGetModuleInfo -ModuleName "$lastword*" | % { $_.Id } | sort -Unique
|
||||
}
|
||||
elseif ( Test-Path -Path Function:\$tabExpansionBackup ) {
|
||||
& $teBackup $line $lastWord
|
||||
& $tabExpansionBackup $line $lastWord
|
||||
}
|
||||
}
|
||||
}
|
||||
|
8
vendor/sources.json
vendored
8
vendor/sources.json
vendored
@ -1,8 +1,8 @@
|
||||
[
|
||||
{
|
||||
"name": "git-for-windows",
|
||||
"version": "v2.16.1.windows.4",
|
||||
"url": "https://github.com/git-for-windows/git/releases/download/v2.16.1.windows.4/PortableGit-2.16.1.4-64-bit.7z.exe"
|
||||
"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"
|
||||
},
|
||||
{
|
||||
"name": "clink",
|
||||
@ -11,8 +11,8 @@
|
||||
},
|
||||
{
|
||||
"name": "conemu-maximus5",
|
||||
"version": "180206",
|
||||
"url": "https://github.com/Maximus5/ConEmu/releases/download/v18.02.06/ConEmuPack.180206.7z"
|
||||
"version": "180528",
|
||||
"url": "https://github.com/Maximus5/ConEmu/releases/download/v18.05.28/ConEmuPack.180528.7z"
|
||||
},
|
||||
{
|
||||
"name": "clink-completions",
|
||||
|
Reference in New Issue
Block a user