mirror of
https://github.com/cmderdev/cmder.git
synced 2025-01-10 16:29:08 +08:00
Merge branch 'master' of https://github.com/cmderdev/cmder into history_cmd_index
This commit is contained in:
commit
43d5a7b833
5
.gitattributes
vendored
5
.gitattributes
vendored
@ -1,2 +1,7 @@
|
|||||||
# Auto detect text files and perform LF normalization
|
# Auto detect text files and perform LF normalization
|
||||||
* text=auto
|
* text=auto
|
||||||
|
*.cmd text eol=crlf
|
||||||
|
*.bat text eol=crlf
|
||||||
|
*.ps1 text eol=crlf
|
||||||
|
*.md text eol=lf
|
||||||
|
*.sh text eol=lf
|
||||||
|
109
.github/issue_template.md
vendored
Normal file
109
.github/issue_template.md
vendored
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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 both 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 uses ConEmu as the default
|
||||||
|
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 would like to ask for guides on how to integrate Cmder with
|
||||||
|
your favorite IDE of choice, or how to perform a 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 you have a request to provide auto-complete support for a new tool,
|
||||||
|
please post your request here:
|
||||||
|
|
||||||
|
https://github.com/vladimir-kotikov/clink-completions/issues
|
||||||
|
|
||||||
|
• If you are having an issue with any of the **upstream technologies**
|
||||||
|
that are used by Cmder, please make sure that the issue is reproducible
|
||||||
|
_only_ when used in combination with Cmder.
|
||||||
|
|
||||||
|
We may not directly address the issues related to the following tools:
|
||||||
|
- Clink, the default shell in Cmder
|
||||||
|
- ConEmu, the terminal emulator
|
||||||
|
- Git/MinGW, which also provide *NIX tools
|
||||||
|
- clink-completions, which provide autocompletion
|
||||||
|
|
||||||
|
The issues related to upstream technologies are labeled as 👆 [name].
|
||||||
|
|
||||||
|
We'll try our best to help you -- but we recommend creating an issue
|
||||||
|
specifically at each of the corresponding repositories for the best
|
||||||
|
result.
|
||||||
|
|
||||||
|
► Try to reproduce the bug you're reporting, on a stand-alone edition
|
||||||
|
of each tool, without using 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.
|
||||||
|
|
||||||
|
• Lastly, have a look at official documentation for Cmder over
|
||||||
|
our website, and our wiki.
|
||||||
|
|
||||||
|
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 (correct example: [x] -- not like this: [ x] or [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.
|
||||||
|
- You can find the version of Cmder.exe and ConEmu.exe binaries using Right Click → Properties → Details menu.
|
||||||
|
- ⚠ 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
|
||||||
|
|
||||||
|
### Version Information
|
||||||
|
<!-- Please write your Cmder and ConEmu version here -->
|
||||||
|
|
||||||
|
<!-- If applicable, write down your Windows edition too (e.g. Windows 10 Pro 1809) -->
|
||||||
|
|
||||||
|
### Description of the issue
|
||||||
|
<!-- Provide a clear, simple description of your issue here -->
|
16
.gitignore
vendored
16
.gitignore
vendored
@ -1,18 +1,26 @@
|
|||||||
|
|
||||||
## Those files should be taken from their repositary
|
## Those files should be taken from their repositary
|
||||||
|
|
||||||
|
bin/*
|
||||||
|
!bin/Readme.md
|
||||||
|
|
||||||
vendor/*/*
|
vendor/*/*
|
||||||
|
!vendor/bin/*
|
||||||
|
!vendor/lib/*
|
||||||
!vendor/*
|
!vendor/*
|
||||||
!vendor/psmodules/PsGet
|
!vendor/psmodules/PsGet
|
||||||
|
|
||||||
config/.history
|
config/*
|
||||||
|
!config/Readme.md
|
||||||
|
|
||||||
|
config_user/*
|
||||||
|
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
*.exe
|
*.exe
|
||||||
*.dll
|
*.dll
|
||||||
build/
|
build/
|
||||||
Version v*
|
Version v*
|
||||||
*.bak
|
*.bak
|
||||||
config/user-*
|
|
||||||
config/aliases
|
|
||||||
config/profile.d
|
|
||||||
.github_changelog_generator
|
.github_changelog_generator
|
||||||
|
launcher/.vs
|
||||||
|
launcher/src/version.rc2
|
||||||
|
1013
CHANGELOG.md
Normal file
1013
CHANGELOG.md
Normal file
File diff suppressed because it is too large
Load Diff
@ -11,7 +11,7 @@ If you follow them your contribution will likely be pulled in quicker.
|
|||||||
|
|
||||||
## Making Changes
|
## Making Changes
|
||||||
|
|
||||||
* Make changes in your seperate branch.
|
* Make changes in your separate branch.
|
||||||
* Check for unnecessary whitespace with `git diff --check` before committing.
|
* Check for unnecessary whitespace with `git diff --check` before committing.
|
||||||
* Make sure your commit messages are easy to understand
|
* Make sure your commit messages are easy to understand
|
||||||
* Squash your 'Correcting mistakes' commits if you have a lot of them. (See the 'Squashing Commits' link below)
|
* Squash your 'Correcting mistakes' commits if you have a lot of them. (See the 'Squashing Commits' link below)
|
||||||
@ -35,4 +35,4 @@ If you follow them your contribution will likely be pulled in quicker.
|
|||||||
|
|
||||||
* [Squashing Commits](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html)
|
* [Squashing Commits](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html)
|
||||||
* [General GitHub documentation](http://help.github.com/)
|
* [General GitHub documentation](http://help.github.com/)
|
||||||
* [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
|
* [GitHub pull request documentation](http://help.github.com/articles/creating-a-pull-request/)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
@echo off
|
@echo off
|
||||||
SET CMDER_ROOT=%~dp0
|
SET CMDER_ROOT=%~dp0
|
||||||
|
|
||||||
:: Remove trailing '\'
|
:: Remove Trailing '\'
|
||||||
@if "%CMDER_ROOT:~-1%" == "\" SET CMDER_ROOT=%CMDER_ROOT:~0,-1%
|
@if "%CMDER_ROOT:~-1%" == "\" SET CMDER_ROOT=%CMDER_ROOT:~0,-1%
|
||||||
|
|
||||||
if exist "%~1" (
|
if exist "%~1" (
|
||||||
|
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2017 Samuel Vasko
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
290
README.md
290
README.md
@ -1,6 +1,6 @@
|
|||||||
# Cmder
|
# Cmder
|
||||||
|
|
||||||
[![Join the chat at https://gitter.im/cmderdev/cmder](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/cmderdev/cmder?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://ci.appveyor.com/api/projects/status/32r7s2skrgm9ubva/branch/master?svg=true)](https://ci.appveyor.com/project/MartiUK/cmder)
|
[![Join the chat at https://gitter.im/cmderdev/cmder](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/cmderdev/cmder?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://ci.appveyor.com/api/projects/status/github/cmderdev/cmder?branch=master&svg=true)](https://ci.appveyor.com/project/MartiUK/cmder)
|
||||||
|
|
||||||
Cmder is a **software package** created out of pure frustration over absence of usable console emulator on Windows. It is based on [ConEmu](https://conemu.github.io/) with *major* config overhaul, comes with a Monokai color scheme, amazing [clink](https://github.com/mridgers/clink) (further enhanced by [clink-completions](https://github.com/vladimir-kotikov/clink-completions)) and a custom prompt layout.
|
Cmder is a **software package** created out of pure frustration over absence of usable console emulator on Windows. It is based on [ConEmu](https://conemu.github.io/) with *major* config overhaul, comes with a Monokai color scheme, amazing [clink](https://github.com/mridgers/clink) (further enhanced by [clink-completions](https://github.com/vladimir-kotikov/clink-completions)) and a custom prompt layout.
|
||||||
|
|
||||||
@ -10,14 +10,48 @@ Cmder is a **software package** created out of pure frustration over absence of
|
|||||||
|
|
||||||
The main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies, which makes it great for **USB Sticks** or **cloud storage**. So you can carry your console, aliases and binaries (like wget, curl and git) with you anywhere.
|
The main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies, which makes it great for **USB Sticks** or **cloud storage**. So you can carry your console, aliases and binaries (like wget, curl and git) with you anywhere.
|
||||||
|
|
||||||
|
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
|
## Installation
|
||||||
|
### Single User Portable Config
|
||||||
|
|
||||||
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
|
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
|
||||||
2. Extract the archive
|
2. Extract the archive. *Note: This path should not be `C:\Program Files` or anywhere else that would require Administrator access for modifying configuration files*
|
||||||
3. (optional) Place your own executable files into the `bin` folder to be injected into your PATH
|
3. (optional) Place your own executable files into the `%cmder_root%\bin` folder to be injected into your PATH.
|
||||||
4. Run Cmder.exe
|
4. Run `Cmder.exe`
|
||||||
|
|
||||||
## Integration
|
### Shared Cmder install with Non-Portable Individual User Config
|
||||||
|
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
|
||||||
|
2. Extract the archive to a shared location.
|
||||||
|
3. (optional) Place your own executable files into the `%cmder_root%\bin` folder to be injected into your PATH.
|
||||||
|
4. (optional) Create `%userprofile%\cmder_config\bin` folder to be injected into individual users PATH. Default is to auto create this on first run.
|
||||||
|
5. (optional) Place your own executable files into the `%userprofile%\cmder_config\bin` folder to be injected into your PATH.
|
||||||
|
6. Run `Cmder.exe` with `/C` command line argument. Example: `cmder.exe /C %userprofile%\cmder_config`
|
||||||
|
* This will create the following directory structure if it is missing.
|
||||||
|
|
||||||
|
```
|
||||||
|
c:\users\[username]\cmder_config
|
||||||
|
├───bin
|
||||||
|
└───config
|
||||||
|
└───profile.d
|
||||||
|
```
|
||||||
|
|
||||||
|
* Both the shared install and the individual user config locations can contain a full set of init and profile.d scripts enabling shared config with user overrides. See below.
|
||||||
|
|
||||||
|
## Cmder.exe Command Line Arguments
|
||||||
|
|
||||||
|
|
||||||
|
| Argument | Description |
|
||||||
|
| ------------------- | ----------------------------------------------------------------------- |
|
||||||
|
| `/C [user_root_path]` | Individual user Cmder root folder. Example: `%userprofile%\cmder_config` |
|
||||||
|
| `/M` | Use `conemu-%computername%.xml` for ConEmu settings storage instead of `user_conemu.xml` |
|
||||||
|
| `/REGISTER [ALL, USER]` | Register a Windows Shell Menu shortcut. |
|
||||||
|
| `/UNREGISTER [ALL, USER]` | Un-register a Windows Shell Menu shortcut. |
|
||||||
|
| `/SINGLE` | Start Cmder in single mode. |
|
||||||
|
| `/START [start_path]` | Folder path to start in. |
|
||||||
|
| `/TASK [task_name]` | Task to start after launch. |
|
||||||
|
|
||||||
|
## Context Menu Integration
|
||||||
|
|
||||||
So you've experimented with Cmder a little and want to give it a shot in a more permanent home;
|
So you've experimented with Cmder a little and want to give it a shot in a more permanent home;
|
||||||
|
|
||||||
@ -38,6 +72,9 @@ In a file explorer window right click in or on a directory to see "Cmder Here" i
|
|||||||
* <kbd>Ctrl</kbd> + <kbd>W</kbd> : Close tab
|
* <kbd>Ctrl</kbd> + <kbd>W</kbd> : Close tab
|
||||||
* <kbd>Ctrl</kbd> + <kbd>D</kbd> : Close tab (if pressed on empty command)
|
* <kbd>Ctrl</kbd> + <kbd>D</kbd> : Close tab (if pressed on empty command)
|
||||||
* <kbd>Shift</kbd> + <kbd>Alt</kbd> + <kbd>#Number</kbd> : Fast new tab: <kbd>1</kbd> - CMD, <kbd>2</kbd> - PowerShell
|
* <kbd>Shift</kbd> + <kbd>Alt</kbd> + <kbd>#Number</kbd> : Fast new tab: <kbd>1</kbd> - CMD, <kbd>2</kbd> - PowerShell
|
||||||
|
* <kbd>Ctrl</kbd> + <kbd>Tab</kbd> : Switch to next tab
|
||||||
|
* <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Tab</kbd> : Switch to previous tab
|
||||||
|
* <kbd>Ctrl</kbd> + <kbd>#Number</kbd> : Switch to tab #Number
|
||||||
* <kbd>Alt</kbd> + <kbd>Enter</kbd>: Fullscreen
|
* <kbd>Alt</kbd> + <kbd>Enter</kbd>: Fullscreen
|
||||||
|
|
||||||
### Shell
|
### Shell
|
||||||
@ -47,29 +84,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>Ctrl</kbd> + <kbd>R</kbd> : History search
|
||||||
* <kbd>Shift</kbd> + Mouse : Select and copy text from buffer
|
* <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
|
## Features
|
||||||
|
|
||||||
### Access to multiple shells in one window using tabs
|
### Access to multiple shells in one window using tabs
|
||||||
You can open multiple tabs each containing one of the following shells:
|
You can open multiple tabs each containing one of the following shells:
|
||||||
|
|
||||||
|Task|Shell|Description|
|
| Task | Shell | Description |
|
||||||
|----|-----|-----------|
|
| ---- | ----- | ----------- |
|
||||||
|Cmder|cmd.exe|Windows 'cmd.exe' shell enhanced with Git, Git aware prompt, Clink(GNU Readline), and Aliases.|
|
| 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.|
|
| Cmder as Admin | `cmd.exe` | Administrative Windows `cmd.exe` Cmder shell. |
|
||||||
|PowerShell|powershell.exe|Windows PowerShell enhanced with Git and Git aware prompt .|
|
| PowerShell | `powershell.exe` | Windows PowerShell enhanced with Git and Git aware prompt . |
|
||||||
|PowerShell as Admin|powershell.exe|Administrative Windows 'powerhell.exe' Cmder shell.|
|
| PowerShell as Admin | `powershell.exe` | Administrative Windows `powershell.exe` Cmder shell. |
|
||||||
|Bash|bash.exe|Unix/Linux like bash shell running on Windows.|
|
| 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.|
|
| 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 | `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|
|
| 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.
|
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 edition 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:
|
An example of setting Cmder portable terminal colors for mintty:
|
||||||
|
|
||||||
@ -79,70 +120,131 @@ From a bash/mintty shell:
|
|||||||
cd $CMDER_ROOT/vendor
|
cd $CMDER_ROOT/vendor
|
||||||
git clone https://github.com/karlin/mintty-colors-solarized.git
|
git clone https://github.com/karlin/mintty-colors-solarized.git
|
||||||
cd mintty-colors-solarized/
|
cd mintty-colors-solarized/
|
||||||
echo source \$CMDER_ROOT/vendor/mintty-colors-solarized/mintty-solarized-dark.sh>>$CMDER_ROOT/config/user-profile.sh
|
echo source \$CMDER_ROOT/vendor/mintty-colors-solarized/mintty-solarized-dark.sh>>$CMDER_ROOT/config/user_profile.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### Cmder Portable Shell User Config
|
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).
|
||||||
User specific configuration is possible using the cmder specific shell config files. Edit the below files to add your own configuration:
|
|
||||||
|
|
||||||
|Shell|Cmder Portable User Config|
|
### Changing Cmder Default `cmd.exe` Shell Startup Behaviour Using Task Arguments
|
||||||
| ------------- |:-------------:|
|
|
||||||
|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 it it exists after it sources '$CMDER_ROOT/config/user-profile.sh'.
|
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 arguments where specified below:
|
||||||
|
|
||||||
### Linux like 'profile.d' support for all supported shell types.
|
*Note: Pay attention to the quotes!*
|
||||||
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|
|
```
|
||||||
| ------------- |:-------------:|
|
cmd /s /k ""%ConEmuDir%\..\init.bat" [ADD ARGS HERE]"
|
||||||
|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|
|
|
||||||
|
|
||||||
|
##### 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 |
|
||||||
|
| `/f` | Enables Cmder Fast Init Mode. This disables some features, see pull request [#1492](https://github.com/cmderdev/cmder/pull/1942) for more details. | not set |
|
||||||
|
| `/git_install_root [file path]` | User specified Git installation root path. | `%CMDER_ROOT%\vendor\Git-for-Windows` |
|
||||||
|
| `/home [home folder]` | User specified folder path to set `%HOME%` environment variable. | `%userprofile%` |
|
||||||
|
| `/max_depth [1-5]` | Define max recurse depth when adding to the path for `%cmder_root%\bin` and `%cmder_user_bin%` | 1 |
|
||||||
|
| `/nix_tools [0-2]` | Define how `*nix` tools are added to the path. Prefer Windows Tools: 1, Prefer *nix Tools: 2, No `/usr/bin` in `%PATH%`: 0 | 1 |
|
||||||
|
| `/svn_ssh [path to ssh.exe]` | Define `%SVN_SSH%` so we can use git svn with ssh svn repositories. | `%GIT_INSTALL_ROOT%\bin\ssh.exe` |
|
||||||
|
| `/user_aliases [file path]` | File path pointing to user aliases. | `%CMDER_ROOT%\config\user-aliases.cmd` |
|
||||||
|
| `/v` | Enables verbose output. | not set |
|
||||||
|
| (custom arguments) | User defined arguments processed by `cexec`. Type `cexec /?` for more useage. | not set |
|
||||||
|
|
||||||
|
### Cmder Shell User Config
|
||||||
|
Single user portable configuration is possible using the cmder specific shell config files. Edit the below files to add your own configuration:
|
||||||
|
|
||||||
|
| Shell | Cmder Portable User Config |
|
||||||
|
| ------------- | ----------------------------------------- |
|
||||||
|
| Cmder | `%CMDER_ROOT%\config\user_profile.cmd` |
|
||||||
|
| PowerShell | `$ENV:CMDER_ROOT\config\user_profile.ps1` |
|
||||||
|
| Bash/Mintty | `$CMDER_ROOT/config/user_profile.sh` |
|
||||||
|
|
||||||
|
Note: Bash and Mintty sessions will also source the `$HOME/.bashrc` file if it exists after it sources `$CMDER_ROOT/config/user_profile.sh`.
|
||||||
|
|
||||||
|
You can write `*.cmd|*.bat`, `*.ps1`, and `*.sh` scripts and just drop them in the `%CMDER_ROOT%\config\profile.d` folder to add startup config to Cmder.
|
||||||
|
|
||||||
|
| 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
|
### Aliases
|
||||||
#### Cmder(Cmd.exe) Aliases
|
#### Cmder(`Cmd.exe`) Aliases
|
||||||
You can define simple aliases for `cmd.exe` sessions with a command like `alias name=command`. Cmd.exe aliases support optional parameters through the `$1-9` or the `$*` special characters so the alias `vi=vim.exe $*` typed as `vi [filename]` will open `[filename]` in `vim.exe`.
|
You can define simple aliases for `cmd.exe` sessions with a command like `alias name=command`. Cmd.exe aliases support optional parameters through the `$1-9` or the `$*` special characters so the alias `vi=vim.exe $*` typed as `vi [filename]` will open `[filename]` in `vim.exe`.
|
||||||
|
|
||||||
Cmd.exe aliases can also be more complex. See: [DOSKEY.EXE documentation](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/doskey.mspx?mfr=true) for additional details on complex aliases/macros for 'cmd.exe'
|
Cmd.exe aliases can also be more complex. See: [DOSKEY.EXE documentation](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/doskey.mspx?mfr=true) for additional details on complex aliases/macros for `cmd.exe`
|
||||||
|
|
||||||
Aliases defined using the `alias.bat` command will automatically be saved in the `%CMDER_ROOT%\config\aliases` file
|
Aliases defined using the `alias.bat` command will automatically be saved in the `%CMDER_ROOT%\config\user-aliases.cmd` file
|
||||||
|
|
||||||
|
To make an alias and/or any other profile settings permanent add it to one of the following:
|
||||||
|
|
||||||
|
Note: These are loaded in this order by `$CMDER_ROOT/vendor/init.bat`. Anything stored in `%CMDER_ROOT%` will be a portable setting and will follow cmder to another machine.
|
||||||
|
|
||||||
|
* `%CMDER_ROOT%\config\profile.d\*.cmd` and `\*.bat`
|
||||||
|
* `%CMDER_ROOT%\config\user-aliases.cmd`
|
||||||
|
* `%CMDER_ROOT%\config\user_profile.cmd`
|
||||||
|
|
||||||
#### Bash.exe|Mintty.exe Aliases
|
#### Bash.exe|Mintty.exe Aliases
|
||||||
Bash shells support simple and complex aliases with optional parameters natively so they work a little different. Typing `alias name=command` will create an alias only for the current running session. To make an alias permanent add it to either your `$CMDER_ROOT/config/user-profile.sh` or your `$HOME/.bashrc`.
|
Bash shells support simple and complex aliases with optional parameters natively so they work a little different. Typing `alias name=command` will create an alias only for the current running session.
|
||||||
|
|
||||||
If you add bash aliases to `$CMDER_ROOT/config/user-profile.sh` they will portable and follow your Cmder folder if you copy it to another machine. `$HOME/.bashrc` defined aliases are not portable.
|
To make an alias and/or any other profile settings permanent add it to one of the following:
|
||||||
|
|
||||||
|
Note: These are loaded in this order by `$CMDER_ROOT/vendor/git-for-windows/etc/profile.d/cmder.sh`. Anything stored in `$CMDER_ROOT` will be a portable setting and will follow cmder to another machine.
|
||||||
|
|
||||||
|
* `$CMDER_ROOT/config/profile.d/*.sh`
|
||||||
|
* `$CMDER_ROOT/config/user_profile.sh`
|
||||||
|
* `$HOME/.bashrc`
|
||||||
|
|
||||||
|
If you add bash aliases to `$CMDER_ROOT/config/user_profile.sh` they will be portable and follow your Cmder folder if you copy it to another machine. `$HOME/.bashrc` defined aliases are not portable.
|
||||||
|
|
||||||
#### PowerShell.exe Aliases
|
#### PowerShell.exe Aliases
|
||||||
PowerShell has native simple alias support, for example `[new-alias | set-alias] alias command`, so complex aliases with optional parameters are not supported in PowerShell sessions. Type `get-help [new-alias|set-alias] -full` for help on PowerShell aliases.
|
PowerShell has native simple alias support, for example `[new-alias | set-alias] alias command`, so complex aliases with optional parameters are not supported in PowerShell sessions. Type `get-help [new-alias|set-alias] -full` for help on PowerShell aliases.
|
||||||
|
|
||||||
|
To make an alias and/or any other profile settings permanent add it to one of the following:
|
||||||
|
|
||||||
|
Note: These are loaded in this order by `$ENV:CMDER_ROOT\vendor\user_profile.ps1`. Anything stored in `$ENV:CMDER_ROOT` will be a portable setting and will follow cmder to another machine.
|
||||||
|
|
||||||
|
* `$ENV:CMDER_ROOT\config\profile.d\*.ps1`
|
||||||
|
* `$ENV:CMDER_ROOT\config\user_profile.ps1`
|
||||||
|
|
||||||
### SSH Agent
|
### SSH Agent
|
||||||
|
|
||||||
To start SSH agent simply call `start-ssh-agent`, which is in the `vendor/git-for-windows/cmd` folder.
|
To start the vendored SSH agent simply call `start-ssh-agent`, which is in the `vendor/git-for-windows/cmd` folder.
|
||||||
|
|
||||||
If you want to run SSH agent on startup, include the line `@call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd"` in `%CMDER_ROOT%/config/user-profile.cmd` (usually just uncomment it).
|
If you want to run SSH agent on startup, include the line `@call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd"` in `%CMDER_ROOT%/config/user_profile.cmd` (usually just uncomment it).
|
||||||
|
|
||||||
### Using external Cygwin/Babun, MSys2, or Git for Windows SDK with Cmder.
|
### Vendored Git
|
||||||
|
|
||||||
1. Setup a new task by pressing '<kbd>Win</kbd> +<kbd>Alt</kbd> + <kbd>T</kbd>'.
|
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.
|
||||||
1. Click the '+' button to add a task.
|
|
||||||
|
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.
|
||||||
1. Name the new task in the top text box.
|
1. Name the new task in the top text box.
|
||||||
1. Provide task parameters, this is optional.
|
1. Provide task parameters, this is optional.
|
||||||
1. Add ```cmd /c "[path_to_external_env]\bin\bash --login -i" -new_console:d:%USERPROFILE%``` to the `Commands` text box.
|
1. Add `cmd /c "[path_to_external_env]\bin\bash --login -i" -new_console` to the `Commands` text box.
|
||||||
|
|
||||||
Recommended Optional Steps:
|
**Recommended Optional Steps:**
|
||||||
|
|
||||||
Copy the 'vendor/cmder_exinit' file to the Cygwin/Babun, MSys2, or Git for Windows SDK environments ```/etc/profile.d/``` folder to use portable settings in the $CMDER_ROOT/config folder.
|
Copy the `vendor/cmder_exinit` file to the Cygwin/Babun, MSys2, or Git for Windows SDK environments `/etc/profile.d/` folder to use portable settings in the `$CMDER_ROOT/config` folder.
|
||||||
|
|
||||||
Note: MinGW could work if the init scripts include profile.d but this has not been tested.
|
Note: MinGW could work if the init scripts include `profile.d` but this has not been tested.
|
||||||
|
|
||||||
The destination file extension depends on the shell you use in that environment. For example:
|
The destination file extension depends on the shell you use in that environment. For example:
|
||||||
|
|
||||||
* bash - Copy to /etc/profile.d/cmder_exinit.sh
|
* bash - Copy to `/etc/profile.d/cmder_exinit.sh`
|
||||||
* zsh - Copy to /etc/profile.d/cmder_exinit.zsh
|
* zsh - Copy to `/etc/profile.d/cmder_exinit.zsh`
|
||||||
|
|
||||||
Uncomment and edit the below line in the script to use Cmder config even when launched from outside Cmder.
|
Uncomment and edit the below line in the script to use Cmder config even when launched from outside Cmder.
|
||||||
|
|
||||||
@ -150,11 +252,95 @@ Uncomment and edit the below line in the script to use Cmder config even when la
|
|||||||
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
||||||
```
|
```
|
||||||
|
|
||||||
## Current development branch
|
### Customizing user sessions using `init.bat` custom arguments.
|
||||||
|
|
||||||
|
You can pass custom arguments to `init.bat` and use `cexec.cmd` in your `user_profile.cmd` to evaluate these
|
||||||
|
arguments then execute commands based on a particular flag being detected or not.
|
||||||
|
|
||||||
|
`init.bat` creates two shortcuts for using `cexec.cmd` in your profile scripts.
|
||||||
|
|
||||||
|
#### `%ccall%` - Evaluates flags, runs commands if found, and returns to the calling script and continues.
|
||||||
|
|
||||||
|
```
|
||||||
|
ccall=call C:\Users\user\cmderdev\vendor\bin\cexec.cmd
|
||||||
|
```
|
||||||
|
|
||||||
|
Example: `%ccall% /startnotepad start notepad.exe`
|
||||||
|
|
||||||
|
#### `%cexec%` - Evaluates flags, runs commands if found, and does not return to the calling script.
|
||||||
|
|
||||||
|
```
|
||||||
|
cexec=C:\Users\user\cmderdev\vendor\bin\cexec.cmd
|
||||||
|
```
|
||||||
|
|
||||||
|
Example: `%cexec% /startnotepad start notepad.exe`
|
||||||
|
|
||||||
|
It is useful when you have multiple tasks to execute `cmder` and need it to initialize
|
||||||
|
the session differently depending on the task chosen.
|
||||||
|
|
||||||
|
To conditionally start `notepad.exe` when you start a specific `cmder` task:
|
||||||
|
|
||||||
|
* Press <kbd>win</kbd>+<kbd>alt</kbd>+<kbd>t</kbd>
|
||||||
|
* Click `+` to add a new task.
|
||||||
|
* Add the below to the `Commands` block:
|
||||||
|
|
||||||
|
```batch
|
||||||
|
|
||||||
|
cmd.exe /k ""%ConEmuDir%\..\init.bat" /startnotepad"
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
* Add the below to your `%cmder_root%\config\user_profile.cmd`
|
||||||
|
|
||||||
|
```batch
|
||||||
|
|
||||||
|
%ccall% "/startNotepad" "start" "notepad.exe"`
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
To see detailed usage of `cexec`, type `cexec /?` in cmder.
|
||||||
|
|
||||||
|
### Integrating Cmder with [Hyper](https://github.com/zeit/hyper), [Microsoft VS Code](https://code.visualstudio.com/), and your favorite IDEs
|
||||||
|
|
||||||
|
Cmder by default comes with a vendored ConEmu installation as the underlying terminal emulator, as stated [here](https://conemu.github.io/en/cmder.html).
|
||||||
|
|
||||||
|
However, Cmder can in fact run in a variety of other terminal emulators, and even integrated IDEs. Assuming you have the latest version of Cmder, follow the following instructions to get Cmder working with your own terminal emulator.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
If you have a `[cmder_root]/config/user[-|_]conemu.xml`, you are running a newer version of Cmder, follow the below process:
|
||||||
|
|
||||||
|
1. Exit all Cmder sessions and relaunch `[cmder_root]/cmder.exe`, this backs up your existing `[cmder_root]/vendor/conemu-maximus5/conemu.xml` to `[cmder_root]/config/user[-|_]conemu.xml`.
|
||||||
|
|
||||||
|
* The `[cmder_root]/config/user[-|_]conemu.xml` contains any custom settings you have made using the 'Setup Tasks' settings dialog.
|
||||||
|
|
||||||
|
2. Exit all Cmder sessions and backup any files you have manually edited under `[cmder_root]/vendor`.
|
||||||
|
|
||||||
|
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in `[cmder_root]/config` folder.
|
||||||
|
|
||||||
|
3. Delete the `[cmder_root]/vendor` folder.
|
||||||
|
4. Extract the new `cmder.zip` or `cmder_mini.zip` into `[cmder_root]/` overwriting all files when prompted.
|
||||||
|
|
||||||
|
If you do not have a `[cmder_root]/config/user[-|_]conemu.xml`, you are running an older version of cmder, follow the below process:
|
||||||
|
|
||||||
|
1. Exit all Cmder sessions and backup `[cmder_root]/vendor/conemu-maximus5/conemu.xml` to `[cmder_root]/config/user[-|_]conemu.xml`.
|
||||||
|
|
||||||
|
2. Backup any files you have manually edited under `[cmder_root]/vendor`.
|
||||||
|
|
||||||
|
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in `[cmder_root]/config` folder.
|
||||||
|
|
||||||
|
3. Delete the `[cmder_root]/vendor` folder.
|
||||||
|
4. Extract the new `cmder.zip` or `cmder_mini.zip` into `[cmder_root]/` overwriting all files when prompted.
|
||||||
|
|
||||||
|
## Current development builds
|
||||||
|
|
||||||
You can download builds of the current development branch by going to AppVeyor via the following link:
|
You can download builds of the current development branch by going to AppVeyor via the following link:
|
||||||
|
|
||||||
[![AppVeyor](https://ci.appveyor.com/api/projects/status/github/cmderdev/cmder?svg=True)](https://ci.appveyor.com/project/MartiUK/cmder/branch/development/artifacts)
|
[![AppVeyor](https://ci.appveyor.com/api/projects/status/github/cmderdev/cmder?svg=True)](https://ci.appveyor.com/project/MartiUK/cmder/branch/master/artifacts)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ branches:
|
|||||||
#---------------------------------#
|
#---------------------------------#
|
||||||
|
|
||||||
# Operating system (build VM template)
|
# Operating system (build VM template)
|
||||||
os: Windows Server 2012 R2
|
os: Visual Studio 2017
|
||||||
|
|
||||||
#---------------------------------#
|
#---------------------------------#
|
||||||
# build configuration #
|
# build configuration #
|
||||||
@ -44,6 +44,9 @@ artifacts:
|
|||||||
- path: build\cmder_mini.zip
|
- path: build\cmder_mini.zip
|
||||||
name: cmdermini
|
name: cmdermini
|
||||||
|
|
||||||
|
- path: build\hashes.txt
|
||||||
|
name: hashes
|
||||||
|
|
||||||
#---------------------------------#
|
#---------------------------------#
|
||||||
# notifications #
|
# notifications #
|
||||||
#---------------------------------#
|
#---------------------------------#
|
||||||
|
@ -3,12 +3,13 @@
|
|||||||
All config files must be in this folder. If there is no option to set this folder
|
All config files must be in this folder. If there is no option to set this folder
|
||||||
directly, it has to be hardlinked.
|
directly, it has to be hardlinked.
|
||||||
|
|
||||||
* `aliases`: aliases in cmd; called form vendor\init.bat; autocreated from
|
* `user-aliases.cmd`: aliases in cmd; called from vendor\init.bat; autocreated from
|
||||||
`vendor\aliases.example`.
|
`vendor\user-aliases.cmd.default`.
|
||||||
* `*.lua`: clink completitions and prompt filters; called from vendor\cmder.lua after all
|
* `*.lua`: clink completions and prompt filters; autoloaded after all
|
||||||
other prompt filter and clink completitons are initialized; add your own.
|
prompt filter and clink completions are initialized; add your own.
|
||||||
* `user_profile.{sh|bat|ps1}`: startup files for bash|cmd|powershell tasks; called from their
|
* `user-profile.{sh|cmd|ps1}`: startup files for bash|cmd|powershell tasks; called from their
|
||||||
respective startup scripts in `vendor\`; autocreated on first start of such a task
|
respective startup scripts in `vendor\`; autocreated from
|
||||||
* `.history`: the current commandline history; autoupdated on close
|
`vendor\user-profile.{sh|cmd|ps1}.default` on first start of such a task.
|
||||||
* `settings`: settings for readline; overwritten on update
|
* `.history`: the current commandline history; autoupdated on close.
|
||||||
* `ConEmu.xml`: settings from ConEmu (=the UI of cmder -> Preferences); overwritten on update
|
* `settings`: settings for readline; overwritten on update.
|
||||||
|
* `ConEmu.xml`: settings from ConEmu (=the UI of cmder -> Preferences); overwritten on update.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
@ -14,20 +14,21 @@
|
|||||||
<ProjectGuid>{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}</ProjectGuid>
|
<ProjectGuid>{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}</ProjectGuid>
|
||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
<RootNamespace>CmderLauncher</RootNamespace>
|
<RootNamespace>CmderLauncher</RootNamespace>
|
||||||
|
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v140_xp</PlatformToolset>
|
<PlatformToolset>v141_xp</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v140_xp</PlatformToolset>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
<ImportGroup Label="ExtensionSettings">
|
<ImportGroup Label="ExtensionSettings">
|
||||||
@ -60,6 +61,12 @@
|
|||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
</Link>
|
</Link>
|
||||||
|
<Manifest>
|
||||||
|
<AdditionalManifestFiles>src/app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
|
||||||
|
</Manifest>
|
||||||
|
<ResourceCompile>
|
||||||
|
<PreprocessorDefinitions>_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
@ -80,6 +87,9 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
</Link>
|
</Link>
|
||||||
|
<Manifest>
|
||||||
|
<AdditionalManifestFiles>src/app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
|
||||||
|
</Manifest>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>copy $(TargetPath) $(SolutionDir)..\$(TargetFileName)</Command>
|
<Command>copy $(TargetPath) $(SolutionDir)..\$(TargetFileName)</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
@ -98,4 +108,4 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -3,9 +3,13 @@
|
|||||||
#include <Shlwapi.h>
|
#include <Shlwapi.h>
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <shlobj.h>
|
||||||
|
|
||||||
|
#include <regex>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#pragma comment(lib, "Shlwapi.lib")
|
#pragma comment(lib, "Shlwapi.lib")
|
||||||
|
#pragma warning( disable : 4091 )
|
||||||
|
|
||||||
#ifndef UNICODE
|
#ifndef UNICODE
|
||||||
#error "Must be compiled with unicode support."
|
#error "Must be compiled with unicode support."
|
||||||
@ -13,8 +17,6 @@
|
|||||||
|
|
||||||
#define USE_TASKBAR_API (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
|
#define USE_TASKBAR_API (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
|
||||||
|
|
||||||
#define XP (_WIN32_WINNT < _WIN32_WINNT_VISTA)
|
|
||||||
|
|
||||||
#define MB_TITLE L"Cmder Launcher"
|
#define MB_TITLE L"Cmder Launcher"
|
||||||
#define SHELL_MENU_REGISTRY_PATH_BACKGROUND L"Directory\\Background\\shell\\Cmder"
|
#define SHELL_MENU_REGISTRY_PATH_BACKGROUND L"Directory\\Background\\shell\\Cmder"
|
||||||
#define SHELL_MENU_REGISTRY_PATH_LISTITEM L"Directory\\shell\\Cmder"
|
#define SHELL_MENU_REGISTRY_PATH_LISTITEM L"Directory\\shell\\Cmder"
|
||||||
@ -31,7 +33,7 @@ void ShowErrorAndExit(DWORD ec, const wchar_t * func, int line)
|
|||||||
{
|
{
|
||||||
wchar_t * buffer;
|
wchar_t * buffer;
|
||||||
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
NULL, ec, 0, (LPWSTR) &buffer, 0, NULL) == 0)
|
NULL, ec, 0, (LPWSTR)&buffer, 0, NULL) == 0)
|
||||||
{
|
{
|
||||||
buffer = L"Unknown error. FormatMessage failed.";
|
buffer = L"Unknown error. FormatMessage failed.";
|
||||||
}
|
}
|
||||||
@ -54,34 +56,6 @@ typedef struct _option
|
|||||||
|
|
||||||
typedef std::pair<std::wstring, std::wstring> optpair;
|
typedef std::pair<std::wstring, std::wstring> optpair;
|
||||||
|
|
||||||
|
|
||||||
optpair GetOption()
|
|
||||||
{
|
|
||||||
wchar_t * cmd = GetCommandLine();
|
|
||||||
int argc;
|
|
||||||
wchar_t ** argv = CommandLineToArgvW(cmd, &argc);
|
|
||||||
optpair pair;
|
|
||||||
|
|
||||||
if (argc == 1)
|
|
||||||
{
|
|
||||||
// no commandline argument...
|
|
||||||
pair = optpair(L"/START", L"");
|
|
||||||
}
|
|
||||||
else if (argc == 2 && argv[1][0] != L'/')
|
|
||||||
{
|
|
||||||
// only a single argument: this should be a path...
|
|
||||||
pair = optpair(L"/START", argv[1]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pair = optpair(argv[1], argc > 2 ? argv[2] : L"");
|
|
||||||
}
|
|
||||||
|
|
||||||
LocalFree(argv);
|
|
||||||
|
|
||||||
return pair;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool FileExists(const wchar_t * filePath)
|
bool FileExists(const wchar_t * filePath)
|
||||||
{
|
{
|
||||||
HANDLE hFile = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
|
HANDLE hFile = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
|
||||||
@ -95,7 +69,7 @@ bool FileExists(const wchar_t * filePath)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartCmder(std::wstring path, bool is_single_mode)
|
void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstring taskName = L"", std::wstring cfgRoot = L"", bool use_user_cfg = true)
|
||||||
{
|
{
|
||||||
#if USE_TASKBAR_API
|
#if USE_TASKBAR_API
|
||||||
wchar_t appId[MAX_PATH] = { 0 };
|
wchar_t appId[MAX_PATH] = { 0 };
|
||||||
@ -103,9 +77,28 @@ void StartCmder(std::wstring path, bool is_single_mode)
|
|||||||
wchar_t exeDir[MAX_PATH] = { 0 };
|
wchar_t exeDir[MAX_PATH] = { 0 };
|
||||||
wchar_t icoPath[MAX_PATH] = { 0 };
|
wchar_t icoPath[MAX_PATH] = { 0 };
|
||||||
wchar_t cfgPath[MAX_PATH] = { 0 };
|
wchar_t cfgPath[MAX_PATH] = { 0 };
|
||||||
wchar_t oldCfgPath[MAX_PATH] = { 0 };
|
wchar_t backupCfgPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t cpuCfgPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t userCfgPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t defaultCfgPath[MAX_PATH] = { 0 };
|
||||||
wchar_t conEmuPath[MAX_PATH] = { 0 };
|
wchar_t conEmuPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t configDirPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t userConfigDirPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t userBinDirPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t userProfiledDirPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t userProfilePath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t legacyUserProfilePath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t userAliasesPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t legacyUserAliasesPath[MAX_PATH] = { 0 };
|
||||||
wchar_t args[MAX_PATH * 2 + 256] = { 0 };
|
wchar_t args[MAX_PATH * 2 + 256] = { 0 };
|
||||||
|
wchar_t userConEmuCfgPath[MAX_PATH] = { 0 };
|
||||||
|
|
||||||
|
|
||||||
|
std::wstring cmderStart = path;
|
||||||
|
std::wstring cmderTask = taskName;
|
||||||
|
|
||||||
|
std::copy(cfgRoot.begin(), cfgRoot.end(), userConfigDirPath);
|
||||||
|
userConfigDirPath[cfgRoot.length()] = 0;
|
||||||
|
|
||||||
GetModuleFileName(NULL, exeDir, sizeof(exeDir));
|
GetModuleFileName(NULL, exeDir, sizeof(exeDir));
|
||||||
|
|
||||||
@ -117,73 +110,309 @@ void StartCmder(std::wstring path, bool is_single_mode)
|
|||||||
|
|
||||||
PathCombine(icoPath, exeDir, L"icons\\cmder.ico");
|
PathCombine(icoPath, exeDir, L"icons\\cmder.ico");
|
||||||
|
|
||||||
// Check for machine-specific config file.
|
PathCombine(configDirPath, exeDir, L"config");
|
||||||
PathCombine(oldCfgPath, exeDir, L"config\\ConEmu-%COMPUTERNAME%.xml");
|
|
||||||
ExpandEnvironmentStrings(oldCfgPath, oldCfgPath, sizeof(oldCfgPath) / sizeof(oldCfgPath[0]));
|
/*
|
||||||
if (!PathFileExists(oldCfgPath)) {
|
Convert legacy user-profile.cmd to new name user_profile.cmd
|
||||||
PathCombine(oldCfgPath, exeDir, L"config\\ConEmu.xml");
|
*/
|
||||||
|
PathCombine(legacyUserProfilePath, configDirPath, L"user-profile.cmd");
|
||||||
|
if (PathFileExists(legacyUserProfilePath))
|
||||||
|
{
|
||||||
|
PathCombine(userProfilePath, configDirPath, L"user_profile.cmd");
|
||||||
|
|
||||||
|
char *lPr = (char *)malloc(MAX_PATH);
|
||||||
|
char *pR = (char *)malloc(MAX_PATH);
|
||||||
|
size_t i;
|
||||||
|
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
|
||||||
|
legacyUserProfilePath, (size_t)MAX_PATH);
|
||||||
|
wcstombs_s(&i, pR, (size_t)MAX_PATH,
|
||||||
|
userProfilePath, (size_t)MAX_PATH);
|
||||||
|
rename(lPr, pR);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for machine-specific config file.
|
/*
|
||||||
PathCombine(cfgPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu-%COMPUTERNAME%.xml");
|
Convert legacy user-aliases.cmd to new name user_aliases.cmd
|
||||||
ExpandEnvironmentStrings(cfgPath, cfgPath, sizeof(cfgPath) / sizeof(cfgPath[0]));
|
*/
|
||||||
if (!PathFileExists(cfgPath)) {
|
PathCombine(legacyUserAliasesPath, configDirPath, L"user-aliases.cmd");
|
||||||
PathCombine(cfgPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.xml");
|
if (PathFileExists(legacyUserAliasesPath))
|
||||||
|
{
|
||||||
|
PathCombine(userAliasesPath, configDirPath, L"user_aliases.cmd");
|
||||||
|
|
||||||
|
char *lPr = (char *)malloc(MAX_PATH);
|
||||||
|
char *pR = (char *)malloc(MAX_PATH);
|
||||||
|
size_t i;
|
||||||
|
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
|
||||||
|
legacyUserAliasesPath, (size_t)MAX_PATH);
|
||||||
|
wcstombs_s(&i, pR, (size_t)MAX_PATH,
|
||||||
|
userAliasesPath, (size_t)MAX_PATH);
|
||||||
|
rename(lPr, pR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Was /c [path] specified?
|
||||||
|
*/
|
||||||
|
if (wcscmp(userConfigDirPath, L"") == 0)
|
||||||
|
{
|
||||||
|
// No - It wasn't.
|
||||||
|
PathCombine(userConfigDirPath, exeDir, L"config");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Yes - It was.
|
||||||
|
PathCombine(userBinDirPath, userConfigDirPath, L"bin");
|
||||||
|
SHCreateDirectoryEx(0, userBinDirPath, 0);
|
||||||
|
|
||||||
|
PathCombine(userConfigDirPath, userConfigDirPath, L"config");
|
||||||
|
SHCreateDirectoryEx(0, userConfigDirPath, 0);
|
||||||
|
|
||||||
|
PathCombine(userProfiledDirPath, userConfigDirPath, L"profile.d");
|
||||||
|
SHCreateDirectoryEx(0, userProfiledDirPath, 0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Convert legacy user-profile.cmd to new name user_profile.cmd
|
||||||
|
*/
|
||||||
|
PathCombine(legacyUserProfilePath, userConfigDirPath, L"user-profile.cmd");
|
||||||
|
if (PathFileExists(legacyUserProfilePath))
|
||||||
|
{
|
||||||
|
PathCombine(userProfilePath, userConfigDirPath, L"user_profile.cmd");
|
||||||
|
|
||||||
|
char *lPr = (char *)malloc(MAX_PATH);
|
||||||
|
char *pR = (char *)malloc(MAX_PATH);
|
||||||
|
size_t i;
|
||||||
|
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
|
||||||
|
legacyUserProfilePath, (size_t)MAX_PATH);
|
||||||
|
wcstombs_s(&i, pR, (size_t)MAX_PATH,
|
||||||
|
userProfilePath, (size_t)MAX_PATH);
|
||||||
|
rename(lPr, pR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Convert legacy user-aliases.cmd to new name user_aliases.cmd
|
||||||
|
*/
|
||||||
|
PathCombine(legacyUserAliasesPath, userConfigDirPath, L"user-aliases.cmd");
|
||||||
|
if (PathFileExists(legacyUserAliasesPath))
|
||||||
|
{
|
||||||
|
PathCombine(userAliasesPath, userConfigDirPath, L"user_aliases.cmd");
|
||||||
|
|
||||||
|
char *lPr = (char *)malloc(MAX_PATH);
|
||||||
|
char *pR = (char *)malloc(MAX_PATH);
|
||||||
|
size_t i;
|
||||||
|
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
|
||||||
|
legacyUserAliasesPath, (size_t)MAX_PATH);
|
||||||
|
wcstombs_s(&i, pR, (size_t)MAX_PATH,
|
||||||
|
userAliasesPath, (size_t)MAX_PATH);
|
||||||
|
rename(lPr, pR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set path to vendored ConEmu config file
|
||||||
|
PathCombine(cfgPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.xml");
|
||||||
|
|
||||||
|
// Set path to Cmder default ConEmu config file
|
||||||
|
PathCombine(defaultCfgPath, exeDir, L"vendor\\ConEmu.xml.default");
|
||||||
|
|
||||||
|
// Check for machine-specific then user config source file.
|
||||||
|
PathCombine(cpuCfgPath, userConfigDirPath, L"ConEmu-%COMPUTERNAME%.xml");
|
||||||
|
ExpandEnvironmentStrings(cpuCfgPath, cpuCfgPath, sizeof(cpuCfgPath) / sizeof(cpuCfgPath[0]));
|
||||||
|
|
||||||
|
// Set path to Cmder user ConEmu config file
|
||||||
|
PathCombine(userCfgPath, userConfigDirPath, L"user-ConEmu.xml");
|
||||||
|
|
||||||
|
if ( PathFileExists(cpuCfgPath) || use_user_cfg == false ) // config/ConEmu-%COMPUTERNAME%.xml file exists or /m was specified on command line, use machine specific config.
|
||||||
|
{
|
||||||
|
if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
|
||||||
|
{
|
||||||
|
if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml file exists, copy vendor/conemu-maximus5/ConEmu.xml to config/ConEmu-%COMPUTERNAME%.xml.
|
||||||
|
{
|
||||||
|
if (!CopyFile(cfgPath, cpuCfgPath, FALSE))
|
||||||
|
{
|
||||||
|
MessageBox(NULL,
|
||||||
|
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||||
|
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml! Access Denied."
|
||||||
|
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml!", MB_TITLE, MB_ICONSTOP);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // vendor/conemu-maximus5/ConEmu.xml config file does not exist, copy config/ConEmu-%COMPUTERNAME%.xml to vendor/conemu-maximus5/ConEmu.xml file
|
||||||
|
{
|
||||||
|
if (!CopyFile(cpuCfgPath, cfgPath, FALSE))
|
||||||
|
{
|
||||||
|
MessageBox(NULL,
|
||||||
|
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||||
|
? L"Failed to copy conig/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
|
||||||
|
: L"Failed to copy config/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // '/c [path]' was specified, don't copy anything and use existing conemu-%COMPUTERNAME%.xml to start comemu.
|
||||||
|
{
|
||||||
|
if (use_user_cfg == false && PathFileExists(cfgPath) && !PathFileExists(cpuCfgPath)) // vendor/conemu-maximus5/ConEmu.xml file exists, copy vendor/conemu-maximus5/ConEmu.xml to config/ConEmu-%COMPUTERNAME%.xml.
|
||||||
|
{
|
||||||
|
if (!CopyFile(cfgPath, cpuCfgPath, FALSE))
|
||||||
|
{
|
||||||
|
MessageBox(NULL,
|
||||||
|
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||||
|
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml! Access Denied."
|
||||||
|
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml!", MB_TITLE, MB_ICONSTOP);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PathCombine(userConEmuCfgPath, userConfigDirPath, L"ConEmu-%COMPUTERNAME%.xml");
|
||||||
|
ExpandEnvironmentStrings(userConEmuCfgPath, userConEmuCfgPath, sizeof(userConEmuCfgPath) / sizeof(userConEmuCfgPath[0]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (PathFileExists(userCfgPath)) // config/user_conemu.xml exists, use it.
|
||||||
|
{
|
||||||
|
if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
|
||||||
|
{
|
||||||
|
if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml.
|
||||||
|
{
|
||||||
|
if (!CopyFile(cfgPath, userCfgPath, FALSE))
|
||||||
|
{
|
||||||
|
MessageBox(NULL,
|
||||||
|
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||||
|
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied."
|
||||||
|
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // vendor/conemu-maximus5/ConEmu.xml does not exist, copy config/user-conemu.xml to vendor/conemu-maximus5/ConEmu.xml
|
||||||
|
{
|
||||||
|
if (!CopyFile(userCfgPath, cfgPath, FALSE))
|
||||||
|
{
|
||||||
|
MessageBox(NULL,
|
||||||
|
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||||
|
? L"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
|
||||||
|
: L"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // '/c [path]' was specified, don't copy anything and use existing user_conemu.xml to start comemu.
|
||||||
|
{
|
||||||
|
PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
|
||||||
|
{
|
||||||
|
if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml
|
||||||
|
{
|
||||||
|
if (!CopyFile(cfgPath, userCfgPath, FALSE))
|
||||||
|
{
|
||||||
|
MessageBox(NULL,
|
||||||
|
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||||
|
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied."
|
||||||
|
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
else // vendor/ConEmu.xml.default config exists, copy Cmder vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml.
|
||||||
|
{
|
||||||
|
if (!CopyFile(defaultCfgPath, cfgPath, FALSE))
|
||||||
|
{
|
||||||
|
MessageBox(NULL,
|
||||||
|
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||||
|
? L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
|
||||||
|
: L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!CopyFile(defaultCfgPath, cfgPath, FALSE))
|
||||||
|
{
|
||||||
|
MessageBox(NULL,
|
||||||
|
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||||
|
? L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
|
||||||
|
: L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml
|
||||||
|
{
|
||||||
|
if (!CopyFile(cfgPath, userCfgPath, FALSE))
|
||||||
|
{
|
||||||
|
MessageBox(NULL,
|
||||||
|
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||||
|
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied."
|
||||||
|
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml");
|
||||||
|
}
|
||||||
|
else // '/c [path]' was specified and 'vendor/ConEmu.xml.default' config exists, copy Cmder 'vendor/ConEmu.xml.default' file to '[user specified path]/config/user_ConEmu.xml'.
|
||||||
|
{
|
||||||
|
if ( ! CopyFile(defaultCfgPath, userCfgPath, FALSE))
|
||||||
|
{
|
||||||
|
MessageBox(NULL,
|
||||||
|
(GetLastError() == ERROR_ACCESS_DENIED)
|
||||||
|
? L"Failed to copy vendor/ConEmu.xml.default file to [user specified path]/config/user_ConEmu.xml! Access Denied."
|
||||||
|
: L"Failed to copy vendor/ConEmu.xml.default file to [user specified path]/config/user_ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml");
|
||||||
}
|
}
|
||||||
|
|
||||||
SYSTEM_INFO sysInfo;
|
SYSTEM_INFO sysInfo;
|
||||||
GetNativeSystemInfo(&sysInfo);
|
GetNativeSystemInfo(&sysInfo);
|
||||||
if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
|
if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
|
||||||
|
{
|
||||||
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu64.exe");
|
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu64.exe");
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.exe");
|
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.exe");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FileExists(oldCfgPath) && !FileExists(cfgPath))
|
swprintf_s(args, L"%s /Icon \"%s\" /Title Cmder", args, icoPath);
|
||||||
|
|
||||||
|
if (!streqi(cmderStart.c_str(), L""))
|
||||||
{
|
{
|
||||||
if (!CopyFile(oldCfgPath, cfgPath, FALSE))
|
swprintf_s(args, L"%s /dir \"%s\"", args, cmderStart.c_str());
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_single_mode)
|
if (is_single_mode)
|
||||||
{
|
{
|
||||||
swprintf_s(args, L"/single /Icon \"%s\" /Title Cmder", icoPath);
|
swprintf_s(args, L"%s /single", args);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (!streqi(cmderTask.c_str(), L""))
|
||||||
{
|
{
|
||||||
swprintf_s(args, L"/Icon \"%s\" /Title Cmder", icoPath);
|
swprintf_s(args, L"%s /run {%s}", args, cmderTask.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cfgRoot.length() != 0)
|
||||||
|
{
|
||||||
|
swprintf_s(args, L"%s -loadcfgfile \"%s\"", args, userConEmuCfgPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
||||||
if (!streqi(path.c_str(), L""))
|
if (wcscmp(userConfigDirPath, configDirPath) != 0)
|
||||||
{
|
{
|
||||||
if (!SetEnvironmentVariable(L"CMDER_START", path.c_str())) {
|
SetEnvironmentVariable(L"CMDER_USER_CONFIG", userConfigDirPath);
|
||||||
MessageBox(NULL, _T("Error trying to set CMDER_START to given path!"), _T("Error"), MB_OK);
|
SetEnvironmentVariable(L"CMDER_USER_BIN", userBinDirPath);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure EnvironmentVariables are propagated.
|
// Ensure EnvironmentVariables are propagated.
|
||||||
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment", SMTO_ABORTIFHUNG, 5000, NULL);
|
|
||||||
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) L"Environment", SMTO_ABORTIFHUNG, 5000, NULL); // For Windows >= 8
|
|
||||||
|
|
||||||
STARTUPINFO si = { 0 };
|
STARTUPINFO si = { 0 };
|
||||||
|
|
||||||
si.cb = sizeof(STARTUPINFO);
|
si.cb = sizeof(STARTUPINFO);
|
||||||
#if USE_TASKBAR_API
|
#if USE_TASKBAR_API
|
||||||
si.lpTitle = appId;
|
si.lpTitle = appId;
|
||||||
si.dwFlags = STARTF_TITLEISAPPID;
|
si.dwFlags = STARTF_TITLEISAPPID;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PROCESS_INFORMATION pi;
|
PROCESS_INFORMATION pi;
|
||||||
if (!CreateProcess(conEmuPath, args, NULL, NULL, false, 0, NULL, NULL, &si, &pi)) {
|
if (!CreateProcess(conEmuPath, args, NULL, NULL, false, 0, NULL, NULL, &si, &pi)) {
|
||||||
MessageBox(NULL, _T("Unable to create the ConEmu Process!"), _T("Error"), MB_OK);
|
MessageBox(NULL, _T("Unable to create the ConEmu process!"), _T("Error"), MB_OK);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LRESULT lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL);
|
||||||
|
lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)L"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL); // For Windows >= 8
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsUserOnly(std::wstring opt)
|
bool IsUserOnly(std::wstring opt)
|
||||||
@ -213,8 +442,7 @@ HKEY GetRootKey(std::wstring opt)
|
|||||||
|
|
||||||
if (IsUserOnly(opt))
|
if (IsUserOnly(opt))
|
||||||
{
|
{
|
||||||
FAIL_ON_ERROR(RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\Classes", 0, NULL,
|
FAIL_ON_ERROR(RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\Classes", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &root, NULL));
|
||||||
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &root, NULL));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -224,8 +452,10 @@ HKEY GetRootKey(std::wstring opt)
|
|||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName, std::wstring cfgRoot, bool single)
|
||||||
{
|
{
|
||||||
|
wchar_t userConfigDirPath[MAX_PATH] = { 0 };
|
||||||
|
|
||||||
// First, get the paths we will use
|
// First, get the paths we will use
|
||||||
|
|
||||||
wchar_t exePath[MAX_PATH] = { 0 };
|
wchar_t exePath[MAX_PATH] = { 0 };
|
||||||
@ -234,7 +464,23 @@ void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
|||||||
GetModuleFileName(NULL, exePath, sizeof(exePath));
|
GetModuleFileName(NULL, exePath, sizeof(exePath));
|
||||||
|
|
||||||
wchar_t commandStr[MAX_PATH + 20] = { 0 };
|
wchar_t commandStr[MAX_PATH + 20] = { 0 };
|
||||||
swprintf_s(commandStr, L"\"%s\" \"%%V\"", exePath);
|
wchar_t baseCommandStr[MAX_PATH + 20] = { 0 };
|
||||||
|
if (!single) {
|
||||||
|
swprintf_s(baseCommandStr, L"\"%s\"", exePath);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
swprintf_s(baseCommandStr, L"\"%s\" /single", exePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
|
||||||
|
{
|
||||||
|
swprintf_s(commandStr, L"%s \"%%V\"", baseCommandStr);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
std::copy(cfgRoot.begin(), cfgRoot.end(), userConfigDirPath);
|
||||||
|
userConfigDirPath[cfgRoot.length()] = 0;
|
||||||
|
swprintf_s(commandStr, L"%s /c \"%s\" \"%%V\"", baseCommandStr, userConfigDirPath);
|
||||||
|
}
|
||||||
|
|
||||||
// Now that we have `commandStr`, it's OK to change `exePath`...
|
// Now that we have `commandStr`, it's OK to change `exePath`...
|
||||||
PathRemoveFileSpec(exePath);
|
PathRemoveFileSpec(exePath);
|
||||||
@ -242,13 +488,10 @@ void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
|||||||
PathCombine(icoPath, exePath, L"icons\\cmder.ico");
|
PathCombine(icoPath, exePath, L"icons\\cmder.ico");
|
||||||
|
|
||||||
// Now set the registry keys
|
// Now set the registry keys
|
||||||
|
|
||||||
HKEY root = GetRootKey(opt);
|
HKEY root = GetRootKey(opt);
|
||||||
|
|
||||||
HKEY cmderKey;
|
HKEY cmderKey;
|
||||||
FAIL_ON_ERROR(
|
FAIL_ON_ERROR(RegCreateKeyEx(root, keyBaseName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
||||||
RegCreateKeyEx(root, keyBaseName, 0, NULL,
|
|
||||||
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
|
||||||
|
|
||||||
FAIL_ON_ERROR(RegSetValue(cmderKey, L"", REG_SZ, L"Cmder Here", NULL));
|
FAIL_ON_ERROR(RegSetValue(cmderKey, L"", REG_SZ, L"Cmder Here", NULL));
|
||||||
FAIL_ON_ERROR(RegSetValueEx(cmderKey, L"NoWorkingDirectory", 0, REG_SZ, (BYTE *)L"", 2));
|
FAIL_ON_ERROR(RegSetValueEx(cmderKey, L"NoWorkingDirectory", 0, REG_SZ, (BYTE *)L"", 2));
|
||||||
@ -256,9 +499,7 @@ void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
|||||||
FAIL_ON_ERROR(RegSetValueEx(cmderKey, L"Icon", 0, REG_SZ, (BYTE *)icoPath, wcslen(icoPath) * sizeof(wchar_t)));
|
FAIL_ON_ERROR(RegSetValueEx(cmderKey, L"Icon", 0, REG_SZ, (BYTE *)icoPath, wcslen(icoPath) * sizeof(wchar_t)));
|
||||||
|
|
||||||
HKEY command;
|
HKEY command;
|
||||||
FAIL_ON_ERROR(
|
FAIL_ON_ERROR(RegCreateKeyEx(cmderKey, L"command", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &command, NULL));
|
||||||
RegCreateKeyEx(cmderKey, L"command", 0, NULL,
|
|
||||||
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &command, NULL));
|
|
||||||
|
|
||||||
FAIL_ON_ERROR(RegSetValue(command, L"", REG_SZ, commandStr, NULL));
|
FAIL_ON_ERROR(RegSetValue(command, L"", REG_SZ, commandStr, NULL));
|
||||||
|
|
||||||
@ -271,18 +512,144 @@ void UnregisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
|||||||
{
|
{
|
||||||
HKEY root = GetRootKey(opt);
|
HKEY root = GetRootKey(opt);
|
||||||
HKEY cmderKey;
|
HKEY cmderKey;
|
||||||
FAIL_ON_ERROR(
|
FAIL_ON_ERROR(RegCreateKeyEx(root, keyBaseName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
||||||
RegCreateKeyEx(root, keyBaseName, 0, NULL,
|
|
||||||
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
|
||||||
#if XP
|
|
||||||
FAIL_ON_ERROR(SHDeleteKey(cmderKey, NULL));
|
|
||||||
#else
|
|
||||||
FAIL_ON_ERROR(RegDeleteTree(cmderKey, NULL));
|
FAIL_ON_ERROR(RegDeleteTree(cmderKey, NULL));
|
||||||
#endif
|
RegDeleteKeyEx(root, keyBaseName, KEY_ALL_ACCESS, NULL);
|
||||||
RegCloseKey(cmderKey);
|
RegCloseKey(cmderKey);
|
||||||
RegCloseKey(root);
|
RegCloseKey(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct cmderOptions
|
||||||
|
{
|
||||||
|
std::wstring cmderCfgRoot = L"";
|
||||||
|
std::wstring cmderStart = L"";
|
||||||
|
std::wstring cmderTask = L"";
|
||||||
|
std::wstring cmderRegScope = L"USER";
|
||||||
|
bool cmderSingle = false;
|
||||||
|
bool cmderUserCfg = true;
|
||||||
|
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 (cmderOptions.error == false) {
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
int len = wcslen(szArgList[i + 1]);
|
||||||
|
if (wcscmp(&szArgList[i + 1][len - 1], L"\"") == 0)
|
||||||
|
{
|
||||||
|
szArgList[i + 1][len - 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PathFileExists(szArgList[i + 1]))
|
||||||
|
{
|
||||||
|
cmderOptions.cmderStart = szArgList[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox(NULL, szArgList[i + 1], L"/START - Folder does not exist!", MB_OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (_wcsicmp(L"/task", szArgList[i]) == 0)
|
||||||
|
{
|
||||||
|
cmderOptions.cmderTask = szArgList[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else if (_wcsicmp(L"/single", szArgList[i]) == 0)
|
||||||
|
{
|
||||||
|
cmderOptions.cmderSingle = true;
|
||||||
|
}
|
||||||
|
else if (_wcsicmp(L"/m", szArgList[i]) == 0)
|
||||||
|
{
|
||||||
|
cmderOptions.cmderUserCfg = false;
|
||||||
|
}
|
||||||
|
else if (_wcsicmp(L"/register", szArgList[i]) == 0)
|
||||||
|
{
|
||||||
|
cmderOptions.registerApp = true;
|
||||||
|
cmderOptions.unRegisterApp = false;
|
||||||
|
if (szArgList[i + 1] != NULL)
|
||||||
|
{
|
||||||
|
if (_wcsicmp(L"all", szArgList[i + 1]) == 0 || _wcsicmp(L"user", szArgList[i + 1]) == 0)
|
||||||
|
{
|
||||||
|
cmderOptions.cmderRegScope = szArgList[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (_wcsicmp(L"/unregister", szArgList[i]) == 0)
|
||||||
|
{
|
||||||
|
cmderOptions.unRegisterApp = true;
|
||||||
|
cmderOptions.registerApp = false;
|
||||||
|
if (szArgList[i + 1] != NULL)
|
||||||
|
{
|
||||||
|
if (_wcsicmp(L"all", szArgList[i + 1]) == 0 || _wcsicmp(L"user", szArgList[i + 1]) == 0)
|
||||||
|
{
|
||||||
|
cmderOptions.cmderRegScope = szArgList[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (cmderOptions.cmderStart == L"")
|
||||||
|
{
|
||||||
|
int len = wcslen(szArgList[i]);
|
||||||
|
if (wcscmp(&szArgList[i][len - 1], L"\"") == 0)
|
||||||
|
{
|
||||||
|
szArgList[i][len - 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PathFileExists(szArgList[i]))
|
||||||
|
{
|
||||||
|
cmderOptions.cmderStart = szArgList[i];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox(NULL, L"Unrecognized parameter.\n\nValid options:\n\n /c [CMDER User Root Path]\n\n /task [ConEmu Task Name]\n\n [/start [Start in Path] | [Start in Path]]\n\n /single\n\n /m\n\nor\n\n /register [USER | ALL]\n\nor\n\n /unregister [USER | ALL]\n", MB_TITLE, MB_OK);
|
||||||
|
cmderOptions.error = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox(NULL, L"Unrecognized parameter.\n\nValid options:\n\n /c [CMDER User Root Path]\n\n /task [ConEmu Task Name]\n\n [/start [Start in Path] | [Start in Path]]\n\n /single\n\n /m\n\nor\n\n /register [USER | ALL]\n\nor\n\n /unregister [USER | ALL]\n", MB_TITLE, MB_OK);
|
||||||
|
cmderOptions.error = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalFree(szArgList);
|
||||||
|
|
||||||
|
return cmderOptions;
|
||||||
|
}
|
||||||
|
|
||||||
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
||||||
_In_opt_ HINSTANCE hPrevInstance,
|
_In_opt_ HINSTANCE hPrevInstance,
|
||||||
_In_ LPTSTR lpCmdLine,
|
_In_ LPTSTR lpCmdLine,
|
||||||
@ -292,30 +659,25 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
|||||||
UNREFERENCED_PARAMETER(lpCmdLine);
|
UNREFERENCED_PARAMETER(lpCmdLine);
|
||||||
UNREFERENCED_PARAMETER(nCmdShow);
|
UNREFERENCED_PARAMETER(nCmdShow);
|
||||||
|
|
||||||
optpair opt = GetOption();
|
cmderOptions cmderOptions = GetOption();
|
||||||
|
|
||||||
if (streqi(opt.first.c_str(), L"/START"))
|
if (cmderOptions.registerApp == true)
|
||||||
{
|
{
|
||||||
StartCmder(opt.second, false);
|
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);
|
||||||
|
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);
|
||||||
}
|
}
|
||||||
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"/REGISTER"))
|
else if (cmderOptions.error == true)
|
||||||
{
|
{
|
||||||
RegisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
|
return 1;
|
||||||
RegisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_LISTITEM);
|
|
||||||
}
|
|
||||||
else if (streqi(opt.first.c_str(), L"/UNREGISTER"))
|
|
||||||
{
|
|
||||||
UnregisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
|
|
||||||
UnregisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_LISTITEM);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MessageBox(NULL, L"Unrecognized parameter.\n\nValid options:\n /START <path>\n /SINGLE <path>\n /REGISTER [USER/ALL]\n /UNREGISTER [USER/ALL]", MB_TITLE, MB_OK);
|
StartCmder(cmderOptions.cmderStart, cmderOptions.cmderSingle, cmderOptions.cmderTask, cmderOptions.cmderCfgRoot, cmderOptions.cmderUserCfg);
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
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>
|
Binary file not shown.
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
|
.gitignore
|
||||||
.gitattributes
|
.gitattributes
|
||||||
.git
|
.git
|
||||||
*.rb
|
.github
|
||||||
|
*.md
|
||||||
build
|
build
|
||||||
scripts
|
scripts
|
||||||
config\.history
|
config\.history
|
||||||
|
@ -53,13 +53,20 @@ Param(
|
|||||||
[switch]$Compile
|
[switch]$Compile
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Get the scripts and cmder root dirs we are building in.
|
||||||
|
$ScriptRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
|
||||||
|
$cmder_root = $ScriptRoot.replace("\scripts","")
|
||||||
|
|
||||||
# Dot source util functions into this scope
|
# Dot source util functions into this scope
|
||||||
. ".\utils.ps1"
|
. "$PSScriptRoot\utils.ps1"
|
||||||
$ErrorActionPreference = "Stop"
|
$ErrorActionPreference = "Stop"
|
||||||
|
|
||||||
Push-Location -Path $saveTo
|
Push-Location -Path $saveTo
|
||||||
$sources = Get-Content $sourcesPath | Out-String | Convertfrom-Json
|
$sources = Get-Content $sourcesPath | Out-String | Convertfrom-Json
|
||||||
|
|
||||||
|
# Get the version string
|
||||||
|
$version = Get-VersionStr
|
||||||
|
|
||||||
# Check for requirements
|
# Check for requirements
|
||||||
Ensure-Exists $sourcesPath
|
Ensure-Exists $sourcesPath
|
||||||
Ensure-Executable "7z"
|
Ensure-Executable "7z"
|
||||||
@ -75,6 +82,14 @@ if ($config -ne "") {
|
|||||||
} else { $ConEmuXml = "" }
|
} else { $ConEmuXml = "" }
|
||||||
} else { $ConEmuXml = "" }
|
} else { $ConEmuXml = "" }
|
||||||
|
|
||||||
|
# Kill ssh-agent.exe if it is running from the $env:cmder_root we are building
|
||||||
|
foreach ($ssh_agent in $(get-process ssh-agent -erroraction silentlycontinue)) {
|
||||||
|
if ([string]$($ssh_agent.path) -match [string]$cmder_root.replace('\','\\')) {
|
||||||
|
write-verbose $("Stopping " + $ssh_agent.path + "!")
|
||||||
|
stop-process $ssh_agent.id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$vend = $pwd
|
$vend = $pwd
|
||||||
foreach ($s in $sources) {
|
foreach ($s in $sources) {
|
||||||
Write-Verbose "Getting $($s.name) from URL $($s.url)"
|
Write-Verbose "Getting $($s.name) from URL $($s.url)"
|
||||||
@ -104,10 +119,17 @@ Pop-Location
|
|||||||
|
|
||||||
if($Compile) {
|
if($Compile) {
|
||||||
Push-Location -Path $launcher
|
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) {
|
if ($LastExitCode -ne 0) {
|
||||||
throw "msbuild failed to build the executable."
|
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
|
Pop-Location
|
||||||
} else {
|
} else {
|
||||||
Write-Warning "You are not building a launcher, Use -Compile"
|
Write-Warning "You are not building a launcher, Use -Compile"
|
||||||
|
@ -48,11 +48,11 @@ $targets = @{
|
|||||||
Delete-Existing "..\Version*"
|
Delete-Existing "..\Version*"
|
||||||
Delete-Existing "..\build\*"
|
Delete-Existing "..\build\*"
|
||||||
|
|
||||||
$version = Invoke-Expression "git describe --abbrev=0 --tags"
|
$version = Get-VersionStr
|
||||||
(New-Item -ItemType file "$cmderRoot\Version $version") | Out-Null
|
(New-Item -ItemType file "$cmderRoot\Version $version") | Out-Null
|
||||||
|
|
||||||
foreach ($t in $targets.GetEnumerator()) {
|
foreach ($t in $targets.GetEnumerator()) {
|
||||||
Create-Archive $cmderRoot "$saveTo\$($t.Name)" $t.Value
|
Create-Archive $cmderRoot "$saveTo\$($t.Name)" $t.Value
|
||||||
$hash = (Digest-MD5 "$saveTo\$($t.Name)")
|
$hash = (Digest-Hash "$saveTo\$($t.Name)")
|
||||||
Add-Content "$saveTo\hashes.txt" $hash
|
Add-Content -path "$saveTo\hashes.txt" -value ($t.Name + ' ' + $hash)
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
function Ensure-Exists ($path) {
|
function Ensure-Exists($path) {
|
||||||
if (-not (Test-Path $path)) {
|
if (-not (Test-Path $path)) {
|
||||||
Write-Error "Missing required $path! Ensure it is installed"
|
Write-Error "Missing required $path! Ensure it is installed"
|
||||||
exit 1
|
exit 1
|
||||||
@ -6,7 +6,7 @@ function Ensure-Exists ($path) {
|
|||||||
return $true > $null
|
return $true > $null
|
||||||
}
|
}
|
||||||
|
|
||||||
function Ensure-Executable ($command) {
|
function Ensure-Executable($command) {
|
||||||
try { Get-Command $command -ErrorAction Stop > $null }
|
try { Get-Command $command -ErrorAction Stop > $null }
|
||||||
catch {
|
catch {
|
||||||
If( ($command -eq "7z") -and (Test-Path "$env:programfiles\7-zip\7z.exe") ){
|
If( ($command -eq "7z") -and (Test-Path "$env:programfiles\7-zip\7z.exe") ){
|
||||||
@ -22,12 +22,13 @@ function Ensure-Executable ($command) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function Delete-Existing ($path) {
|
function Delete-Existing($path) {
|
||||||
Write-Verbose "Remove $path"
|
Write-Verbose "Remove $path"
|
||||||
Remove-Item -Recurse -force $path -ErrorAction SilentlyContinue
|
Remove-Item -Recurse -force $path -ErrorAction SilentlyContinue
|
||||||
}
|
}
|
||||||
|
|
||||||
function Extract-Archive ($source, $target) {
|
function Extract-Archive($source, $target) {
|
||||||
|
Write-Verbose $("Extracting Archive '$cmder_root\vendor\" + $source.replace('/','\') + " to '$cmder_root\vendor\$target'")
|
||||||
Invoke-Expression "7z x -y -o`"$($target)`" `"$source`" > `$null"
|
Invoke-Expression "7z x -y -o`"$($target)`" `"$source`" > `$null"
|
||||||
if ($lastexitcode -ne 0) {
|
if ($lastexitcode -ne 0) {
|
||||||
Write-Error "Extracting of $source failied"
|
Write-Error "Extracting of $source failied"
|
||||||
@ -35,7 +36,7 @@ function Extract-Archive ($source, $target) {
|
|||||||
Remove-Item $source
|
Remove-Item $source
|
||||||
}
|
}
|
||||||
|
|
||||||
function Create-Archive ($source, $target, $params) {
|
function Create-Archive($source, $target, $params) {
|
||||||
$command = "7z a -x@`"$source\packignore`" $params $target $source > `$null"
|
$command = "7z a -x@`"$source\packignore`" $params $target $source > `$null"
|
||||||
Write-Verbose "Running: $command"
|
Write-Verbose "Running: $command"
|
||||||
Invoke-Expression $command
|
Invoke-Expression $command
|
||||||
@ -46,22 +47,101 @@ function Create-Archive ($source, $target, $params) {
|
|||||||
|
|
||||||
# If directory contains only one child directory
|
# If directory contains only one child directory
|
||||||
# Flatten it instead
|
# Flatten it instead
|
||||||
function Flatten-Directory ($name) {
|
function Flatten-Directory($name) {
|
||||||
$child = (Get-Childitem $name)[0]
|
$child = (Get-Childitem $name)[0]
|
||||||
Rename-Item $name -NewName "$($name)_moving"
|
Rename-Item $name -NewName "$($name)_moving"
|
||||||
Move-Item -Path "$($name)_moving\$child" -Destination $name
|
Move-Item -Path "$($name)_moving\$child" -Destination $name
|
||||||
Remove-Item -Recurse "$($name)_moving"
|
Remove-Item -Recurse "$($name)_moving"
|
||||||
}
|
}
|
||||||
|
|
||||||
function Digest-MD5 ($path) {
|
function Digest-Hash($path) {
|
||||||
if(Get-Command Get-FileHash -ErrorAction SilentlyContinue){
|
if(Get-Command Get-FileHash -ErrorAction SilentlyContinue){
|
||||||
return (Get-FileHash -Algorithm MD5 -Path $path).Hash
|
return (Get-FileHash -Algorithm SHA256 -Path $path).Hash
|
||||||
}
|
}
|
||||||
|
|
||||||
return Invoke-Expression "md5sum $path"
|
return Invoke-Expression "md5sum $path"
|
||||||
}
|
}
|
||||||
|
|
||||||
function Register-Cmder(){
|
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()]
|
[CmdletBinding()]
|
||||||
Param
|
Param
|
||||||
(
|
(
|
||||||
@ -75,7 +155,7 @@ function Register-Cmder(){
|
|||||||
$Command = "%V"
|
$Command = "%V"
|
||||||
|
|
||||||
, # Defaults to the icons folder in the cmder package.
|
, # Defaults to the icons folder in the cmder package.
|
||||||
$icon = (Split-Path $PathToExe | join-path -ChildPath 'icons/cmder.ico')
|
$icon = (Split-Path $PathToExe | Join-Path -ChildPath 'icons/cmder.ico')
|
||||||
)
|
)
|
||||||
Begin
|
Begin
|
||||||
{
|
{
|
||||||
@ -99,7 +179,7 @@ function Register-Cmder(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function Unregister-Cmder{
|
function Unregister-Cmder {
|
||||||
Begin
|
Begin
|
||||||
{
|
{
|
||||||
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT > $null
|
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT > $null
|
||||||
@ -120,12 +200,14 @@ function Download-File {
|
|||||||
$Url,
|
$Url,
|
||||||
$File
|
$File
|
||||||
)
|
)
|
||||||
|
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||||
|
|
||||||
# I think this is the problem
|
# I think this is the problem
|
||||||
$File = $File -Replace "/", "\"
|
$File = $File -Replace "/", "\"
|
||||||
Write-Verbose "Downloading from $Url to $File"
|
Write-Verbose "Downloading from $Url to $File"
|
||||||
$wc = new-object System.Net.WebClient
|
$wc = New-Object System.Net.WebClient
|
||||||
if ($env:https_proxy) {
|
if ($env:https_proxy) {
|
||||||
$wc.proxy = (new-object System.Net.WebProxy($env:https_proxy))
|
$wc.proxy = (New-Object System.Net.WebProxy($env:https_proxy))
|
||||||
}
|
}
|
||||||
$wc.Proxy.Credentials=[System.Net.CredentialCache]::DefaultNetworkCredentials;
|
$wc.Proxy.Credentials=[System.Net.CredentialCache]::DefaultNetworkCredentials;
|
||||||
$wc.DownloadFile($Url, $File)
|
$wc.DownloadFile($Url, $File)
|
||||||
|
247
config/ConEmu.xml → vendor/ConEmu.xml.default
vendored
247
config/ConEmu.xml → vendor/ConEmu.xml.default
vendored
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<key name="Software">
|
<key name="Software">
|
||||||
<key name="ConEmu">
|
<key name="ConEmu">
|
||||||
<key name=".Vanilla" modified="2015-11-24 14:43:35" build="151119">
|
<key name=".Vanilla" modified="2018-02-22 06:02:11" build="171109">
|
||||||
<value name="ColorTable00" type="dword" data="00222827"/>
|
<value name="ColorTable00" type="dword" data="00222827"/>
|
||||||
<value name="ColorTable01" type="dword" data="009e5401"/>
|
<value name="ColorTable01" type="dword" data="009e5401"/>
|
||||||
<value name="ColorTable02" type="dword" data="0004aa74"/>
|
<value name="ColorTable02" type="dword" data="0004aa74"/>
|
||||||
@ -59,6 +59,7 @@
|
|||||||
<value name="FadeInactive" type="hex" data="01"/>
|
<value name="FadeInactive" type="hex" data="01"/>
|
||||||
<value name="FadeInactiveLow" type="hex" data="00"/>
|
<value name="FadeInactiveLow" type="hex" data="00"/>
|
||||||
<value name="FadeInactiveHigh" type="hex" data="c8"/>
|
<value name="FadeInactiveHigh" type="hex" data="c8"/>
|
||||||
|
<value name="ComSpec.UncPaths" type="hex" data="01"/>
|
||||||
<value name="ConVisible" type="hex" data="00"/>
|
<value name="ConVisible" type="hex" data="00"/>
|
||||||
<value name="ConInMode" type="dword" data="ffffffff"/>
|
<value name="ConInMode" type="dword" data="ffffffff"/>
|
||||||
<value name="UseInjects" type="hex" data="01"/>
|
<value name="UseInjects" type="hex" data="01"/>
|
||||||
@ -101,12 +102,12 @@
|
|||||||
<value name="FontName" type="string" data="Consolas"/>
|
<value name="FontName" type="string" data="Consolas"/>
|
||||||
<value name="FontName2" type="string" data="Lucida Console"/>
|
<value name="FontName2" type="string" data="Lucida Console"/>
|
||||||
<value name="FontAutoSize" type="hex" data="00"/>
|
<value name="FontAutoSize" type="hex" data="00"/>
|
||||||
<value name="FontSize" type="dword" data="00000010"/>
|
<value name="FontSize" type="ulong" data="16"/>
|
||||||
<value name="FontSizeX" type="dword" data="00000000"/>
|
<value name="FontSizeX" type="ulong" data="0"/>
|
||||||
<value name="FontSizeX2" type="dword" data="00000000"/>
|
<value name="FontSizeX2" type="ulong" data="0"/>
|
||||||
<value name="FontSizeX3" type="dword" data="00000000"/>
|
<value name="FontSizeX3" type="ulong" data="0"/>
|
||||||
<value name="FontCharSet" type="hex" data="00"/>
|
<value name="FontCharSet" type="hex" data="00"/>
|
||||||
<value name="Anti-aliasing" type="dword" data="00000006"/>
|
<value name="Anti-aliasing" type="ulong" data="6"/>
|
||||||
<value name="FontBold" type="hex" data="00"/>
|
<value name="FontBold" type="hex" data="00"/>
|
||||||
<value name="FontItalic" type="hex" data="00"/>
|
<value name="FontItalic" type="hex" data="00"/>
|
||||||
<value name="Monospace" type="hex" data="01"/>
|
<value name="Monospace" type="hex" data="01"/>
|
||||||
@ -123,29 +124,29 @@
|
|||||||
<value name="ColorKeyTransparent" type="hex" data="00"/>
|
<value name="ColorKeyTransparent" type="hex" data="00"/>
|
||||||
<value name="ColorKeyValue" type="dword" data="00010101"/>
|
<value name="ColorKeyValue" type="dword" data="00010101"/>
|
||||||
<value name="UseCurrentSizePos" type="hex" data="01"/>
|
<value name="UseCurrentSizePos" type="hex" data="01"/>
|
||||||
<value name="WindowMode" type="dword" data="0000051f"/>
|
<value name="WindowMode" type="dword" data="00000520"/>
|
||||||
<value name="ConWnd Width" type="dword" data="00000078"/>
|
<value name="ConWnd Width" type="dword" data="00000078"/>
|
||||||
<value name="ConWnd Height" type="dword" data="0000001e"/>
|
<value name="ConWnd Height" type="dword" data="0000001e"/>
|
||||||
<value name="Cascaded" type="hex" data="01"/>
|
<value name="Cascaded" type="hex" data="01"/>
|
||||||
<value name="ConWnd X" type="dword" data="000001f4"/>
|
<value name="ConWnd X" type="long" data="500"/>
|
||||||
<value name="ConWnd Y" type="dword" data="000001f4"/>
|
<value name="ConWnd Y" type="long" data="500"/>
|
||||||
<value name="16bit Height" type="dword" data="00000000"/>
|
<value name="16bit Height" type="ulong" data="0"/>
|
||||||
<value name="AutoSaveSizePos" type="hex" data="01"/>
|
<value name="AutoSaveSizePos" type="hex" data="01"/>
|
||||||
<value name="IntegralSize" type="hex" data="00"/>
|
<value name="IntegralSize" type="hex" data="00"/>
|
||||||
<value name="QuakeStyle" type="hex" data="00"/>
|
<value name="QuakeStyle" type="hex" data="00"/>
|
||||||
<value name="QuakeAnimation" type="dword" data="0000012c"/>
|
<value name="QuakeAnimation" type="ulong" data="300"/>
|
||||||
<value name="HideCaption" type="hex" data="00"/>
|
<value name="HideCaption" type="hex" data="00"/>
|
||||||
<value name="HideChildCaption" type="hex" data="01"/>
|
<value name="HideChildCaption" type="hex" data="01"/>
|
||||||
<value name="FocusInChildWindows" type="hex" data="01"/>
|
<value name="FocusInChildWindows" type="hex" data="01"/>
|
||||||
<value name="HideCaptionAlways" type="hex" data="00"/>
|
<value name="HideCaptionAlways" type="hex" data="00"/>
|
||||||
<value name="HideCaptionAlwaysFrame" type="hex" data="00"/>
|
<value name="HideCaptionAlwaysFrame" type="hex" data="00"/>
|
||||||
<value name="HideCaptionAlwaysDelay" type="dword" data="000007d0"/>
|
<value name="HideCaptionAlwaysDelay" type="ulong" data="2000"/>
|
||||||
<value name="HideCaptionAlwaysDisappear" type="dword" data="000007d0"/>
|
<value name="HideCaptionAlwaysDisappear" type="ulong" data="2000"/>
|
||||||
<value name="DownShowHiddenMessage" type="hex" data="00"/>
|
<value name="DownShowHiddenMessage" type="hex" data="00"/>
|
||||||
<value name="ConsoleFontName" type="string" data="Lucida Console"/>
|
<value name="ConsoleFontName" type="string" data="Lucida Console"/>
|
||||||
<value name="ConsoleFontWidth" type="dword" data="00000003"/>
|
<value name="ConsoleFontWidth" type="long" data="3"/>
|
||||||
<value name="ConsoleFontHeight" type="dword" data="00000005"/>
|
<value name="ConsoleFontHeight" type="long" data="5"/>
|
||||||
<value name="DefaultBufferHeight" type="dword" data="000003e8"/>
|
<value name="DefaultBufferHeight" type="long" data="1000"/>
|
||||||
<value name="AutoBufferHeight" type="hex" data="01"/>
|
<value name="AutoBufferHeight" type="hex" data="01"/>
|
||||||
<value name="CmdOutputCP" type="dword" data="00000000"/>
|
<value name="CmdOutputCP" type="dword" data="00000000"/>
|
||||||
<value name="ComSpec.Type" type="hex" data="00"/>
|
<value name="ComSpec.Type" type="hex" data="00"/>
|
||||||
@ -153,7 +154,7 @@
|
|||||||
<value name="ComSpec.UpdateEnv" type="hex" data="00"/>
|
<value name="ComSpec.UpdateEnv" type="hex" data="00"/>
|
||||||
<value name="ComSpec.EnvAddPath" type="hex" data="01"/>
|
<value name="ComSpec.EnvAddPath" type="hex" data="01"/>
|
||||||
<value name="ComSpec.EnvAddExePath" type="hex" data="01"/>
|
<value name="ComSpec.EnvAddExePath" type="hex" data="01"/>
|
||||||
<value name="ComSpec.UncPaths" type="hex" data="00"/>
|
<value name="ComSpec.UncPaths" type="hex" data="01"/>
|
||||||
<value name="ComSpec.Path" type="string" data=""/>
|
<value name="ComSpec.Path" type="string" data=""/>
|
||||||
<value name="ConsoleTextSelection" type="hex" data="01"/>
|
<value name="ConsoleTextSelection" type="hex" data="01"/>
|
||||||
<value name="CTS.AutoCopy" type="hex" data="01"/>
|
<value name="CTS.AutoCopy" type="hex" data="01"/>
|
||||||
@ -167,7 +168,7 @@
|
|||||||
<value name="CTS.MBtnAction" type="hex" data="00"/>
|
<value name="CTS.MBtnAction" type="hex" data="00"/>
|
||||||
<value name="CTS.ColorIndex" type="hex" data="e0"/>
|
<value name="CTS.ColorIndex" type="hex" data="e0"/>
|
||||||
<value name="ClipboardConfirmEnter" type="hex" data="01"/>
|
<value name="ClipboardConfirmEnter" type="hex" data="01"/>
|
||||||
<value name="ClipboardConfirmLonger" type="dword" data="000000c8"/>
|
<value name="ClipboardConfirmLonger" type="ulong" data="200"/>
|
||||||
<value name="FarGotoEditorOpt" type="hex" data="01"/>
|
<value name="FarGotoEditorOpt" type="hex" data="01"/>
|
||||||
<value name="FarGotoEditorPath" type="string" data="far.exe /e%1:%2 "%3""/>
|
<value name="FarGotoEditorPath" type="string" data="far.exe /e%1:%2 "%3""/>
|
||||||
<value name="FixFarBorders" type="hex" data="01"/>
|
<value name="FixFarBorders" type="hex" data="01"/>
|
||||||
@ -198,7 +199,7 @@
|
|||||||
<value name="MouseSkipActivation" type="hex" data="01"/>
|
<value name="MouseSkipActivation" type="hex" data="01"/>
|
||||||
<value name="MouseSkipMoving" type="hex" data="01"/>
|
<value name="MouseSkipMoving" type="hex" data="01"/>
|
||||||
<value name="FarHourglass" type="hex" data="01"/>
|
<value name="FarHourglass" type="hex" data="01"/>
|
||||||
<value name="FarHourglassDelay" type="dword" data="000001f4"/>
|
<value name="FarHourglassDelay" type="ulong" data="500"/>
|
||||||
<value name="Dnd" type="hex" data="01"/>
|
<value name="Dnd" type="hex" data="01"/>
|
||||||
<value name="DndDrop" type="hex" data="01"/>
|
<value name="DndDrop" type="hex" data="01"/>
|
||||||
<value name="DefCopy" type="hex" data="01"/>
|
<value name="DefCopy" type="hex" data="01"/>
|
||||||
@ -212,8 +213,8 @@
|
|||||||
<value name="StatusBar.Show" type="hex" data="00"/>
|
<value name="StatusBar.Show" type="hex" data="00"/>
|
||||||
<value name="StatusBar.Flags" type="dword" data="00000002"/>
|
<value name="StatusBar.Flags" type="dword" data="00000002"/>
|
||||||
<value name="StatusFontFace" type="string" data="Tahoma"/>
|
<value name="StatusFontFace" type="string" data="Tahoma"/>
|
||||||
<value name="StatusFontCharSet" type="dword" data="00000000"/>
|
<value name="StatusFontCharSet" type="ulong" data="0"/>
|
||||||
<value name="StatusFontHeight" type="dword" data="0000000e"/>
|
<value name="StatusFontHeight" type="long" data="14"/>
|
||||||
<value name="StatusBar.Color.Back" type="dword" data="00404040"/>
|
<value name="StatusBar.Color.Back" type="dword" data="00404040"/>
|
||||||
<value name="StatusBar.Color.Light" type="dword" data="00ffffff"/>
|
<value name="StatusBar.Color.Light" type="dword" data="00ffffff"/>
|
||||||
<value name="StatusBar.Color.Dark" type="dword" data="00a0a0a0"/>
|
<value name="StatusBar.Color.Dark" type="dword" data="00a0a0a0"/>
|
||||||
@ -254,34 +255,34 @@
|
|||||||
<value name="TabSelf" type="hex" data="01"/>
|
<value name="TabSelf" type="hex" data="01"/>
|
||||||
<value name="TabLazy" type="hex" data="01"/>
|
<value name="TabLazy" type="hex" data="01"/>
|
||||||
<value name="TabRecent" type="hex" data="00"/>
|
<value name="TabRecent" type="hex" data="00"/>
|
||||||
<value name="TabDblClick" type="dword" data="00000001"/>
|
<value name="TabDblClick" type="ulong" data="1"/>
|
||||||
<value name="TabsOnTaskBar" type="hex" data="02"/>
|
<value name="TabsOnTaskBar" type="hex" data="02"/>
|
||||||
<value name="TaskBarOverlay" type="hex" data="01"/>
|
<value name="TaskBarOverlay" type="hex" data="01"/>
|
||||||
<value name="TabCloseMacro" type="string" data=""/>
|
<value name="TabCloseMacro" type="string" data=""/>
|
||||||
<value name="TabFontFace" type="string" data="Segoe UI"/>
|
<value name="TabFontFace" type="string" data="Segoe UI"/>
|
||||||
<value name="TabFontCharSet" type="dword" data="00000000"/>
|
<value name="TabFontCharSet" type="ulong" data="0"/>
|
||||||
<value name="TabFontHeight" type="dword" data="00000010"/>
|
<value name="TabFontHeight" type="long" data="16"/>
|
||||||
<value name="SaveAllEditors" type="string" data=""/>
|
<value name="SaveAllEditors" type="string" data=""/>
|
||||||
<value name="ToolbarAddSpace" type="dword" data="00000000"/>
|
<value name="ToolbarAddSpace" type="long" data="0"/>
|
||||||
<value name="TabConsole" type="string" data=" %n "/>
|
<value name="TabConsole" type="string" data=" %n "/>
|
||||||
<value name="TabSkipWords" type="string" data="Administrator:|Администратор:"/>
|
<value name="TabSkipWords" type="string" data="Administrator:|Администратор:"/>
|
||||||
<value name="TabPanels" type="string" data="<%c> %s"/>
|
<value name="TabPanels" type="string" data="<%c> %s"/>
|
||||||
<value name="TabEditor" type="string" data="<%c.%i>{%s}"/>
|
<value name="TabEditor" type="string" data="<%c.%i>{%s}"/>
|
||||||
<value name="TabEditorModified" type="string" data="<%c.%i>[%s] *"/>
|
<value name="TabEditorModified" type="string" data="<%c.%i>[%s] *"/>
|
||||||
<value name="TabViewer" type="string" data="<%c.%i>[%s]"/>
|
<value name="TabViewer" type="string" data="<%c.%i>[%s]"/>
|
||||||
<value name="TabLenMax" type="dword" data="00000014"/>
|
<value name="TabLenMax" type="ulong" data="20"/>
|
||||||
<value name="AdminTitleSuffix" type="string" data=" (Admin)"/>
|
<value name="AdminTitleSuffix" type="string" data=" (Admin)"/>
|
||||||
<value name="AdminShowShield" type="hex" data="01"/>
|
<value name="AdminShowShield" type="hex" data="01"/>
|
||||||
<value name="HideInactiveConsoleTabs" type="hex" data="00"/>
|
<value name="HideInactiveConsoleTabs" type="hex" data="00"/>
|
||||||
<value name="ShowFarWindows" type="hex" data="01"/>
|
<value name="ShowFarWindows" type="hex" data="01"/>
|
||||||
<value name="TryToCenter" type="hex" data="01"/>
|
<value name="TryToCenter" type="hex" data="01"/>
|
||||||
<value name="CenterConsolePad" type="dword" data="00000008"/>
|
<value name="CenterConsolePad" type="ulong" data="8"/>
|
||||||
<value name="ShowScrollbar" type="hex" data="02"/>
|
<value name="ShowScrollbar" type="hex" data="02"/>
|
||||||
<value name="ScrollBarAppearDelay" type="dword" data="00000064"/>
|
<value name="ScrollBarAppearDelay" type="ulong" data="100"/>
|
||||||
<value name="ScrollBarDisappearDelay" type="dword" data="000003e8"/>
|
<value name="ScrollBarDisappearDelay" type="ulong" data="1000"/>
|
||||||
<value name="IconID" type="dword" data="00000001"/>
|
<value name="IconID" type="ulong" data="1"/>
|
||||||
<value name="MainTimerElapse" type="dword" data="0000000a"/>
|
<value name="MainTimerElapse" type="ulong" data="10"/>
|
||||||
<value name="MainTimerInactiveElapse" type="dword" data="000003e8"/>
|
<value name="MainTimerInactiveElapse" type="ulong" data="1000"/>
|
||||||
<value name="AffinityMask" type="dword" data="00000000"/>
|
<value name="AffinityMask" type="dword" data="00000000"/>
|
||||||
<value name="SkipFocusEvents" type="hex" data="00"/>
|
<value name="SkipFocusEvents" type="hex" data="00"/>
|
||||||
<value name="MonitorConsoleLang" type="hex" data="03"/>
|
<value name="MonitorConsoleLang" type="hex" data="03"/>
|
||||||
@ -297,32 +298,32 @@
|
|||||||
<value name="FindMatchWholeWords" type="hex" data="00"/>
|
<value name="FindMatchWholeWords" type="hex" data="00"/>
|
||||||
<value name="FindTransparent" type="hex" data="01"/>
|
<value name="FindTransparent" type="hex" data="01"/>
|
||||||
<value name="PanView.BackColor" type="dword" data="30ffffff"/>
|
<value name="PanView.BackColor" type="dword" data="30ffffff"/>
|
||||||
<value name="PanView.PFrame" type="dword" data="00000001"/>
|
<value name="PanView.PFrame" type="long" data="1"/>
|
||||||
<value name="PanView.PFrameColor" type="dword" data="28808080"/>
|
<value name="PanView.PFrameColor" type="dword" data="28808080"/>
|
||||||
<value name="PanView.SFrame" type="dword" data="00000001"/>
|
<value name="PanView.SFrame" type="long" data="1"/>
|
||||||
<value name="PanView.SFrameColor" type="dword" data="07c0c0c0"/>
|
<value name="PanView.SFrameColor" type="dword" data="07c0c0c0"/>
|
||||||
<value name="PanView.Thumbs.ImgSize" type="dword" data="00000060"/>
|
<value name="PanView.Thumbs.ImgSize" type="long" data="96"/>
|
||||||
<value name="PanView.Thumbs.SpaceX1" type="dword" data="00000001"/>
|
<value name="PanView.Thumbs.SpaceX1" type="long" data="1"/>
|
||||||
<value name="PanView.Thumbs.SpaceY1" type="dword" data="00000001"/>
|
<value name="PanView.Thumbs.SpaceY1" type="long" data="1"/>
|
||||||
<value name="PanView.Thumbs.SpaceX2" type="dword" data="00000005"/>
|
<value name="PanView.Thumbs.SpaceX2" type="long" data="5"/>
|
||||||
<value name="PanView.Thumbs.SpaceY2" type="dword" data="00000014"/>
|
<value name="PanView.Thumbs.SpaceY2" type="long" data="20"/>
|
||||||
<value name="PanView.Thumbs.LabelSpacing" type="dword" data="00000002"/>
|
<value name="PanView.Thumbs.LabelSpacing" type="long" data="2"/>
|
||||||
<value name="PanView.Thumbs.LabelPadding" type="dword" data="00000000"/>
|
<value name="PanView.Thumbs.LabelPadding" type="long" data="0"/>
|
||||||
<value name="PanView.Thumbs.FontName" type="string" data="Tahoma"/>
|
<value name="PanView.Thumbs.FontName" type="string" data="Tahoma"/>
|
||||||
<value name="PanView.Thumbs.FontHeight" type="dword" data="0000000e"/>
|
<value name="PanView.Thumbs.FontHeight" type="long" data="14"/>
|
||||||
<value name="PanView.Tiles.ImgSize" type="dword" data="00000030"/>
|
<value name="PanView.Tiles.ImgSize" type="long" data="48"/>
|
||||||
<value name="PanView.Tiles.SpaceX1" type="dword" data="00000004"/>
|
<value name="PanView.Tiles.SpaceX1" type="long" data="4"/>
|
||||||
<value name="PanView.Tiles.SpaceY1" type="dword" data="00000004"/>
|
<value name="PanView.Tiles.SpaceY1" type="long" data="4"/>
|
||||||
<value name="PanView.Tiles.SpaceX2" type="dword" data="000000ac"/>
|
<value name="PanView.Tiles.SpaceX2" type="long" data="172"/>
|
||||||
<value name="PanView.Tiles.SpaceY2" type="dword" data="00000004"/>
|
<value name="PanView.Tiles.SpaceY2" type="long" data="4"/>
|
||||||
<value name="PanView.Tiles.LabelSpacing" type="dword" data="00000004"/>
|
<value name="PanView.Tiles.LabelSpacing" type="long" data="4"/>
|
||||||
<value name="PanView.Tiles.LabelPadding" type="dword" data="00000001"/>
|
<value name="PanView.Tiles.LabelPadding" type="long" data="1"/>
|
||||||
<value name="PanView.Tiles.FontName" type="string" data="Tahoma"/>
|
<value name="PanView.Tiles.FontName" type="string" data="Tahoma"/>
|
||||||
<value name="PanView.Tiles.FontHeight" type="dword" data="0000000e"/>
|
<value name="PanView.Tiles.FontHeight" type="long" data="14"/>
|
||||||
<value name="PanView.LoadPreviews" type="hex" data="03"/>
|
<value name="PanView.LoadPreviews" type="hex" data="03"/>
|
||||||
<value name="PanView.LoadFolders" type="hex" data="01"/>
|
<value name="PanView.LoadFolders" type="hex" data="01"/>
|
||||||
<value name="PanView.LoadTimeout" type="dword" data="0000000f"/>
|
<value name="PanView.LoadTimeout" type="ulong" data="15"/>
|
||||||
<value name="PanView.MaxZoom" type="dword" data="00000258"/>
|
<value name="PanView.MaxZoom" type="ulong" data="600"/>
|
||||||
<value name="PanView.UsePicView2" type="hex" data="01"/>
|
<value name="PanView.UsePicView2" type="hex" data="01"/>
|
||||||
<value name="PanView.RestoreOnStartup" type="hex" data="00"/>
|
<value name="PanView.RestoreOnStartup" type="hex" data="00"/>
|
||||||
<value name="Update.VerLocation" type="string" data=""/>
|
<value name="Update.VerLocation" type="string" data=""/>
|
||||||
@ -483,89 +484,98 @@
|
|||||||
<value name="DndLKey" type="hex" data="00"/>
|
<value name="DndLKey" type="hex" data="00"/>
|
||||||
<value name="DndRKey" type="hex" data="a2"/>
|
<value name="DndRKey" type="hex" data="a2"/>
|
||||||
<value name="WndDragKey" type="dword" data="00121101"/>
|
<value name="WndDragKey" type="dword" data="00121101"/>
|
||||||
<key name="Tasks" modified="2015-11-24 14:43:35" build="151119">
|
<key name="Tasks" modified="2018-02-22 06:02:12" build="171109">
|
||||||
<value name="Count" type="dword" data="00000008"/>
|
<value name="Count" type="long" data="9"/>
|
||||||
<key name="Task1" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task1" modified="2018-02-22 06:02:12" build="171109">
|
||||||
<value name="Name" type="string" data="{cmd::Cmder as Admin}"/>
|
<value name="Name" type="string" data="{cmd::Cmder as Admin}"/>
|
||||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<value name="Cmd1" type="string" data="*cmd /k "%ConEmuDir%\..\init.bat" -new_console:d:%USERPROFILE%"/>
|
<value name="Cmd1" type="string" data="*cmd /k ""%ConEmuDir%\..\init.bat" ""/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task2" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task2" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{cmd::Cmder}"/>
|
<value name="Name" type="string" data="{cmd::Cmder}"/>
|
||||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<value name="Cmd1" type="string" data="cmd /k "%ConEmuDir%\..\init.bat" -new_console:d:%USERPROFILE%"/>
|
<value name="Cmd1" type="string" data="cmd /k ""%ConEmuDir%\..\init.bat" ""/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task3" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task3" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{Powershell::PowerShell as Admin}"/>
|
<value name="Name" type="string" data="{PowerShell::PowerShell as Admin}"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<value name="Cmd1" type="string" data="*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''" -new_console:d:"%USERPROFILE%""/>
|
<value name="Cmd1" type="string" data="*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression 'Import-Module ''%ConEmuDir%\..\profile.ps1'''""/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task4" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task4" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{Powershell::Powershell}"/>
|
<value name="Name" type="string" data="{PowerShell::PowerShell}"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<value name="Cmd1" type="string" data="PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''" -new_console:d:"%USERPROFILE%""/>
|
<value name="Cmd1" type="string" data="PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression 'Import-Module ''%ConEmuDir%\..\profile.ps1'''""/>
|
||||||
<value name="Cmd2" type="string" data="%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe"/>
|
<value name="Cmd2" type="string" data=""%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe""/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task5" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task5" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{bash::mintty as Admin}"/>
|
<value name="Name" type="string" data="{bash::mintty as Admin}"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="GuiArgs" type="string" data="/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico""/>
|
<value name="GuiArgs" type="string" data="/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico""/>
|
||||||
<value name="Cmd1" type="string" data="*%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe /bin/bash -l -new_console:d:%USERPROFILE%"/>
|
<value name="Cmd1" type="string" data="*"%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe" /bin/bash -l"/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task6" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task6" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{bash::mintty}"/>
|
<value name="Name" type="string" data="{bash::mintty}"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="GuiArgs" type="string" data="/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico""/>
|
<value name="GuiArgs" type="string" data="/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico""/>
|
||||||
<value name="Cmd1" type="string" data="%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe /bin/bash -l -new_console:d:%userProfile%"/>
|
<value name="Cmd1" type="string" data=""%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe" /bin/bash -l"/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
<value name="Cmd2" type="string" data="%CMDER_ROOT%vendor\git-for-windows\usr\bin\mintty.exe /bin/bash -l -new_console:d:%userProfile%"/>
|
<value name="Cmd2" type="string" data=""%CMDER_ROOT%vendor\git-for-windows\usr\bin\mintty.exe" /bin/bash -l"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task7" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task7" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{bash::bash as Admin}"/>
|
<value name="Name" type="string" data="{bash::bash as Admin}"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
<value name="Cmd1" type="string" data="*cmd /c "%ConEmuDir%\..\git-for-windows\bin\bash --login -i" -new_console:d:%USERPROFILE%"/>
|
<value name="Cmd1" type="string" data="*cmd /c ""%ConEmuDir%\..\git-for-windows\bin\bash" --login -i""/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task8" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Task8" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="{bash::bash}"/>
|
<value name="Name" type="string" data="{bash::bash}"/>
|
||||||
<value name="Flags" type="dword" data="00000000"/>
|
<value name="Flags" type="dword" data="00000000"/>
|
||||||
<value name="Hotkey" type="dword" data="00000000"/>
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<value name="Cmd1" type="string" data="cmd /c "%ConEmuDir%\..\git-for-windows\bin\bash --login -i" -new_console:d:%USERPROFILE%"/>
|
<value name="Cmd1" type="string" data="cmd /c ""%ConEmuDir%\..\git-for-windows\bin\bash" --login -i""/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="long" data="0"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
|
</key>
|
||||||
|
<key 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>
|
</key>
|
||||||
|
|
||||||
<key name="Apps" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Apps" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Count" type="dword" data="00000000"/>
|
<value name="Count" type="long" data="0"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Colors" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Colors" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<key name="Palette1" modified="2015-11-24 14:49:10" build="151119">
|
<key name="Palette1" modified="2018-02-22 06:05:13" build="171109">
|
||||||
<value name="Name" type="string" data="Monokai"/>
|
<value name="Name" type="string" data="Monokai"/>
|
||||||
<value name="ExtendColors" type="hex" data="00"/>
|
<value name="ExtendColors" type="hex" data="00"/>
|
||||||
<value name="ExtendColorIdx" type="hex" data="0e"/>
|
<value name="ExtendColorIdx" type="hex" data="0e"/>
|
||||||
@ -606,11 +616,11 @@
|
|||||||
<value name="ColorTable30" type="dword" data="0000ffff"/>
|
<value name="ColorTable30" type="dword" data="0000ffff"/>
|
||||||
<value name="ColorTable31" type="dword" data="00ffffff"/>
|
<value name="ColorTable31" type="dword" data="00ffffff"/>
|
||||||
</key>
|
</key>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="long" data="1"/>
|
||||||
</key>
|
</key>
|
||||||
<value name="OneTabPerGroup" type="hex" data="00"/>
|
<value name="OneTabPerGroup" type="hex" data="00"/>
|
||||||
<value name="ActivateSplitMouseOver" type="hex" data="01"/>
|
<value name="ActivateSplitMouseOver" type="hex" data="01"/>
|
||||||
<value name="TabBtnDblClick" type="dword" data="00000000"/>
|
<value name="TabBtnDblClick" type="ulong" data="0"/>
|
||||||
<value name="ConsoleExceptionHandler" type="hex" data="00"/>
|
<value name="ConsoleExceptionHandler" type="hex" data="00"/>
|
||||||
<value name="SaveCmdHistory" type="hex" data="00"/>
|
<value name="SaveCmdHistory" type="hex" data="00"/>
|
||||||
<value name="CTS.IBeam" type="hex" data="01"/>
|
<value name="CTS.IBeam" type="hex" data="01"/>
|
||||||
@ -664,9 +674,9 @@
|
|||||||
<value name="StatusBar.Hide.WVDC" type="hex" data="01"/>
|
<value name="StatusBar.Hide.WVDC" type="hex" data="01"/>
|
||||||
<value name="StatusBar.Hide.Zoom" type="hex" data="01"/>
|
<value name="StatusBar.Hide.Zoom" type="hex" data="01"/>
|
||||||
<value name="StatusBar.Hide.Dpi" type="hex" data="01"/>
|
<value name="StatusBar.Hide.Dpi" type="hex" data="01"/>
|
||||||
<value name="TabFlashChanged" type="dword" data="00000008"/>
|
<value name="TabFlashChanged" type="long" data="8"/>
|
||||||
<value name="TabModifiedSuffix" type="string" data="[*]"/>
|
<value name="TabModifiedSuffix" type="string" data="[*]"/>
|
||||||
<key name="HotKeys" modified="2015-11-24 14:43:35" build="151119">
|
<key name="HotKeys" modified="2018-02-22 06:02:12" build="171109">
|
||||||
<value name="KeyMacroVersion" type="hex" data="02"/>
|
<value name="KeyMacroVersion" type="hex" data="02"/>
|
||||||
<value name="Multi.Modifier" type="dword" data="00000011"/>
|
<value name="Multi.Modifier" type="dword" data="00000011"/>
|
||||||
<value name="Multi.ArrowsModifier" type="dword" data="0000005b"/>
|
<value name="Multi.ArrowsModifier" type="dword" data="0000005b"/>
|
||||||
@ -847,16 +857,51 @@
|
|||||||
<value name="Key.DebugProcess" type="dword" data="00105b44"/>
|
<value name="Key.DebugProcess" type="dword" data="00105b44"/>
|
||||||
<value name="Key.DumpProcess" type="dword" data="00000000"/>
|
<value name="Key.DumpProcess" type="dword" data="00000000"/>
|
||||||
<value name="Key.DumpTree" type="dword" data="00000000"/>
|
<value name="Key.DumpTree" type="dword" data="00000000"/>
|
||||||
|
<value name="Multi.SplitSwap" type="dword" data="00125d58"/>
|
||||||
|
<value name="Multi.SplitSwapU" type="dword" data="00125d26"/>
|
||||||
|
<value name="Multi.SplitSwapD" type="dword" data="00125d28"/>
|
||||||
|
<value name="Multi.SplitSwapL" type="dword" data="00125d25"/>
|
||||||
|
<value name="Multi.SplitSwapR" type="dword" data="00125d27"/>
|
||||||
|
<value name="Multi.GroupInputAll" type="dword" data="00105d47"/>
|
||||||
|
<value name="Multi.GroupInputKey" type="dword" data="00125d47"/>
|
||||||
|
<value name="Key.AltNumpad" type="dword" data="00000000"/>
|
||||||
|
<value name="Key.JumpActiveMonitor" type="dword" data="00000000"/>
|
||||||
|
<value name="Key.BufPrUp" type="dword" data="00121121"/>
|
||||||
|
<value name="Key.BufPrDn" type="dword" data="00121122"/>
|
||||||
|
<value name="Key.ResetTerm" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
<value name="StartCreateDelay" type="dword" data="00000064"/>
|
<value name="StartCreateDelay" type="ulong" data="100"/>
|
||||||
<value name="DefaultTerminalDebugLog" type="hex" data="00"/>
|
<value name="DefaultTerminalDebugLog" type="hex" data="00"/>
|
||||||
<value name="LastMonitor" type="string" data="0,0,1920,1020"/>
|
<value name="LastMonitor" type="string" data="0,0,1440,1050"/>
|
||||||
<value name="Restore2ActiveMon" type="hex" data="00"/>
|
<value name="Restore2ActiveMon" type="hex" data="00"/>
|
||||||
<value name="DownShowExOnTopMessage" type="hex" data="00"/>
|
<value name="DownShowExOnTopMessage" type="hex" data="00"/>
|
||||||
<value name="EnvironmentSet" type="multi"/>
|
<value name="EnvironmentSet" type="multi">
|
||||||
|
<line data="set PATH=%ConEmuBaseDir%\Scripts;%PATH%"/>
|
||||||
|
</value>
|
||||||
<value name="Update.InetTool" type="hex" data="00"/>
|
<value name="Update.InetTool" type="hex" data="00"/>
|
||||||
<value name="Update.InetToolCmd" type="string" data=""/>
|
<value name="Update.InetToolCmd" type="string" data=""/>
|
||||||
<value name="SuppressBells" type="hex" data="01"/>
|
<value name="SuppressBells" type="hex" data="01"/>
|
||||||
|
<value name="ClipboardAllLinesPosix" type="hex" data="00"/>
|
||||||
|
<value name="ClipboardFirstLinePosix" type="hex" data="00"/>
|
||||||
|
<value name="VividColors" type="hex" data="01"/>
|
||||||
|
<value name="AnsiExecution" type="hex" data="01"/>
|
||||||
|
<value name="AnsiAllowedCommands" type="multi">
|
||||||
|
<line data="cmd -cur_console:R /cGitShowBranch.cmd"/>
|
||||||
|
</value>
|
||||||
|
<value name="KillSshAgent" type="hex" data="01"/>
|
||||||
|
<value name="ProcessCtrlZ" type="hex" data="00"/>
|
||||||
|
<value name="JumpListAutoUpdate" type="hex" data="01"/>
|
||||||
|
<value name="CompressLongStrings" type="hex" data="01"/>
|
||||||
|
<value name="DynamicBufferHeight" type="hex" data="01"/>
|
||||||
|
<value name="CTS.ResetOnRelease" type="hex" data="00"/>
|
||||||
|
<value name="CTS.EraseBeforeReset" type="hex" data="01"/>
|
||||||
|
<value name="Anti-aliasing2" type="hex" data="00"/>
|
||||||
|
<value name="UseAltGrayPlus" type="hex" data="01"/>
|
||||||
|
<value name="MouseDragWindow" type="hex" data="01"/>
|
||||||
|
<value name="DebugLog" type="hex" data="00"/>
|
||||||
|
<value name="StatusBar.Hide.TMode" type="hex" data="01"/>
|
||||||
|
<value name="StatusBar.Hide.RMode" type="hex" data="01"/>
|
||||||
|
<value name="StatusBar.Hide.CellI" type="hex" data="01"/>
|
||||||
</key>
|
</key>
|
||||||
</key>
|
</key>
|
||||||
</key>
|
</key>
|
46
bin/alias.bat → vendor/bin/alias.cmd
vendored
46
bin/alias.bat → vendor/bin/alias.cmd
vendored
@ -1,8 +1,8 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
|
|
||||||
if "%aliases%" == "" (
|
if "%ALIASES%" == "" (
|
||||||
set ALIASES=%CMDER_ROOT%\config\user-aliases.cmd
|
set ALIASES="%CMDER_ROOT%\config\user_aliases.cmd"
|
||||||
)
|
)
|
||||||
|
|
||||||
setlocal enabledelayedexpansion
|
setlocal enabledelayedexpansion
|
||||||
@ -21,7 +21,7 @@ goto parseargument
|
|||||||
set currentarg=%~1
|
set currentarg=%~1
|
||||||
|
|
||||||
if /i "%currentarg%" equ "/f" (
|
if /i "%currentarg%" equ "/f" (
|
||||||
set aliases=%~2
|
set ALIASES=%~2
|
||||||
shift
|
shift
|
||||||
goto :do_shift
|
goto :do_shift
|
||||||
) else if /i "%currentarg%" == "/reload" (
|
) else if /i "%currentarg%" == "/reload" (
|
||||||
@ -40,7 +40,7 @@ goto parseargument
|
|||||||
) else if "%currentarg%" neq "" (
|
) else if "%currentarg%" neq "" (
|
||||||
if "%~2" equ "" (
|
if "%~2" equ "" (
|
||||||
:: Show the specified alias
|
:: Show the specified alias
|
||||||
doskey /macros | findstr /b %currentarg%= && exit /b
|
doskey /macros | %WINDIR%\System32\findstr /b %currentarg%= && exit /b
|
||||||
echo insufficient parameters.
|
echo insufficient parameters.
|
||||||
goto :p_help
|
goto :p_help
|
||||||
) else (
|
) else (
|
||||||
@ -50,21 +50,21 @@ goto parseargument
|
|||||||
)
|
)
|
||||||
rem #endregion parseargument
|
rem #endregion parseargument
|
||||||
|
|
||||||
if "%aliases%" neq "%CMDER_ROOT%\config\user-aliases.cmd" (
|
if "%ALIASES%" neq "%CMDER_ROOT%\config\user_aliases.cmd" (
|
||||||
set _x=!_x:/f %aliases% =!
|
set _x=!_x:/f "%ALIASES%" =!
|
||||||
|
|
||||||
if not exist "%aliases%" (
|
if not exist "%ALIASES%" (
|
||||||
echo ;= @echo off>"%aliases%"
|
echo ;= @echo off>"%ALIASES%"
|
||||||
echo ;= rem Call DOSKEY and use this file as the macrofile>>"%aliases%"
|
echo ;= rem Call DOSKEY and use this file as the macrofile>>"%ALIASES%"
|
||||||
echo ;= %%SystemRoot%%\system32\doskey /listsize=1000 /macrofile=%%0%%>>"%aliases%"
|
echo ;= %%SystemRoot%%\system32\doskey /listsize=1000 /macrofile=%%0%%>>"%ALIASES%"
|
||||||
echo ;= rem In batch mode, jump to the end of the file>>"%aliases%"
|
echo ;= rem In batch mode, jump to the end of the file>>"%ALIASES%"
|
||||||
echo ;= goto:eof>>"%aliases%"
|
echo ;= goto:eof>>"%ALIASES%"
|
||||||
echo ;= Add aliases below here>>"%aliases%"
|
echo ;= Add aliases below here>>"%ALIASES%"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
:: validate alias
|
:: validate alias
|
||||||
for /f "delims== tokens=1,2 usebackq" %%G in (`echo "%_x%"`) do (
|
for /f "delims== tokens=1,* usebackq" %%G in (`echo "%_x%"`) do (
|
||||||
set alias_name=%%G
|
set alias_name=%%G
|
||||||
set alias_value=%%H
|
set alias_value=%%H
|
||||||
)
|
)
|
||||||
@ -85,7 +85,7 @@ if not ["%_temp%"] == ["%alias_name%"] (
|
|||||||
)
|
)
|
||||||
|
|
||||||
:: replace already defined alias
|
:: replace already defined alias
|
||||||
findstr /b /v /i "%alias_name%=" "%ALIASES%" >> "%ALIASES%.tmp"
|
%WINDIR%\System32\findstr /b /v /i "%alias_name%=" "%ALIASES%" >> "%ALIASES%.tmp"
|
||||||
echo %alias_name%=%alias_value% >> "%ALIASES%.tmp" && type "%ALIASES%.tmp" > "%ALIASES%" & @del /f /q "%ALIASES%.tmp"
|
echo %alias_name%=%alias_value% >> "%ALIASES%.tmp" && type "%ALIASES%.tmp" > "%ALIASES%" & @del /f /q "%ALIASES%.tmp"
|
||||||
doskey /macrofile="%ALIASES%"
|
doskey /macrofile="%ALIASES%"
|
||||||
endlocal
|
endlocal
|
||||||
@ -93,10 +93,10 @@ exit /b
|
|||||||
|
|
||||||
:p_del
|
:p_del
|
||||||
set del_alias=%~1
|
set del_alias=%~1
|
||||||
findstr /b /v /i "%del_alias%=" "%ALIASES%" >> "%ALIASES%.tmp"
|
%WINDIR%\System32\findstr /b /v /i "%del_alias%=" "%ALIASES%" >> "%ALIASES%.tmp"
|
||||||
type "%ALIASES%".tmp > "%ALIASES%" & @del /f /q "%ALIASES%.tmp"
|
type "%ALIASES%".tmp > "%ALIASES%" & @del /f /q "%ALIASES%.tmp"
|
||||||
doskey %del_alias%=
|
doskey %del_alias%=
|
||||||
doskey /macrofile=%ALIASES%
|
doskey /macrofile="%ALIASES%"
|
||||||
goto:eof
|
goto:eof
|
||||||
|
|
||||||
:p_reload
|
:p_reload
|
||||||
@ -105,21 +105,21 @@ echo Aliases reloaded
|
|||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:p_show
|
:p_show
|
||||||
doskey /macros|findstr /v /r "^;=" | sort
|
doskey /macros|%WINDIR%\System32\findstr /v /r "^;=" | sort
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:p_help
|
:p_help
|
||||||
echo.Usage:
|
echo.Usage:
|
||||||
echo.
|
echo.
|
||||||
echo. alias [options] [alias=full command]
|
echo. alias [options] [alias=full command]
|
||||||
echo.
|
echo.
|
||||||
echo.Options:
|
echo.Options:
|
||||||
echo.
|
echo.
|
||||||
echo. /d [alias] Delete an [alias].
|
echo. /d [alias] Delete an [alias].
|
||||||
echo. /f [macrofile] Path to the [macrofile] you want to store the new alias in.
|
echo. /f [macrofile] Path to the [macrofile] you want to store the new alias in.
|
||||||
echo. Default: %cmder_root%\config\user-aliases.cmd
|
echo. Default: %cmder_root%\config\user_aliases.cmd
|
||||||
echo. /reload Reload the aliases file. Can be used with /f argument.
|
echo. /reload Reload the aliases file. Can be used with /f argument.
|
||||||
echo. Default: %cmder_root%\config\user-aliases.cmd
|
echo. Default: %cmder_root%\config\user_aliases.cmd
|
||||||
echo.
|
echo.
|
||||||
echo. If alias is called with no parameters, it will display the list of existing aliases.
|
echo. If alias is called with no parameters, it will display the list of existing aliases.
|
||||||
echo.
|
echo.
|
135
vendor/bin/cexec.cmd
vendored
Normal file
135
vendor/bin/cexec.cmd
vendored
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
@echo off
|
||||||
|
setlocal
|
||||||
|
|
||||||
|
if "%~1" equ "" goto :wrongSyntax
|
||||||
|
|
||||||
|
if not defined CMDER_USER_FLAGS (
|
||||||
|
:: in case nothing was passed to %CMDER_USER_FLAGS%
|
||||||
|
set "CMDER_USER_FLAGS= "
|
||||||
|
)
|
||||||
|
|
||||||
|
set "feNot=false"
|
||||||
|
goto :parseArgument
|
||||||
|
|
||||||
|
:doShift
|
||||||
|
shift
|
||||||
|
|
||||||
|
:parseArgument
|
||||||
|
set "currenArgu=%~1"
|
||||||
|
if /i "%currenArgu%" equ "/setPath" (
|
||||||
|
:: set %flag_exists% shortcut
|
||||||
|
endlocal
|
||||||
|
set "ccall=call %~dp0cexec.cmd"
|
||||||
|
set "cexec=%~dp0cexec.cmd"
|
||||||
|
) else if /i "%currenArgu%" == "/?" (
|
||||||
|
goto :help
|
||||||
|
) else if /i "%currenArgu%" equ "/help" (
|
||||||
|
goto :help
|
||||||
|
) else if /i "%currenArgu%" equ "/h" (
|
||||||
|
goto :help
|
||||||
|
) else if /i "%currenArgu%" equ "NOT" (
|
||||||
|
set "feNot=true"
|
||||||
|
goto :doShift
|
||||||
|
) else (
|
||||||
|
if "%~1" equ "" goto :wrongSyntax
|
||||||
|
if "%~2" equ "" goto :wrongSyntax
|
||||||
|
set "feFlagName=%~1"
|
||||||
|
set "feCommand=%~2"
|
||||||
|
if not "%~3" equ "" (
|
||||||
|
set "feParam=%~3"
|
||||||
|
)
|
||||||
|
goto :detect
|
||||||
|
)
|
||||||
|
|
||||||
|
:detect
|
||||||
|
:: to avoid erroneous deteciton like "/do" "/doNOT", which both have a "/do"
|
||||||
|
:: we added a space after the flag name, like "/do ", which won't match "/doN"
|
||||||
|
set "feFlagName=%feFlagName% "
|
||||||
|
:: echo.
|
||||||
|
:: echo %CMDER_USER_FLAGS%
|
||||||
|
:: echo %feNOT%
|
||||||
|
:: echo %feFlagName%
|
||||||
|
:: echo %feCommand%
|
||||||
|
:: echo %feParam%
|
||||||
|
:: echo.
|
||||||
|
echo %CMDER_USER_FLAGS% | %WINDIR%\System32\find /i "%feFlagName%">nul
|
||||||
|
if "%ERRORLEVEL%" == "0" (
|
||||||
|
if "%feNOT%" == "false" (
|
||||||
|
endlocal && call %feCommand% %feParam%
|
||||||
|
exit /b 0
|
||||||
|
)
|
||||||
|
) else (
|
||||||
|
if "%feNOT%" == "true" (
|
||||||
|
endlocal && call %feCommand% %feParam%
|
||||||
|
exit /b 0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
endlocal
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:wrongSyntax
|
||||||
|
echo The syntax of the command is incorrect.
|
||||||
|
echo.
|
||||||
|
echo use /? for help
|
||||||
|
echo.
|
||||||
|
endlocal
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:help
|
||||||
|
echo.
|
||||||
|
echo CExec - Conditional Exec
|
||||||
|
echo.
|
||||||
|
echo Handles with custom arguments for cmder's init.bat.
|
||||||
|
echo written by xiazeyu, inspired DRSDavidSoft.
|
||||||
|
echo.
|
||||||
|
echo Usage:
|
||||||
|
echo.
|
||||||
|
echo cexec /setPath [NOT] flagName command/program [parameters]
|
||||||
|
echo.
|
||||||
|
echo /setPath Generate a global varibles %%ccall%% and %%cexec%% for
|
||||||
|
echo quicker use. Following arguments will be ignored.
|
||||||
|
echo.
|
||||||
|
echo NOT Specifies that cexec should carry out
|
||||||
|
echo the command only if the flag is missing.
|
||||||
|
echo.
|
||||||
|
echo /[flagName] Specifies which flag name is to detect. It's recommand
|
||||||
|
echo to use a pair of double quotation marks to wrap
|
||||||
|
echo your flag name to avoid exceed expectation.
|
||||||
|
echo.
|
||||||
|
echo command/program Specifies the command to carry out if the
|
||||||
|
echo argument name is detected. It's recommand to
|
||||||
|
echo use a pair of double quotation marks to
|
||||||
|
echo wrap your command to avoid exceed expectation.
|
||||||
|
echo.
|
||||||
|
echo parameters These are the parameters passed to the command/program.
|
||||||
|
echo It's recommand to use a pair of double quotation marks
|
||||||
|
echo to wrap your flag name to avoid exceed expectation.
|
||||||
|
echo.
|
||||||
|
echo Examples:
|
||||||
|
echo.
|
||||||
|
echo These examples are expected to be written in %cmder_root%/config/user-profile.cmd
|
||||||
|
echo CExec evaluates the environment varible "CMDER_USER_FLAGS" and conditionally
|
||||||
|
echo caries out actions based on flags that are passed.
|
||||||
|
echo.
|
||||||
|
echo Case 1:
|
||||||
|
echo.
|
||||||
|
echo The following command in `user_profile.cmd` would execute "notepad.exe" and continue running the `user_profile.cmd`
|
||||||
|
echo.
|
||||||
|
echo "%ccall%" "/startNotepad" "start" "notepad.exe"
|
||||||
|
echo.
|
||||||
|
echo If you pass parameter to init.bat like:
|
||||||
|
echo.
|
||||||
|
echo init.bat /startNotepad
|
||||||
|
echo.
|
||||||
|
echo Case 2:
|
||||||
|
echo.
|
||||||
|
echo The following command in `user_profile.cmd` would execute "notepad.exe" and stop running the `user_profile.cmd`
|
||||||
|
echo.
|
||||||
|
echo "%cexec%" NOT "/dontStartNotepad" "start" "notepad.exe"
|
||||||
|
echo.
|
||||||
|
echo UNLESS you pass parameter to init.bat like:
|
||||||
|
echo.
|
||||||
|
echo init.bat /dontStartNotepad
|
||||||
|
echo.
|
||||||
|
endlocal
|
||||||
|
exit /b
|
41
vendor/bin/cmder_diag.cmd
vendored
Normal file
41
vendor/bin/cmder_diag.cmd
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
echo ------------------------------------
|
||||||
|
echo dir "%cmder_root%"
|
||||||
|
echo ------------------------------------
|
||||||
|
dir "%cmder_root%"
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ------------------------------------
|
||||||
|
echo dir "%cmder_root%\vendor"
|
||||||
|
echo ------------------------------------
|
||||||
|
dir "%cmder_root%\vendor"
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ------------------------------------
|
||||||
|
echo dir /s "%cmder_root%\bin"
|
||||||
|
echo ------------------------------------
|
||||||
|
dir /s "%cmder_root%\bin"
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ------------------------------------
|
||||||
|
echo dir /s "%cmder_root%\config"
|
||||||
|
echo ------------------------------------
|
||||||
|
dir /s "%cmder_root%\config"
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ------------------------------------
|
||||||
|
echo set
|
||||||
|
echo ------------------------------------
|
||||||
|
set
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ------------------------------------
|
||||||
|
echo where git
|
||||||
|
echo ------------------------------------
|
||||||
|
where git
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ------------------------------------
|
||||||
|
echo Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!
|
||||||
|
echo ------------------------------------
|
39
vendor/bin/cmder_diag.ps1
vendored
Normal file
39
vendor/bin/cmder_diag.ps1
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
write-host ------------------------------------
|
||||||
|
write-host get-childitem "$env:CMDER_ROOT"
|
||||||
|
write-host ------------------------------------
|
||||||
|
get-childitem "$env:CMDER_ROOT"
|
||||||
|
|
||||||
|
write-host ''
|
||||||
|
write-host ------------------------------------
|
||||||
|
write-host get-childitem "$env:CMDER_ROOT/vendor"
|
||||||
|
write-host ------------------------------------
|
||||||
|
get-childitem "$env:CMDER_ROOT/vendor"
|
||||||
|
|
||||||
|
write-host ''
|
||||||
|
write-host ------------------------------------
|
||||||
|
write-host get-childitem -s "$env:CMDER_ROOT/bin"
|
||||||
|
write-host ------------------------------------
|
||||||
|
get-childitem -s "$env:CMDER_ROOT/bin"
|
||||||
|
|
||||||
|
write-host ''
|
||||||
|
write-host ------------------------------------
|
||||||
|
write-host get-childitem -s "$env:CMDER_ROOT/config"
|
||||||
|
write-host ------------------------------------
|
||||||
|
get-childitem -s "$env:CMDER_ROOT/config"
|
||||||
|
|
||||||
|
write-host ''
|
||||||
|
write-host ------------------------------------
|
||||||
|
write-host get-childitem env:
|
||||||
|
write-host ------------------------------------
|
||||||
|
get-childitem env: |ft -autosize -wrap
|
||||||
|
|
||||||
|
write-host ''
|
||||||
|
write-host ------------------------------------
|
||||||
|
write-host get-command git
|
||||||
|
write-host ------------------------------------
|
||||||
|
get-command git
|
||||||
|
|
||||||
|
write-host ''
|
||||||
|
write-host ------------------------------------
|
||||||
|
write-host Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!
|
||||||
|
write-host ------------------------------------
|
39
vendor/bin/cmder_diag.sh
vendored
Normal file
39
vendor/bin/cmder_diag.sh
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
echo ------------------------------------
|
||||||
|
echo ls -la "$CMDER_ROOT"
|
||||||
|
echo ------------------------------------
|
||||||
|
ls -la "$CMDER_ROOT"
|
||||||
|
|
||||||
|
echo ''
|
||||||
|
echo ------------------------------------
|
||||||
|
echo ls -la "$CMDER_ROOT/vendor"
|
||||||
|
echo ------------------------------------
|
||||||
|
ls -la "$CMDER_ROOT/vendor"
|
||||||
|
|
||||||
|
echo ''
|
||||||
|
echo ------------------------------------
|
||||||
|
echo ls -la /s "$CMDER_ROOT/bin"
|
||||||
|
echo ------------------------------------
|
||||||
|
ls -laR /s "$CMDER_ROOT/bin"
|
||||||
|
|
||||||
|
echo ''
|
||||||
|
echo ------------------------------------
|
||||||
|
echo ls -la /s "$CMDER_ROOT/config"
|
||||||
|
echo ------------------------------------
|
||||||
|
ls -laR /s "$CMDER_ROOT/config"
|
||||||
|
|
||||||
|
echo ''
|
||||||
|
echo ------------------------------------
|
||||||
|
echo env
|
||||||
|
echo ------------------------------------
|
||||||
|
env
|
||||||
|
|
||||||
|
echo ''
|
||||||
|
echo ------------------------------------
|
||||||
|
echo which git
|
||||||
|
echo ------------------------------------
|
||||||
|
which git
|
||||||
|
|
||||||
|
echo ''
|
||||||
|
echo ------------------------------------
|
||||||
|
echo Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!
|
||||||
|
echo ------------------------------------
|
22
vendor/bin/timer.cmd
vendored
Normal file
22
vendor/bin/timer.cmd
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
set start=%~1
|
||||||
|
set end=%~2
|
||||||
|
|
||||||
|
set options="tokens=1-4 delims=:.,"
|
||||||
|
for /f %options% %%a in ("%start%") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100
|
||||||
|
for /f %options% %%a in ("%end%") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100
|
||||||
|
|
||||||
|
set /a hours=%end_h%-%start_h%
|
||||||
|
set /a mins=%end_m%-%start_m%
|
||||||
|
set /a secs=%end_s%-%start_s%
|
||||||
|
set /a ms=%end_ms%-%start_ms%
|
||||||
|
if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms%
|
||||||
|
if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs%
|
||||||
|
if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins%
|
||||||
|
if %hours% lss 0 set /a hours = 24%hours%
|
||||||
|
if 1%ms% lss 100 set ms=0%ms%
|
||||||
|
|
||||||
|
:: Mission accomplished
|
||||||
|
set /a totalsecs = %hours%*3600 + %mins%*60 + %secs%
|
||||||
|
echo Elapsed Time: %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)
|
324
vendor/clink.lua
vendored
324
vendor/clink.lua
vendored
@ -3,9 +3,10 @@
|
|||||||
-- !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
-- !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||||
-- !!! Use "%CMDER_ROOT%\config\<whatever>.lua" to add your lua startup scripts
|
-- !!! Use "%CMDER_ROOT%\config\<whatever>.lua" to add your lua startup scripts
|
||||||
|
|
||||||
|
-- luacheck: globals clink
|
||||||
|
|
||||||
-- At first, load the original clink.lua file
|
-- At first, load the original clink.lua file
|
||||||
-- this is needed as we set the script path to this dir and therefore the original
|
-- this is needed as we set the script path to this dir and therefore the original
|
||||||
-- clink.lua is not loaded.
|
-- clink.lua is not loaded.
|
||||||
local clink_lua_file = clink.get_env('CMDER_ROOT')..'\\vendor\\clink\\clink.lua'
|
local clink_lua_file = clink.get_env('CMDER_ROOT')..'\\vendor\\clink\\clink.lua'
|
||||||
dofile(clink_lua_file)
|
dofile(clink_lua_file)
|
||||||
@ -13,26 +14,60 @@ dofile(clink_lua_file)
|
|||||||
-- now add our own things...
|
-- now add our own things...
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Setting the prompt in clink means that commands which rewrite the prompt do
|
-- Makes a string safe to use as the replacement in string.gsub
|
||||||
-- not destroy our own prompt. It also means that started cmds (or batch files
|
|
||||||
-- which echo) don't get the ugly '{lamb}' shown.
|
|
||||||
---
|
---
|
||||||
function set_prompt_filter()
|
local function verbatim(s)
|
||||||
-- orig: $E[1;32;40m$P$S{git}{hg}$S$_$E[1;30;40m{lamb}$S$E[0m
|
s = string.gsub(s, "%%", "%%%%")
|
||||||
-- color codes: "\x1b[1;37;40m"
|
return s
|
||||||
cwd = clink.get_cwd()
|
|
||||||
prompt = "\x1b[1;32;40m{cwd} {git}{hg} \n\x1b[1;30;40m{lamb} \x1b[0m"
|
|
||||||
new_value = string.gsub(prompt, "{cwd}", cwd)
|
|
||||||
clink.prompt.value = string.gsub(new_value, "{lamb}", "λ")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Resolves closest directory location for specified directory.
|
-- Setting the prompt in clink means that commands which rewrite the prompt do
|
||||||
-- Navigates subsequently up one level and tries to find specified directory
|
-- not destroy our own prompt. It also means that started cmds (or batch files
|
||||||
-- @param {string} path Path to directory will be checked. If not provided
|
-- which echo) don't get the ugly '{lamb}' shown.
|
||||||
-- current directory will be used
|
---
|
||||||
-- @param {string} dirname Directory name to search for
|
local function set_prompt_filter()
|
||||||
-- @return {string} Path to specified directory or nil if such dir not found
|
-- get_cwd() is differently encoded than the clink.prompt.value, so everything other than
|
||||||
|
-- pure ASCII will get garbled. So try to parse the current directory from the original prompt
|
||||||
|
-- and only if that doesn't work, use get_cwd() directly.
|
||||||
|
-- The matching relies on the default prompt which ends in X:\PATH\PATH>
|
||||||
|
-- (no network path possible here!)
|
||||||
|
local old_prompt = clink.prompt.value
|
||||||
|
local cwd = old_prompt:match('.*(.:[^>]*)>')
|
||||||
|
if cwd == nil then cwd = clink.get_cwd() end
|
||||||
|
|
||||||
|
-- environment systems like pythons virtualenv change the PROMPT and usually
|
||||||
|
-- set some variable. But the variables are differently named and we would never
|
||||||
|
-- get them all, so try to parse the env name out of the PROMPT.
|
||||||
|
-- envs are usually put in round or square parentheses and before the old prompt
|
||||||
|
local env = old_prompt:match('.*%(([^%)]+)%).+:')
|
||||||
|
-- also check for square brackets
|
||||||
|
if env == nil then env = old_prompt:match('.*%[([^%]]+)%].+:') end
|
||||||
|
|
||||||
|
-- build our own prompt
|
||||||
|
-- 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 = "λ"
|
||||||
|
cmder_prompt = string.gsub(cmder_prompt, "{cwd}", verbatim(cwd))
|
||||||
|
|
||||||
|
if env ~= nil then
|
||||||
|
lambda = "("..env..") "..lambda
|
||||||
|
end
|
||||||
|
clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", verbatim(lambda))
|
||||||
|
end
|
||||||
|
|
||||||
|
local function percent_prompt_filter()
|
||||||
|
clink.prompt.value = string.gsub(clink.prompt.value, "{percent}", "%%")
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Resolves closest directory location for specified directory.
|
||||||
|
-- Navigates subsequently up one level and tries to find specified directory
|
||||||
|
-- @param {string} path Path to directory will be checked. If not provided
|
||||||
|
-- current directory will be used
|
||||||
|
-- @param {string} dirname Directory name to search for
|
||||||
|
-- @return {string} Path to specified directory or nil if such dir not found
|
||||||
local function get_dir_contains(path, dirname)
|
local function get_dir_contains(path, dirname)
|
||||||
|
|
||||||
-- return parent path for specified entry (either file or directory)
|
-- return parent path for specified entry (either file or directory)
|
||||||
@ -77,10 +112,6 @@ local function get_dir_contains(path, dirname)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_hg_dir(path)
|
|
||||||
return get_dir_contains(path, '.hg')
|
|
||||||
end
|
|
||||||
|
|
||||||
-- adapted from from clink-completions' git.lua
|
-- adapted from from clink-completions' git.lua
|
||||||
local function get_git_dir(path)
|
local function get_git_dir(path)
|
||||||
|
|
||||||
@ -91,12 +122,13 @@ local function get_git_dir(path)
|
|||||||
if i then
|
if i then
|
||||||
prefix = path:sub(1, i-1)
|
prefix = path:sub(1, i-1)
|
||||||
end
|
end
|
||||||
|
|
||||||
return prefix
|
return prefix
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Checks if provided directory contains git directory
|
-- Checks if provided directory contains git directory
|
||||||
local function has_git_dir(dir)
|
local function has_git_dir(dir)
|
||||||
return #clink.find_dirs(dir..'/.git') > 0 and dir..'/.git'
|
return clink.is_dir(dir..'/.git') and dir..'/.git'
|
||||||
end
|
end
|
||||||
|
|
||||||
local function has_git_file(dir)
|
local function has_git_file(dir)
|
||||||
@ -122,67 +154,20 @@ local function get_git_dir(path)
|
|||||||
or (parent_path ~= path and get_git_dir(parent_path) or nil)
|
or (parent_path ~= path and get_git_dir(parent_path) or nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
---
|
local function get_hg_dir(path)
|
||||||
-- Find out current branch
|
return get_dir_contains(path, '.hg')
|
||||||
-- @return {false|mercurial branch name}
|
end
|
||||||
---
|
|
||||||
function get_hg_branch()
|
|
||||||
for line in io.popen("hg branch 2>nul"):lines() do
|
|
||||||
local m = line:match("(.+)$")
|
|
||||||
if m then
|
|
||||||
return m
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return false
|
local function get_svn_dir(path)
|
||||||
|
return get_dir_contains(path, '.svn')
|
||||||
end
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Get the status of working dir
|
-- Find out current branch
|
||||||
-- @return {bool}
|
-- @return {nil|git branch name}
|
||||||
---
|
---
|
||||||
function get_hg_status()
|
local function get_git_branch(git_dir)
|
||||||
for line in io.popen("hg status"):lines() do
|
git_dir = git_dir or get_git_dir()
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
function hg_prompt_filter()
|
|
||||||
|
|
||||||
-- Colors for mercurial status
|
|
||||||
local colors = {
|
|
||||||
clean = "\x1b[1;37;40m",
|
|
||||||
dirty = "\x1b[31;1m",
|
|
||||||
}
|
|
||||||
|
|
||||||
if get_hg_dir() then
|
|
||||||
-- if we're inside of mercurial repo then try to detect current branch
|
|
||||||
local branch = get_hg_branch()
|
|
||||||
if branch then
|
|
||||||
-- Has branch => therefore it is a mercurial folder, now figure out status
|
|
||||||
if get_hg_status() then
|
|
||||||
color = colors.clean
|
|
||||||
else
|
|
||||||
color = colors.dirty
|
|
||||||
end
|
|
||||||
|
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", color.."("..branch..")")
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- No mercurial present or not in mercurial file
|
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", "")
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
---
|
|
||||||
-- Find out current branch
|
|
||||||
-- @return {nil|git branch name}
|
|
||||||
---
|
|
||||||
function get_git_branch(git_dir)
|
|
||||||
local git_dir = git_dir or get_git_dir()
|
|
||||||
|
|
||||||
-- If git directory not found then we're probably outside of repo
|
-- If git directory not found then we're probably outside of repo
|
||||||
-- or something went wrong. The same is when head_file is nil
|
-- or something went wrong. The same is when head_file is nil
|
||||||
@ -195,44 +180,129 @@ function get_git_branch(git_dir)
|
|||||||
-- if HEAD matches branch expression, then we're on named branch
|
-- if HEAD matches branch expression, then we're on named branch
|
||||||
-- otherwise it is a detached commit
|
-- otherwise it is a detached commit
|
||||||
local branch_name = HEAD:match('ref: refs/heads/(.+)')
|
local branch_name = HEAD:match('ref: refs/heads/(.+)')
|
||||||
|
|
||||||
return branch_name or 'HEAD detached at '..HEAD:sub(1, 7)
|
return branch_name or 'HEAD detached at '..HEAD:sub(1, 7)
|
||||||
end
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Get the status of working dir
|
-- Find out current branch
|
||||||
-- @return {bool}
|
-- @return {false|mercurial branch name}
|
||||||
---
|
---
|
||||||
function get_git_status()
|
local function get_hg_branch()
|
||||||
local file = io.popen("git status --no-lock-index --porcelain 2>nul")
|
for line in io.popen("hg branch 2>nul"):lines() do
|
||||||
|
local m = line:match("(.+)$")
|
||||||
|
if m then
|
||||||
|
return m
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Find out current branch
|
||||||
|
-- @return {false|svn branch name}
|
||||||
|
---
|
||||||
|
local function get_svn_branch(svn_dir)
|
||||||
|
for line in io.popen("svn info 2>nul"):lines() do
|
||||||
|
local m = line:match("^Relative URL:")
|
||||||
|
if m then
|
||||||
|
return line:sub(line:find("/")+1,line:len())
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Get the status of working dir
|
||||||
|
-- @return {bool}
|
||||||
|
---
|
||||||
|
local function get_git_status()
|
||||||
|
local file = io.popen("git --no-optional-locks status --porcelain 2>nul")
|
||||||
for line in file:lines() do
|
for line in file:lines() do
|
||||||
file:close()
|
file:close()
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
file:close()
|
file:close()
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
function git_prompt_filter()
|
---
|
||||||
|
-- Gets the conflict status
|
||||||
|
-- @return {bool} indicating true for conflict, false for no conflicts
|
||||||
|
---
|
||||||
|
function get_git_conflict()
|
||||||
|
local file = io.popen("git diff --name-only --diff-filter=U 2>nul")
|
||||||
|
for line in file:lines() do
|
||||||
|
file:close()
|
||||||
|
return true;
|
||||||
|
end
|
||||||
|
file:close()
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Get the status of working dir
|
||||||
|
-- @return {bool}
|
||||||
|
---
|
||||||
|
local function get_hg_status()
|
||||||
|
local file = io.popen("hg status -0")
|
||||||
|
for line in file:lines() do
|
||||||
|
file:close()
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
file:close()
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Get the status of working dir
|
||||||
|
-- @return {bool}
|
||||||
|
---
|
||||||
|
local function get_svn_status()
|
||||||
|
local file = io.popen("svn status -q")
|
||||||
|
for line in file:lines() do
|
||||||
|
file:close()
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
file:close()
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local function git_prompt_filter()
|
||||||
|
|
||||||
-- Colors for git status
|
-- Colors for git status
|
||||||
local colors = {
|
local colors = {
|
||||||
clean = "\x1b[1;37;40m",
|
clean = "\x1b[1;37;40m",
|
||||||
dirty = "\x1b[31;1m",
|
dirty = "\x1b[33;3m",
|
||||||
|
conflict = "\x1b[31;1m"
|
||||||
}
|
}
|
||||||
|
|
||||||
local git_dir = get_git_dir()
|
local git_dir = get_git_dir()
|
||||||
if git_dir then
|
if git_dir then
|
||||||
-- if we're inside of git repo then try to detect current branch
|
-- if we're inside of git repo then try to detect current branch
|
||||||
local branch = get_git_branch(git_dir)
|
local branch = get_git_branch(git_dir)
|
||||||
|
local color
|
||||||
if branch then
|
if branch then
|
||||||
-- Has branch => therefore it is a git folder, now figure out status
|
-- Has branch => therefore it is a git folder, now figure out status
|
||||||
if get_git_status() then
|
local gitStatus = get_git_status()
|
||||||
|
local gitConflict = get_git_conflict()
|
||||||
|
|
||||||
|
color = colors.dirty
|
||||||
|
if gitStatus then
|
||||||
color = colors.clean
|
color = colors.clean
|
||||||
else
|
|
||||||
color = colors.dirty
|
|
||||||
end
|
end
|
||||||
|
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", color.."("..branch..")")
|
if gitConflict then
|
||||||
|
color = colors.conflict
|
||||||
|
end
|
||||||
|
|
||||||
|
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", color.."("..verbatim(branch)..")")
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -242,10 +312,79 @@ function git_prompt_filter()
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function hg_prompt_filter()
|
||||||
|
|
||||||
|
local result = ""
|
||||||
|
|
||||||
|
local hg_dir = get_hg_dir()
|
||||||
|
if hg_dir then
|
||||||
|
-- Colors for mercurial status
|
||||||
|
local colors = {
|
||||||
|
clean = "\x1b[1;37;40m",
|
||||||
|
dirty = "\x1b[31;1m",
|
||||||
|
}
|
||||||
|
|
||||||
|
local pipe = io.popen("hg branch 2>&1")
|
||||||
|
local output = pipe:read('*all')
|
||||||
|
local rc = { pipe:close() }
|
||||||
|
|
||||||
|
-- strip the trailing newline from the branch name
|
||||||
|
local n = #output
|
||||||
|
while n > 0 and output:find("^%s", n) do n = n - 1 end
|
||||||
|
local branch = output:sub(1, n)
|
||||||
|
|
||||||
|
if branch ~= nil and
|
||||||
|
string.sub(branch,1,7) ~= "abort: " and -- not an HG working copy
|
||||||
|
(not string.find(branch, "is not recognized")) then -- 'hg' not in path
|
||||||
|
local color = colors.clean
|
||||||
|
|
||||||
|
local pipe = io.popen("hg status -amrd 2>&1")
|
||||||
|
local output = pipe:read('*all')
|
||||||
|
local rc = { pipe:close() }
|
||||||
|
|
||||||
|
if output ~= nil and output ~= "" then color = colors.dirty end
|
||||||
|
result = color .. "(" .. branch .. ")"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", verbatim(result))
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local function svn_prompt_filter()
|
||||||
|
-- Colors for svn status
|
||||||
|
local colors = {
|
||||||
|
clean = "\x1b[1;37;40m",
|
||||||
|
dirty = "\x1b[31;1m",
|
||||||
|
}
|
||||||
|
|
||||||
|
if get_svn_dir() then
|
||||||
|
-- if we're inside of svn repo then try to detect current branch
|
||||||
|
local branch = get_svn_branch()
|
||||||
|
local color
|
||||||
|
if branch then
|
||||||
|
if get_svn_status() then
|
||||||
|
color = colors.clean
|
||||||
|
else
|
||||||
|
color = colors.dirty
|
||||||
|
end
|
||||||
|
|
||||||
|
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", color.."("..verbatim(branch)..")")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- No mercurial present or not in mercurial file
|
||||||
|
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", "")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
-- insert the set_prompt at the very beginning so that it runs first
|
-- insert the set_prompt at the very beginning so that it runs first
|
||||||
clink.prompt.register_filter(set_prompt_filter, 1)
|
clink.prompt.register_filter(set_prompt_filter, 1)
|
||||||
clink.prompt.register_filter(hg_prompt_filter, 50)
|
clink.prompt.register_filter(hg_prompt_filter, 50)
|
||||||
clink.prompt.register_filter(git_prompt_filter, 50)
|
clink.prompt.register_filter(git_prompt_filter, 50)
|
||||||
|
clink.prompt.register_filter(svn_prompt_filter, 50)
|
||||||
|
clink.prompt.register_filter(percent_prompt_filter, 51)
|
||||||
|
|
||||||
local completions_dir = clink.get_env('CMDER_ROOT')..'/vendor/clink-completions/'
|
local completions_dir = clink.get_env('CMDER_ROOT')..'/vendor/clink-completions/'
|
||||||
for _,lua_module in ipairs(clink.find_files(completions_dir..'*.lua')) do
|
for _,lua_module in ipairs(clink.find_files(completions_dir..'*.lua')) do
|
||||||
@ -258,3 +397,12 @@ for _,lua_module in ipairs(clink.find_files(completions_dir..'*.lua')) do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if clink.get_env('CMDER_USER_CONFIG') then
|
||||||
|
local cmder_config_dir = clink.get_env('CMDER_ROOT')..'/config/'
|
||||||
|
for _,lua_module in ipairs(clink.find_files(cmder_config_dir..'*.lua')) do
|
||||||
|
local filename = cmder_config_dir..lua_module
|
||||||
|
-- use dofile instead of require because require caches loaded modules
|
||||||
|
-- so config reloading using Alt-Q won't reload updated modules.
|
||||||
|
dofile(filename)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
116
vendor/clink_settings.default
vendored
Normal file
116
vendor/clink_settings.default
vendored
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
# name: Pressing Ctrl-D exits session
|
||||||
|
# type: bool
|
||||||
|
# Ctrl-D exits cmd.exe when it is pressed on an empty line.
|
||||||
|
ctrld_exits = 1
|
||||||
|
|
||||||
|
# name: Toggle if pressing Esc clears line
|
||||||
|
# type: bool
|
||||||
|
# Clink clears the current line when Esc is pressed (unless Readline's Vi mode
|
||||||
|
# is enabled).
|
||||||
|
esc_clears_line = 1
|
||||||
|
|
||||||
|
# name: Match display colour
|
||||||
|
# type: int
|
||||||
|
# Colour to use when displaying matches. A value less than 0 will be the
|
||||||
|
# opposite brightness of the default colour.
|
||||||
|
match_colour = -1
|
||||||
|
|
||||||
|
# name: Executable match style
|
||||||
|
# type: enum
|
||||||
|
# 0 = PATH only
|
||||||
|
# 1 = PATH and CWD
|
||||||
|
# 2 = PATH, CWD, and directories
|
||||||
|
# Changes how Clink will match executables when there is no path separator on
|
||||||
|
# the line. 0 = PATH only, 1 = PATH and CWD, 2 = PATH, CWD, and directories. In
|
||||||
|
# all cases both executables and directories are matched when there is a path
|
||||||
|
# separator present. A value of -1 will disable executable matching completely.
|
||||||
|
exec_match_style = 2
|
||||||
|
|
||||||
|
# name: Whitespace prefix matches files
|
||||||
|
# type: bool
|
||||||
|
# If the line begins with whitespace then Clink bypasses executable matching and
|
||||||
|
# will match all files and directories instead.
|
||||||
|
space_prefix_match_files = 1
|
||||||
|
|
||||||
|
# name: Colour of the prompt
|
||||||
|
# type: int
|
||||||
|
# Surrounds the prompt in ANSI escape codes to set the prompt's colour. Disabled
|
||||||
|
# when the value is less than 0.
|
||||||
|
prompt_colour = -1
|
||||||
|
|
||||||
|
# name: Auto-answer terminate prompt
|
||||||
|
# type: enum
|
||||||
|
# 0 = Disabled
|
||||||
|
# 1 = Answer 'Y'
|
||||||
|
# 2 = Answer 'N'
|
||||||
|
# Automatically answers cmd.exe's 'Terminate batch job (Y/N)?' prompts. 0 =
|
||||||
|
# disabled, 1 = answer 'Y', 2 = answer 'N'.
|
||||||
|
terminate_autoanswer = 0
|
||||||
|
|
||||||
|
# name: Lines of history saved to disk
|
||||||
|
# type: int
|
||||||
|
# When set to a positive integer this is the number of lines of history that
|
||||||
|
# will persist when Clink saves the command history to disk. Use 0 for infinite
|
||||||
|
# lines and <0 to disable history persistence.
|
||||||
|
history_file_lines = 10000
|
||||||
|
|
||||||
|
# name: Skip adding lines prefixed with whitespace
|
||||||
|
# type: bool
|
||||||
|
# Ignore lines that begin with whitespace when adding lines in to the history.
|
||||||
|
history_ignore_space = 0
|
||||||
|
|
||||||
|
# name: Controls how duplicate entries are handled
|
||||||
|
# type: enum
|
||||||
|
# 0 = Always add
|
||||||
|
# 1 = Ignore
|
||||||
|
# 2 = Erase previous
|
||||||
|
# If a line is a duplicate of an existing history entry Clink will erase the
|
||||||
|
# duplicate when this is set 2. A value of 1 will not add duplicates to the
|
||||||
|
# history and a value of 0 will always add lines. Note that history is not
|
||||||
|
# deduplicated when reading/writing to disk.
|
||||||
|
history_dupe_mode = 2
|
||||||
|
|
||||||
|
# name: Read/write history file each line edited
|
||||||
|
# type: bool
|
||||||
|
# When non-zero the history will be read from disk before editing a new line and
|
||||||
|
# written to disk afterwards.
|
||||||
|
history_io = 1
|
||||||
|
|
||||||
|
# name: Sets how command history expansion is applied
|
||||||
|
# type: enum
|
||||||
|
# 0 = Off
|
||||||
|
# 1 = On
|
||||||
|
# 2 = Not in single quotes
|
||||||
|
# 3 = Not in double quote
|
||||||
|
# 4 = Not in any quotes
|
||||||
|
# The '!' character in an entered line can be interpreted to introduce words
|
||||||
|
# from the history. This can be enabled and disable by setting this value to 1
|
||||||
|
# or 0. Values or 2, 3 or 4 will skip any ! character quoted in single, double,
|
||||||
|
# or both quotes respectively.
|
||||||
|
history_expand_mode = 3
|
||||||
|
|
||||||
|
# name: Support Windows' Ctrl-Alt substitute for AltGr
|
||||||
|
# type: bool
|
||||||
|
# Windows provides Ctrl-Alt as a substitute for AltGr, historically to support
|
||||||
|
# keyboards with no AltGr key. This may collide with some of Readline's
|
||||||
|
# bindings.
|
||||||
|
use_altgr_substitute = 1
|
||||||
|
|
||||||
|
# name: Strips CR and LF chars on paste
|
||||||
|
# type: enum
|
||||||
|
# 0 = Paste unchanged
|
||||||
|
# 1 = Strip
|
||||||
|
# 2 = As space
|
||||||
|
# Setting this to a value >0 will make Clink strip CR and LF characters from
|
||||||
|
# text pasted into the current line. Set this to 1 to strip all newline
|
||||||
|
# characters and 2 to replace them with a space.
|
||||||
|
strip_crlf_on_paste = 2
|
||||||
|
|
||||||
|
# name: Enables basic ANSI escape code support
|
||||||
|
# type: bool
|
||||||
|
# When printing the prompt, Clink has basic built-in support for SGR ANSI escape
|
||||||
|
# codes to control the text colours. This is automatically disabled if a third
|
||||||
|
# party tool is detected that also provides this facility. It can also be
|
||||||
|
# disabled by setting this to 0.
|
||||||
|
ansi_code_support = 1
|
||||||
|
|
74
vendor/cmder.sh
vendored
74
vendor/cmder.sh
vendored
@ -1,12 +1,26 @@
|
|||||||
# DO NOT EDIT THIS FILE IT WILL BE OVERWRITTEN ON UPDATE
|
# DO NOT EDIT THIS FILE IT WILL BE OVERWRITTEN ON UPDATE
|
||||||
#
|
#
|
||||||
# Add portable user customizations ${CMDER_ROOT}/config/user-profile.sh,
|
# Add portable user customizations ${CMDER_ROOT}/config/user_profile.sh,
|
||||||
# these customizations will follow Cmder if $CMDER_ROOT is copied
|
# these customizations will follow Cmder if $CMDER_ROOT is copied
|
||||||
# to another machine.
|
# 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.
|
# customizations will not follow Cmder to another machine.
|
||||||
|
|
||||||
|
function runProfiled {
|
||||||
|
unset profile_d_scripts
|
||||||
|
pushd "${1}" >/dev/null
|
||||||
|
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||||
|
|
||||||
|
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
||||||
|
for x in ${profile_d_scripts} ; do
|
||||||
|
# echo Sourcing "${1}/${x}"...
|
||||||
|
. "${1}/${x}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
popd >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
|
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
|
||||||
if [ "$CMDER_ROOT" == "" ] ; then
|
if [ "$CMDER_ROOT" == "" ] ; then
|
||||||
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
|
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
|
||||||
@ -31,40 +45,52 @@ if [[ ! "$PATH" =~ "${GIT_INSTALL_ROOT}/bin:" ]] ; then
|
|||||||
PATH=${GIT_INSTALL_ROOT}/bin:$PATH
|
PATH=${GIT_INSTALL_ROOT}/bin:$PATH
|
||||||
fi
|
fi
|
||||||
|
|
||||||
PATH=${CMDER_ROOT}/bin:$PATH:${CMDER_ROOT}
|
PATH=${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}
|
||||||
|
|
||||||
export PATH
|
export PATH
|
||||||
|
|
||||||
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
|
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
|
||||||
# to source them at startup.
|
# to source them at startup.
|
||||||
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||||
mkdir -p ${CMDER_ROOT}/config/profile.d
|
mkdir -p "${CMDER_ROOT}/config/profile.d"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||||
unset profile_d_scripts
|
runProfiled "${CMDER_ROOT}/config/profile.d"
|
||||||
pushd ${CMDER_ROOT}/config/profile.d >/dev/null
|
|
||||||
profile_d_scripts=$(ls ${CMDER_ROOT}/config/profile.d/*.sh 2>/dev/null)
|
|
||||||
|
|
||||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
|
||||||
for x in ${profile_d_scripts} ; do
|
|
||||||
# echo Sourcing "${x}"...
|
|
||||||
. $x
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
popd >/dev/null
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f ${CMDER_ROOT}/config/user-profile.sh ] ; then
|
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
|
||||||
. ${CMDER_ROOT}/config/user-profile.sh
|
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
||||||
else
|
fi
|
||||||
echo Creating user startup file: "${CMDER_ROOT}/config/user-profile.sh"
|
|
||||||
cat <<-eof >"${CMDER_ROOT}/config/user-profile.sh"
|
|
||||||
# use this file to run your own startup commands for msys2 bash'
|
|
||||||
|
|
||||||
# To add a new vendor to the path, do something like:
|
|
||||||
# export PATH=\${CMDER_ROOT}/vendor/whatever:\${PATH}
|
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
||||||
eof
|
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
|
||||||
|
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
|
||||||
|
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
|
||||||
|
. "${CMDER_ROOT}/config/user_profile.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
||||||
|
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
||||||
|
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
|
||||||
|
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
export PATH=${CMDER_USER_CONFIG}/bin:$PATH
|
||||||
|
|
||||||
|
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
|
||||||
|
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
|
||||||
|
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "${CmderUserProfilePath}" ] ; then
|
||||||
|
echo Creating user startup file: "${CmderUserProfilePath}"
|
||||||
|
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Source the users .bashrc file if it exists
|
# Source the users .bashrc file if it exists
|
||||||
|
101
vendor/cmder_exinit
vendored
101
vendor/cmder_exinit
vendored
@ -1,4 +1,4 @@
|
|||||||
# Copy this file to your non integrated *nix-like environment,
|
# Copy this file to your non integrated *nix-like environment,
|
||||||
# Cygwin/MSys2/Git for Windows SDK, installs '/etc/profile.d/'
|
# Cygwin/MSys2/Git for Windows SDK, installs '/etc/profile.d/'
|
||||||
# folder to integrate the externally installed Unix like environment
|
# folder to integrate the externally installed Unix like environment
|
||||||
# into Cmder so it has access to settings stored in Cmder/config
|
# into Cmder so it has access to settings stored in Cmder/config
|
||||||
@ -15,13 +15,32 @@
|
|||||||
# These customizations will follow Cmder if $CMDER_ROOT is copied
|
# These customizations will follow Cmder if $CMDER_ROOT is copied
|
||||||
# to another machine.
|
# 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.
|
# customizations will not follow Cmder to another machine.
|
||||||
|
|
||||||
# # Uncomment and edit the CMDER_ROOT line to use Cmder/config even when launched
|
# # Uncomment and edit the CMDER_ROOT line to use Cmder/config even when launched
|
||||||
# # from outside Cmder.
|
# # from outside Cmder.
|
||||||
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
||||||
|
|
||||||
|
function runProfiled {
|
||||||
|
unset profile_d_scripts
|
||||||
|
pushd "${1}" >/dev/null
|
||||||
|
|
||||||
|
if [ ! "x${ZSH_VERSION}" = "x" ]; then
|
||||||
|
profile_d_scripts=$(ls *.zsh 2>/dev/null)
|
||||||
|
elif [ ! "x${BASH_VERSION}" = "x" ]; then
|
||||||
|
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
||||||
|
for x in ${profile_d_scripts} ; do
|
||||||
|
echo Sourcing "${1}/${x}"...
|
||||||
|
. "${1}/${x}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
popd >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
# Check that we haven't already been sourced.
|
# Check that we haven't already been sourced.
|
||||||
[[ -z ${CMDER_EXINIT} ]] && CMDER_EXINIT="1" || return
|
[[ -z ${CMDER_EXINIT} ]] && CMDER_EXINIT="1" || return
|
||||||
|
|
||||||
@ -39,48 +58,56 @@ fi
|
|||||||
if [ ! "$CMDER_ROOT" = "" ] ; then
|
if [ ! "$CMDER_ROOT" = "" ] ; then
|
||||||
# Remove any trailing '/'
|
# Remove any trailing '/'
|
||||||
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
|
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
|
||||||
|
|
||||||
echo "Using \"CMDER_ROOT\" at \"${CMDER_ROOT}\"."
|
echo "Using \"CMDER_ROOT\" at \"${CMDER_ROOT}\"."
|
||||||
|
|
||||||
export CMDER_ROOT
|
export CMDER_ROOT
|
||||||
|
|
||||||
PATH=${CMDER_ROOT}/bin:$PATH:${CMDER_ROOT}
|
PATH=${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}
|
||||||
|
|
||||||
export PATH
|
export PATH
|
||||||
|
|
||||||
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
|
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
|
||||||
# to source them at startup.
|
# to source them at startup.
|
||||||
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||||
mkdir -p ${CMDER_ROOT}/config/profile.d
|
mkdir -p "${CMDER_ROOT}/config/profile.d"
|
||||||
fi
|
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 ${CMDER_ROOT}/config/profile.d/*.zsh 2>/dev/null)
|
|
||||||
elif [ ! "x${BASH_VERSION}" = "x" ]; then
|
|
||||||
profile_d_scripts=$(ls ${CMDER_ROOT}/config/profile.d/*.sh 2>/dev/null)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
|
||||||
for x in ${profile_d_scripts} ; do
|
|
||||||
# echo Sourcing "${x}"...
|
|
||||||
. $x
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
popd >/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
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"
|
|
||||||
# use this file to run your own startup commands for msys2 bash'
|
|
||||||
|
|
||||||
# To add a new vendor to the path, do something like:
|
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||||
# export PATH=\${CMDER_ROOT}/vendor/whatever:\${PATH}
|
runProfiled "${CMDER_ROOT}/config/profile.d"
|
||||||
eof
|
fi
|
||||||
|
|
||||||
|
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
|
||||||
|
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
||||||
|
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
|
||||||
|
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
|
||||||
|
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
|
||||||
|
. "${CMDER_ROOT}/config/user_profile.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
||||||
|
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
||||||
|
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
|
||||||
|
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
export PATH=${CMDER_USER_CONFIG}/bin:$PATH
|
||||||
|
|
||||||
|
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
|
||||||
|
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
|
||||||
|
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "${CmderUserProfilePath}" ] ; then
|
||||||
|
echo Creating user startup file: "${CmderUserProfilePath}"
|
||||||
|
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
57
vendor/git-prompt.sh
vendored
57
vendor/git-prompt.sh
vendored
@ -1,22 +1,39 @@
|
|||||||
PS1='\[\033]0;$MSYSTEM:${PWD//[^[:ascii:]]/?}\007\]' # set window title
|
if test -f /etc/profile.d/git-sdk.sh
|
||||||
PS1="$PS1"'\[\033[32m\]' # change to green
|
|
||||||
PS1="$PS1"'\u@\h ' # user@host<space>
|
|
||||||
PS1="$PS1"'\[\033[33m\]' # change to brownish yellow
|
|
||||||
PS1="$PS1"'\w' # current working directory
|
|
||||||
if test -z "$WINELOADERNOEXEC"
|
|
||||||
then
|
then
|
||||||
GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
|
TITLEPREFIX=SDK-${MSYSTEM#MINGW}
|
||||||
COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
|
else
|
||||||
COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
|
TITLEPREFIX=$MSYSTEM
|
||||||
COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
|
|
||||||
if test -f "$COMPLETION_PATH/git-prompt.sh"
|
|
||||||
then
|
|
||||||
. "$COMPLETION_PATH/git-completion.bash"
|
|
||||||
. "$COMPLETION_PATH/git-prompt.sh"
|
|
||||||
PS1="$PS1"'\[\033[36m\]' # change color to cyan
|
|
||||||
PS1="$PS1"'`__git_ps1`' # bash function
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
PS1="$PS1"'\[\033[0m\]' # change color
|
|
||||||
PS1="$PS1"'\n' # new line
|
if test -f ~/.config/git/git-prompt.sh
|
||||||
PS1="$PS1"'λ ' # prompt: always λ
|
then
|
||||||
|
. ~/.config/git/git-prompt.sh
|
||||||
|
else
|
||||||
|
PS1='\[\033]0;$MSYSTEM:${PWD//[^[:ascii:]]/?}\007\]' # set window title
|
||||||
|
# PS1="$PS1"'\n' # new line
|
||||||
|
PS1="$PS1"'\[\033[32m\]' # change to green
|
||||||
|
PS1="$PS1"'\u@\h ' # user@host<space>
|
||||||
|
# PS1="$PS1"'\[\033[35m\]' # change to purple
|
||||||
|
# PS1="$PS1"'$MSYSTEM ' # show MSYSTEM
|
||||||
|
PS1="$PS1"'\[\033[33m\]' # change to brownish yellow
|
||||||
|
PS1="$PS1"'\w' # current working directory
|
||||||
|
if test -z "$WINELOADERNOEXEC"
|
||||||
|
then
|
||||||
|
GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
|
||||||
|
COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
|
||||||
|
COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
|
||||||
|
COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
|
||||||
|
if test -f "$COMPLETION_PATH/git-prompt.sh"
|
||||||
|
then
|
||||||
|
. "$COMPLETION_PATH/git-completion.bash"
|
||||||
|
. "$COMPLETION_PATH/git-prompt.sh"
|
||||||
|
PS1="$PS1"'\[\033[36m\]' # change color to cyan
|
||||||
|
PS1="$PS1"'`__git_ps1`' # bash function
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
PS1="$PS1"'\[\033[0m\]' # change color
|
||||||
|
PS1="$PS1"'\n' # new line
|
||||||
|
PS1="$PS1"'λ ' # prompt: always λ
|
||||||
|
fi
|
||||||
|
|
||||||
|
MSYS2_PS1="$PS1" # for detection by MSYS2 SDK's bash.basrc
|
||||||
|
440
vendor/init.bat
vendored
440
vendor/init.bat
vendored
@ -1,38 +1,158 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
|
set CMDER_INIT_START=%time%
|
||||||
|
|
||||||
:: Init Script for cmd.exe
|
:: Init Script for cmd.exe
|
||||||
:: Created as part of cmder project
|
:: Created as part of cmder project
|
||||||
|
|
||||||
:: !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
:: !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||||
:: !!! Use "%CMDER_ROOT%\config\user-profile.cmd" to add your own startup commands
|
:: !!! Use "%CMDER_ROOT%\config\user_profile.cmd" to add your own startup commands
|
||||||
|
|
||||||
:: Set to > 0 for verbose output to aid in debugging.
|
:: Use /v command line arg or set to > 0 for verbose output to aid in debugging.
|
||||||
if not defined verbose-output ( set verbose-output=0 )
|
set verbose_output=0
|
||||||
|
set debug_output=0
|
||||||
|
set time_init=0
|
||||||
|
set fast_init=0
|
||||||
|
set max_depth=1
|
||||||
|
:: Add *nix tools to end of path. 0 turns off *nix tools.
|
||||||
|
set nix_tools=1
|
||||||
|
set "CMDER_USER_FLAGS= "
|
||||||
|
|
||||||
:: Find root dir
|
:: Find root dir
|
||||||
if not defined CMDER_ROOT (
|
if not defined CMDER_ROOT (
|
||||||
for /f "delims=" %%i in ("%ConEmuDir%\..\..") do set "CMDER_ROOT=%%~fi"
|
if defined ConEmuDir (
|
||||||
|
for /f "delims=" %%i in ("%ConEmuDir%\..\..") do (
|
||||||
|
set "CMDER_ROOT=%%~fi"
|
||||||
|
)
|
||||||
|
) else (
|
||||||
|
for /f "delims=" %%i in ("%~dp0\..") do (
|
||||||
|
set "CMDER_ROOT=%%~fi"
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Remove trailing '\'
|
:: Remove trailing '\' from %CMDER_ROOT%
|
||||||
if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%"
|
if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%"
|
||||||
|
|
||||||
|
call "%cmder_root%\vendor\bin\cexec.cmd" /setpath
|
||||||
|
call "%cmder_root%\vendor\lib\lib_base"
|
||||||
|
call "%cmder_root%\vendor\lib\lib_path"
|
||||||
|
call "%cmder_root%\vendor\lib\lib_console"
|
||||||
|
call "%cmder_root%\vendor\lib\lib_git"
|
||||||
|
call "%cmder_root%\vendor\lib\lib_profile"
|
||||||
|
|
||||||
|
:var_loop
|
||||||
|
if "%~1" == "" (
|
||||||
|
goto :start
|
||||||
|
) else if /i "%1" == "/f" (
|
||||||
|
set fast_init=1
|
||||||
|
) else if /i "%1" == "/t" (
|
||||||
|
set time_init=1
|
||||||
|
) else if /i "%1"=="/v" (
|
||||||
|
set verbose_output=1
|
||||||
|
) 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"=="/nix_tools" (
|
||||||
|
if "%2" equ "0" (
|
||||||
|
REM Do not add *nix tools to path
|
||||||
|
set nix_tools=0
|
||||||
|
shift
|
||||||
|
) else if "%2" equ "1" (
|
||||||
|
REM Add *nix tools to end of path
|
||||||
|
set nix_tools=1
|
||||||
|
shift
|
||||||
|
) else if "%2" equ "2" (
|
||||||
|
REM Add *nix tools to front of path
|
||||||
|
set nix_tools=2
|
||||||
|
shift
|
||||||
|
)
|
||||||
|
) 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
|
||||||
|
) else (
|
||||||
|
set "CMDER_USER_FLAGS=%1 %CMDER_USER_FLAGS%"
|
||||||
|
)
|
||||||
|
shift
|
||||||
|
goto var_loop
|
||||||
|
|
||||||
|
:start
|
||||||
|
:: Sets CMDER_SHELL, CMDER_CLINK, CMDER_ALIASES
|
||||||
|
%lib_base% cmder_shell
|
||||||
|
%lib_console% debug_output init.bat "Env Var - CMDER_ROOT=%CMDER_ROOT%"
|
||||||
|
%lib_console% debug_output init.bat "Env Var - debug_output=%debug_output%"
|
||||||
|
|
||||||
|
if defined CMDER_USER_CONFIG (
|
||||||
|
%lib_console% debug_output init.bat "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '%CMDER_USER_CONFIG%'!"
|
||||||
|
)
|
||||||
|
|
||||||
:: Pick right version of clink
|
:: Pick right version of clink
|
||||||
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
||||||
set architecture=86
|
set architecture=86
|
||||||
|
set architecture_bits=32
|
||||||
) else (
|
) else (
|
||||||
set architecture=64
|
set architecture=64
|
||||||
|
set architecture_bits=64
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Tell the user about the clink config files...
|
if "%CMDER_CLINK%" == "1" (
|
||||||
if not exist "%CMDER_ROOT%\config\settings" (
|
%lib_console% verbose_output "Injecting Clink!"
|
||||||
set clink.history_io=3
|
|
||||||
echo Generating clink initial settings in "%CMDER_ROOT%\config\settings"
|
|
||||||
echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup.
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Run clink
|
:: 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 (
|
||||||
|
if not exist "%CMDER_USER_CONFIG%\settings" (
|
||||||
|
echo Generating clink initial settings in "%CMDER_USER_CONFIG%\settings"
|
||||||
|
copy "%CMDER_ROOT%\vendor\clink_settings.default" "%CMDER_USER_CONFIG%\settings"
|
||||||
|
echo Additional *.lua files in "%CMDER_USER_CONFIG%" are loaded on startup.\
|
||||||
|
)
|
||||||
|
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_USER_CONFIG%" --scripts "%CMDER_ROOT%\vendor"
|
||||||
|
) else (
|
||||||
|
if not exist "%CMDER_ROOT%\config\settings" (
|
||||||
|
echo Generating clink initial settings in "%CMDER_ROOT%\config\settings"
|
||||||
|
copy "%CMDER_ROOT%\vendor\clink_settings.default" "%CMDER_ROOT%\config\settings"
|
||||||
|
echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup.
|
||||||
|
)
|
||||||
|
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
|
||||||
|
)
|
||||||
|
) else (
|
||||||
|
%lib_console% verbose_output "WARNING: Incompatible 'ComSpec/Shell' Detetected Skipping Clink Injection!"
|
||||||
|
)
|
||||||
|
|
||||||
:: Prepare for git-for-windows
|
:: Prepare for git-for-windows
|
||||||
|
|
||||||
@ -44,25 +164,68 @@ if not defined TERM set TERM=cygwin
|
|||||||
:: * if the users points as to a specific git, use that
|
:: * if the users points as to a specific git, use that
|
||||||
:: * test if a git is in path and if yes, use that
|
:: * test if a git is in path and if yes, use that
|
||||||
:: * last, use our vendored git
|
:: * last, use our vendored git
|
||||||
:: also check that we have a recent enough version of git (e.g. test for GIT\cmd\git.exe)
|
:: also check that we have a recent enough version of git by examining the version string
|
||||||
|
setlocal enabledelayedexpansion
|
||||||
if defined GIT_INSTALL_ROOT (
|
if defined GIT_INSTALL_ROOT (
|
||||||
if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" (goto :FOUND_GIT)
|
if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" goto :SPECIFIED_GIT
|
||||||
|
) else if "%fast_init%" == "1" (
|
||||||
|
if exist "%CMDER_ROOT%\vendor\git-for-windows\cmd\git.exe" (
|
||||||
|
%lib_console% debug_output "Skipping Git Auto-Detect!"
|
||||||
|
goto :VENDORED_GIT
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
%lib_console% debug_output init.bat "Looking for Git install root..."
|
||||||
|
|
||||||
|
:: 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...
|
:: 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
|
pushd %%~dpF
|
||||||
cd ..
|
:: check if there's shim - and if yes follow the path
|
||||||
set "test_dir=!CD!"
|
if exist git.shim (
|
||||||
popd
|
for /F "tokens=2 delims== " %%I in (git.shim) do (
|
||||||
if exist "!test_dir!\cmd\git.exe" (
|
pushd %%~dpI
|
||||||
set "GIT_INSTALL_ROOT=!test_dir!"
|
set "test_dir=!CD!"
|
||||||
set test_dir=
|
popd
|
||||||
goto :FOUND_GIT
|
)
|
||||||
) else (
|
) else (
|
||||||
echo Found old git version in "!test_dir!", but not using...
|
set "test_dir=!CD!"
|
||||||
set test_dir=
|
)
|
||||||
|
popd
|
||||||
|
|
||||||
|
:: 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 (
|
||||||
|
|
||||||
|
:: 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=
|
||||||
|
)
|
||||||
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -70,121 +233,192 @@ for /F "delims=" %%F in ('where git.exe 2^>nul') do @(
|
|||||||
:VENDORED_GIT
|
:VENDORED_GIT
|
||||||
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
|
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
|
||||||
set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows"
|
set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows"
|
||||||
call :verbose-output Add the minimal git commands to the front of the path
|
%lib_console% debug_output "Using vendored Git from '!GIT_INSTALL_ROOT!..."
|
||||||
set "PATH=!GIT_INSTALL_ROOT!\cmd;%PATH%"
|
goto :CONFIGURE_GIT
|
||||||
) else (
|
) else (
|
||||||
goto :NO_GIT
|
goto :NO_GIT
|
||||||
)
|
)
|
||||||
|
|
||||||
|
:SPECIFIED_GIT
|
||||||
|
%lib_console% debug_output "Using /GIT_INSTALL_ROOT from '%GIT_INSTALL_ROOT%..."
|
||||||
|
goto :CONFIGURE_GIT
|
||||||
|
|
||||||
:FOUND_GIT
|
:FOUND_GIT
|
||||||
|
%lib_console% debug_output "Using found Git from '%GIT_INSTALL_ROOT%..."
|
||||||
|
goto :CONFIGURE_GIT
|
||||||
|
|
||||||
|
:CONFIGURE_GIT
|
||||||
:: Add git to the path
|
:: Add git to the path
|
||||||
if defined GIT_INSTALL_ROOT (
|
if defined GIT_INSTALL_ROOT (
|
||||||
rem add the unix commands at the end to not shadow windows commands like more
|
rem add the unix commands at the end to not shadow windows commands like more
|
||||||
call :verbose-output Enhancing PATH with unix commands from git in "%GIT_INSTALL_ROOT%\usr\bin"
|
if %nix_tools% equ 1 (
|
||||||
set "PATH=%PATH%;%GIT_INSTALL_ROOT%\usr\bin;%GIT_INSTALL_ROOT%\usr\share\vim\vim74"
|
%lib_console% debug_output init.bat "Preferring Windows commands"
|
||||||
|
set "path_position=append"
|
||||||
|
) else (
|
||||||
|
%lib_console% debug_output init.bat "Preferring *nix commands"
|
||||||
|
set "path_position="
|
||||||
|
)
|
||||||
|
|
||||||
|
if exist "!GIT_INSTALL_ROOT!\cmd\git.exe" %lib_path% enhance_path "!GIT_INSTALL_ROOT!\cmd" !path_position!
|
||||||
|
if exist "!GIT_INSTALL_ROOT!\mingw32" (
|
||||||
|
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\mingw32\bin" !path_position!
|
||||||
|
) else if exist "!GIT_INSTALL_ROOT!\mingw64" (
|
||||||
|
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\mingw64\bin" !path_position!
|
||||||
|
)
|
||||||
|
|
||||||
|
if %nix_tools% geq 1 (
|
||||||
|
%lib_path% enhance_path "!GIT_INSTALL_ROOT!\usr\bin" !path_position!
|
||||||
|
)
|
||||||
|
|
||||||
:: define SVN_SSH so we can use git svn with ssh svn repositories
|
:: define SVN_SSH so we can use git svn with ssh svn repositories
|
||||||
if not defined SVN_SSH set "SVN_SSH=%GIT_INSTALL_ROOT:\=\\%\\bin\\ssh.exe"
|
if not defined SVN_SSH set "SVN_SSH=%GIT_INSTALL_ROOT:\=\\%\\bin\\ssh.exe"
|
||||||
|
|
||||||
|
if not defined LANG (
|
||||||
|
:: Find locale.exe: From the git install root, from the path, using the git installed env, or fallback using the env from the path.
|
||||||
|
if not defined git_locale if exist "!GIT_INSTALL_ROOT!\usr\bin\locale.exe" set git_locale="!GIT_INSTALL_ROOT!\usr\bin\locale.exe"
|
||||||
|
if not defined git_locale for /F "delims=" %%F in ('where locale.exe 2^>nul') do (if not defined git_locale set git_locale="%%F")
|
||||||
|
if not defined git_locale if exist "!GIT_INSTALL_ROOT!\usr\bin\env.exe" set git_locale="!GIT_INSTALL_ROOT!\usr\bin\env.exe" /usr/bin/locale
|
||||||
|
if not defined git_locale set git_locale=env /usr/bin/locale
|
||||||
|
for /F "delims=" %%F in ('!git_locale! -uU 2') do (
|
||||||
|
set "LANG=%%F"
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
:NO_GIT
|
endlocal & set "PATH=%PATH%" & set "LANG=%LANG%" & set "SVN_SSH=%SVN_SSH%" & set "GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
|
||||||
endlocal & set "PATH=%PATH%" & set "SVN_SSH=%SVN_SSH%" & set "GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
|
%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
|
:NO_GIT
|
||||||
set "PATH=%CMDER_ROOT%\bin;%PATH%;%CMDER_ROOT%\"
|
:: Skip this if GIT WAS FOUND else we did 'endlocal' above!
|
||||||
|
endlocal
|
||||||
|
|
||||||
|
:PATH_ENHANCE
|
||||||
|
%lib_path% enhance_path "%CMDER_ROOT%\vendor\bin"
|
||||||
|
%lib_path% enhance_path_recursive "%CMDER_ROOT%\bin" %max_depth%
|
||||||
|
if defined CMDER_USER_BIN (
|
||||||
|
%lib_path% enhance_path_recursive "%CMDER_USER_BIN%" %max_depth%
|
||||||
|
)
|
||||||
|
%lib_path% enhance_path "%CMDER_ROOT%" append
|
||||||
|
|
||||||
:: Drop *.bat and *.cmd files into "%CMDER_ROOT%\config\profile.d"
|
:: Drop *.bat and *.cmd files into "%CMDER_ROOT%\config\profile.d"
|
||||||
:: to run them at startup.
|
:: to run them at startup.
|
||||||
if not exist "%CMDER_ROOT%\config\profile.d" (
|
%lib_profile% run_profile_d "%CMDER_ROOT%\config\profile.d"
|
||||||
mkdir "%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
|
:: Allows user to override default aliases store using profile.d
|
||||||
:: scripts run above by setting the 'aliases' env variable.
|
:: scripts run above by setting the 'aliases' env variable.
|
||||||
::
|
::
|
||||||
:: Note: If overriding default aliases store file the aliases
|
:: Note: If overriding default aliases store file the aliases
|
||||||
:: must also be self executing, see '.\user-aliases.cmd.example',
|
:: must also be self executing, see '.\user_aliases.cmd.default',
|
||||||
:: and be in profile.d folder.
|
:: 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 (
|
||||||
:: The aliases environment variable is used by alias.bat to id
|
set "user_aliases=%CMDER_USER_CONFIG%\user_aliases.cmd"
|
||||||
:: the default file to store new aliases in.
|
) else (
|
||||||
if not defined aliases (
|
set "user_aliases=%CMDER_ROOT%\config\user_aliases.cmd"
|
||||||
set "aliases=%user-aliases%"
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Make sure we have a self-extracting user-aliases.cmd file
|
if "%CMDER_ALIASES%" == "1" (
|
||||||
setlocal enabledelayedexpansion
|
REM The aliases environment variable is used by alias.bat to id
|
||||||
if not exist "%user-aliases%" (
|
REM the default file to store new aliases in.
|
||||||
echo Creating intial user-aliases store in "%user-aliases%"...
|
if not defined aliases (
|
||||||
copy "%CMDER_ROOT%\vendor\user-aliases.cmd.example" "%user-aliases%"
|
set "aliases=%user_aliases%"
|
||||||
) else (
|
)
|
||||||
type "%user-aliases%" | findstr /i ";= Add aliases below here" >nul
|
|
||||||
if "!errorlevel!" == "1" (
|
REM Make sure we have a self-extracting user_aliases.cmd file
|
||||||
echo Creating intial user-aliases store in "%user-aliases%"...
|
setlocal enabledelayedexpansion
|
||||||
copy "%CMDER_ROOT%\%user-aliases%" "%user-aliases%.old_format"
|
if not exist "%user_aliases%" (
|
||||||
copy "%CMDER_ROOT%\vendor\user-aliases.cmd.example" "%user-aliases%"
|
echo Creating initial user_aliases store in "%user_aliases%"...
|
||||||
)
|
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.default" "%user_aliases%"
|
||||||
|
) else (
|
||||||
|
type "%user_aliases%" | %WINDIR%\System32\findstr /i ";= Add aliases below here" >nul
|
||||||
|
if "!errorlevel!" == "1" (
|
||||||
|
echo Creating initial user_aliases store in "%user_aliases%"...
|
||||||
|
if defined CMDER_USER_CONFIG (
|
||||||
|
copy "%user_aliases%" "%user_aliases%.old_format"
|
||||||
|
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.default" "%user_aliases%"
|
||||||
|
) else (
|
||||||
|
copy "%user_aliases%" "%user_aliases%.old_format"
|
||||||
|
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.default" "%user_aliases%"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Update old 'user_aliases' to new self executing 'user_aliases.cmd'
|
||||||
|
if exist "%CMDER_ROOT%\config\aliases" (
|
||||||
|
echo Updating old "%CMDER_ROOT%\config\aliases" to new format...
|
||||||
|
type "%CMDER_ROOT%\config\aliases" >> "%user_aliases%"
|
||||||
|
del "%CMDER_ROOT%\config\aliases"
|
||||||
|
) else if exist "%user_aliases%.old_format" (
|
||||||
|
echo Updating old "%user_aliases%" to new format...
|
||||||
|
type "%user_aliases%.old_format" >> "%user_aliases%"
|
||||||
|
del "%user_aliases%.old_format"
|
||||||
|
)
|
||||||
|
endlocal
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Update old 'user-aliases' to new self executing 'user-aliases.cmd'
|
|
||||||
if exist "%CMDER_ROOT%\config\aliases" (
|
|
||||||
echo Updating old "%CMDER_ROOT%\config\aliases" to new format...
|
|
||||||
type "%CMDER_ROOT%\config\aliases" >> "%user-aliases%" && del "%CMDER_ROOT%\config\aliases"
|
|
||||||
) else if exist "%user-aliases%.old_format" (
|
|
||||||
echo Updating old "%user-aliases%" to new format...
|
|
||||||
type "%user-aliases%.old_format" >> "%user-aliases%" && del "%user-aliases%.old_format"
|
|
||||||
)
|
|
||||||
endlocal
|
|
||||||
:: Add aliases to the environment
|
:: Add aliases to the environment
|
||||||
call "%user-aliases%"
|
call "%user_aliases%"
|
||||||
|
|
||||||
:: See vendor\git-for-windows\README.portable for why we do this
|
:: See vendor\git-for-windows\README.portable for why we do this
|
||||||
:: Basically we need to execute this post-install.bat because we are
|
:: Basically we need to execute this post-install.bat because we are
|
||||||
:: manually extracting the archive rather than executing the 7z sfx
|
:: manually extracting the archive rather than executing the 7z sfx
|
||||||
if exist "%CMDER_ROOT%\vendor\git-for-windows\post-install.bat" (
|
if exist "%GIT_INSTALL_ROOT%\post-install.bat" (
|
||||||
call :verbose-output Running Git for Windows one time Post Install....
|
%lib_console% verbose_output "Running Git for Windows one time Post Install...."
|
||||||
cd /d "%CMDER_ROOT%\vendor\git-for-windows\"
|
pushd "%GIT_INSTALL_ROOT%\"
|
||||||
"%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe" --no-needs-console --hide --no-cd --command=post-install.bat
|
"%GIT_INSTALL_ROOT%\git-bash.exe" --no-needs-console --hide --no-cd --command=post-install.bat
|
||||||
cd /d %USERPROFILE%
|
popd
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Set home path
|
:: Set home path
|
||||||
if not defined HOME set "HOME=%USERPROFILE%"
|
if not defined HOME set "HOME=%USERPROFILE%"
|
||||||
|
%lib_console% debug_output init.bat "Env Var - HOME=%HOME%"
|
||||||
|
|
||||||
:: This is either a env variable set by the user or the result of
|
set "initialConfig=%CMDER_ROOT%\config\user_profile.cmd"
|
||||||
:: cmder.exe setting this variable due to a commandline argument or a "cmder here"
|
if exist "%CMDER_ROOT%\config\user_profile.cmd" (
|
||||||
if defined CMDER_START (
|
|
||||||
cd /d "%CMDER_START%"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if exist "%CMDER_ROOT%\config\user-profile.cmd" (
|
|
||||||
REM Create this file and place your own command in there
|
REM Create this file and place your own command in there
|
||||||
call "%CMDER_ROOT%\config\user-profile.cmd"
|
%lib_console% debug_output init.bat "Calling - %CMDER_ROOT%\config\user_profile.cmd"
|
||||||
) else (
|
call "%CMDER_ROOT%\config\user_profile.cmd"
|
||||||
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 :: call "%%GIT_INSTALL_ROOT%%/cmd/start-ssh-agent.cmd"
|
|
||||||
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
|
||||||
|
%lib_console% debug_output init.bat "Calling - %CMDER_USER_CONFIG%\user_profile.cmd
|
||||||
|
call "%CMDER_USER_CONFIG%\user_profile.cmd"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
::
|
if not exist "%initialConfig%" (
|
||||||
:: sub-routines below here
|
echo Creating user startup file: "%initialConfig%"
|
||||||
::
|
copy "%CMDER_ROOT%\vendor\user_profile.cmd.default" "%initialConfig%"
|
||||||
:verbose-output
|
)
|
||||||
if %verbose-output% gtr 0 echo %*
|
|
||||||
exit /b
|
if "%CMDER_ALIASES%" == "1" if exist "%CMDER_ROOT%\bin\alias.bat" if exist "%CMDER_ROOT%\vendor\bin\alias.cmd" (
|
||||||
|
echo Cmder's 'alias' command has been moved into "%CMDER_ROOT%\vendor\bin\alias.cmd"
|
||||||
|
echo to get rid of this message either:
|
||||||
|
echo.
|
||||||
|
echo Delete the file "%CMDER_ROOT%\bin\alias.bat"
|
||||||
|
echo.
|
||||||
|
echo or
|
||||||
|
echo.
|
||||||
|
echo If you have customized it and want to continue using it instead of the included version
|
||||||
|
echo * Rename "%CMDER_ROOT%\bin\alias.bat" to "%CMDER_ROOT%\bin\alias.cmd".
|
||||||
|
echo * Search for 'user-aliases' and replace it with 'user_aliases'.
|
||||||
|
)
|
||||||
|
|
||||||
|
set initialConfig=
|
||||||
|
set CMDER_CONFIGURED=1
|
||||||
|
|
||||||
|
set CMDER_INIT_END=%time%
|
||||||
|
|
||||||
|
if %time_init% gtr 0 (
|
||||||
|
"%cmder_root%\vendor\bin\timer.cmd" %CMDER_INIT_START% %CMDER_INIT_END%
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
81
vendor/lib/lib_base.cmd
vendored
Normal file
81
vendor/lib/lib_base.cmd
vendored
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
@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 "lib_base.cmd"
|
||||||
|
:::.
|
||||||
|
:::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" ^| %WINDIR%\System32\findstr /i /r "^:::"') do (
|
||||||
|
rem echo a="%%a"
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
:cmder_shell
|
||||||
|
:::===============================================================================
|
||||||
|
:::show_subs - shows all sub routines in a .bat/.cmd file with documentation
|
||||||
|
:::.
|
||||||
|
:::include:
|
||||||
|
:::.
|
||||||
|
::: call "lib_base.cmd"
|
||||||
|
:::.
|
||||||
|
:::usage:
|
||||||
|
:::.
|
||||||
|
::: %lib_base% cmder_shell
|
||||||
|
:::.
|
||||||
|
:::options:
|
||||||
|
:::.
|
||||||
|
::: file <in> full path to file containing lib_routines to display
|
||||||
|
:::.
|
||||||
|
:::-------------------------------------------------------------------------------
|
||||||
|
echo %comspec% | %WINDIR%\System32\find /i "\cmd.exe" > nul && set "CMDER_SHELL=cmd"
|
||||||
|
echo %comspec% | %WINDIR%\System32\find /i "\tcc.exe" > nul && set "CMDER_SHELL=tcc"
|
||||||
|
echo %comspec% | %WINDIR%\System32\find /i "\tccle" > nul && set "CMDER_SHELL=tccle"
|
||||||
|
|
||||||
|
if not defined CMDER_CLINK (
|
||||||
|
set CMDER_CLINK=1
|
||||||
|
if "%CMDER_SHELL%" equ "tcc" set CMDER_CLINK=0
|
||||||
|
if "%CMDER_SHELL%" equ "tccle" set CMDER_CLINK=0
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if not defined CMDER_ALIASES (
|
||||||
|
set CMDER_ALIASES=1
|
||||||
|
if "%CMDER_SHELL%" equ "tcc" set CMDER_ALIASES=0
|
||||||
|
if "%CMDER_SHELL%" equ "tccle" set CMDER_ALIASES=0
|
||||||
|
)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
if "%fast_init%" == "1" exit /b
|
||||||
|
|
||||||
|
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 "lib_console.cmd"
|
||||||
|
:::.
|
||||||
|
:::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 "lib_git.cmd"
|
||||||
|
:::.
|
||||||
|
:::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=%%C"
|
||||||
|
%lib_console% debug_output :read_version "Env Var - GIT_VERSION_%~1=!GIT_VERSION!"
|
||||||
|
) else (
|
||||||
|
%lib_console% show_error "git --version" returned an inproper version string!
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
endlocal & set "GIT_VERSION_%~1=%GIT_VERSION%"
|
||||||
|
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
|
||||||
|
%lib_console% debug_output :parse_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
||||||
|
for /F "tokens=1-3* delims=.,-" %%A in ("%2") do (
|
||||||
|
set "%~1_MAJOR=%%A"
|
||||||
|
set "%~1_MINOR=%%B"
|
||||||
|
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
|
||||||
|
%lib_console% debug_output :validate_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
||||||
|
call :parse_version %~1 %~2
|
||||||
|
|
||||||
|
:: ... and maybe display it, for debugging purposes.
|
||||||
|
%lib_console% debug_output :validate_version "Found Git Version for %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!"
|
||||||
|
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
|
174
vendor/lib/lib_path.cmd
vendored
Normal file
174
vendor/lib/lib_path.cmd
vendored
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
@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 "lib_path.cmd"
|
||||||
|
:::
|
||||||
|
:::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="
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%fast_init%" == "1" (
|
||||||
|
if "%position%" == "append" (
|
||||||
|
set "PATH=%PATH%;%add_path%"
|
||||||
|
) else (
|
||||||
|
set "PATH=%add_path%;%PATH%"
|
||||||
|
)
|
||||||
|
goto :end_enhance_path
|
||||||
|
)
|
||||||
|
|
||||||
|
set found=0
|
||||||
|
set "find_query=%add_path%"
|
||||||
|
set "find_query=%find_query:\=\\%"
|
||||||
|
set "find_query=%find_query: =\ %"
|
||||||
|
|
||||||
|
if "%CMDER_CONFIGURED%" == "1" (
|
||||||
|
%lib_console% debug_output :enhance_path "Env Var - find_query=%find_query%"
|
||||||
|
echo "%path%"|%WINDIR%\System32\findstr >nul /I /R ";%find_query%\"$"
|
||||||
|
if "!ERRORLEVEL!" == "0" set found=1
|
||||||
|
)
|
||||||
|
%lib_console% debug_output :enhance_path "Env Var 1 - found=!found!"
|
||||||
|
|
||||||
|
if "!found!" == "0" (
|
||||||
|
if "%CMDER_CONFIGURED%" == "1" (
|
||||||
|
echo "%path%"|%WINDIR%\System32\findstr >nul /i /r ";%find_query%;"
|
||||||
|
if "!ERRORLEVEL!" == "0" set found=1
|
||||||
|
)
|
||||||
|
%lib_console% debug_output :enhance_path "Env Var 2 - found=!found!"
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%found%" == "0" (
|
||||||
|
%lib_console% debug_output :enhance_path "BEFORE Env Var - PATH=!path!"
|
||||||
|
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!"
|
||||||
|
)
|
||||||
|
|
||||||
|
:end_enhance_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 "%fast_init%" == "1" (
|
||||||
|
call :enhance_path "%add_path%" %position%
|
||||||
|
goto :end_enhance_path_recursive
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%depth%" == "" set depth=0
|
||||||
|
|
||||||
|
%lib_console% debug_output :enhance_path_recursive "Env Var - add_path=%add_path%"
|
||||||
|
%lib_console% debug_output :enhance_path_recursive "Env Var - position=%position%"
|
||||||
|
%lib_console% debug_output :enhance_path_recursive "Env Var - max_depth=%max_depth%"
|
||||||
|
|
||||||
|
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!"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
:end_enhance_path_recursive
|
||||||
|
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 "lib_profile.cmd"
|
||||||
|
:::
|
||||||
|
:::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
|
||||||
|
|
22
vendor/lib/start-ssh-agent.sh
vendored
Normal file
22
vendor/lib/start-ssh-agent.sh
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# Copied from https://help.github.com/articles/working-with-ssh-key-passphrases
|
||||||
|
env=~/.ssh/agent.env
|
||||||
|
|
||||||
|
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
|
||||||
|
|
||||||
|
agent_start () {
|
||||||
|
(umask 077; ssh-agent >| "$env")
|
||||||
|
. "$env" >| /dev/null ; }
|
||||||
|
|
||||||
|
agent_load_env
|
||||||
|
|
||||||
|
# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
|
||||||
|
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
|
||||||
|
|
||||||
|
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
|
||||||
|
agent_start
|
||||||
|
ssh-add
|
||||||
|
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
|
||||||
|
ssh-add
|
||||||
|
fi
|
||||||
|
|
||||||
|
unset env
|
172
vendor/profile.ps1
vendored
172
vendor/profile.ps1
vendored
@ -2,25 +2,37 @@
|
|||||||
# Created as part of cmder project
|
# Created as part of cmder project
|
||||||
|
|
||||||
# !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
# !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||||
# !!! Use "%CMDER_ROOT%\config\user-profile.ps1" to add your own startup commands
|
# !!! Use "%CMDER_ROOT%\config\user_profile.ps1" to add your own startup commands
|
||||||
|
|
||||||
# We do this for Powershell as Admin Sessions because CMDER_ROOT is not beng set.
|
|
||||||
if (! $ENV:CMDER_ROOT ) {
|
|
||||||
$ENV:CMDER_ROOT = resolve-path( $ENV:ConEmuDir + "\..\.." )
|
|
||||||
}
|
|
||||||
|
|
||||||
# Remove trailing '\'
|
|
||||||
$ENV:CMDER_ROOT = (($ENV:CMDER_ROOT).trimend("\"))
|
|
||||||
|
|
||||||
# Compatibility with PS major versions <= 2
|
# Compatibility with PS major versions <= 2
|
||||||
if(!$PSScriptRoot) {
|
if(!$PSScriptRoot) {
|
||||||
$PSScriptRoot = Split-Path $Script:MyInvocation.MyCommand.Path
|
$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 ) {
|
||||||
|
$ENV:CMDER_ROOT = resolve-path( $ENV:ConEmuDir + "\..\.." )
|
||||||
|
} else {
|
||||||
|
$ENV:CMDER_ROOT = resolve-path( $PSScriptRoot + "\.." )
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove trailing '\'
|
||||||
|
$ENV:CMDER_ROOT = (($ENV:CMDER_ROOT).trimend("\"))
|
||||||
|
|
||||||
|
# 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.
|
# Add Cmder modules directory to the autoload path.
|
||||||
$CmderModulePath = Join-path $PSScriptRoot "psmodules/"
|
$CmderModulePath = Join-path $PSScriptRoot "psmodules/"
|
||||||
|
|
||||||
if( -not $env:PSModulePath.Contains($CmderModulePath) ){
|
if(-not $moduleInstallerAvailable -and -not $env:PSModulePath.Contains($CmderModulePath) ){
|
||||||
$env:PSModulePath = $env:PSModulePath.Insert(0, "$CmderModulePath;")
|
$env:PSModulePath = $env:PSModulePath.Insert(0, "$CmderModulePath;")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,36 +84,16 @@ function checkGit($Path) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Move to the wanted location
|
|
||||||
# This is either a env variable set by the user or the result of
|
|
||||||
# cmder.exe setting this variable due to a commandline argument or a "cmder here"
|
|
||||||
if ( $ENV:CMDER_START ) {
|
|
||||||
Set-Location -Path "$ENV:CMDER_START"
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Get-Module PSReadline -ErrorAction "SilentlyContinue") {
|
if (Get-Module PSReadline -ErrorAction "SilentlyContinue") {
|
||||||
Set-PSReadlineOption -ExtraPromptLineCount 1
|
Set-PSReadlineOption -ExtraPromptLineCount 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Enhance Path
|
# Enhance Path
|
||||||
$env:Path = "$Env:CMDER_ROOT\bin;$env:Path;$Env:CMDER_ROOT"
|
$env:Path = "$Env:CMDER_ROOT\bin;$Env:CMDER_ROOT\vendor\bin;$env:Path;$Env:CMDER_ROOT"
|
||||||
|
|
||||||
# Drop *.ps1 files into "$ENV:CMDER_ROOT\config\profile.d"
|
|
||||||
# to source them at startup.
|
|
||||||
if (-not (test-path "$ENV:CMDER_ROOT\config\profile.d")) {
|
|
||||||
mkdir "$ENV:CMDER_ROOT\config\profile.d"
|
|
||||||
}
|
|
||||||
|
|
||||||
pushd $ENV:CMDER_ROOT\config\profile.d
|
|
||||||
foreach ($x in ls *.ps1) {
|
|
||||||
# write-host write-host Sourcing $x
|
|
||||||
. $x
|
|
||||||
}
|
|
||||||
popd
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Prompt Section
|
# Prompt Section
|
||||||
# Users should modify their user-profile.ps1 as it will be safe from updates.
|
# Users should modify their user_profile.ps1 as it will be safe from updates.
|
||||||
#
|
#
|
||||||
|
|
||||||
# Pre assign the hooks so the first run of cmder gets a working prompt.
|
# Pre assign the hooks so the first run of cmder gets a working prompt.
|
||||||
@ -113,53 +105,6 @@ popd
|
|||||||
checkGit($pwd.ProviderPath)
|
checkGit($pwd.ProviderPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
$CmderUserProfilePath = Join-Path $env:CMDER_ROOT "config\user-profile.ps1"
|
|
||||||
if(Test-Path $CmderUserProfilePath) {
|
|
||||||
# Create this file and place your own command in there.
|
|
||||||
. "$CmderUserProfilePath"
|
|
||||||
} else {
|
|
||||||
# This multiline string cannot be indented, for this reason I've not indented the whole block
|
|
||||||
|
|
||||||
Write-Host -BackgroundColor Darkgreen -ForegroundColor White "First Run: Creating user startup file: $CmderUserProfilePath"
|
|
||||||
|
|
||||||
$UserProfileTemplate = @'
|
|
||||||
# Use this file to run your own startup commands
|
|
||||||
|
|
||||||
## Prompt Customization
|
|
||||||
<#
|
|
||||||
.SYNTAX
|
|
||||||
<PrePrompt><CMDER DEFAULT>
|
|
||||||
λ <PostPrompt> <repl input>
|
|
||||||
.EXAMPLE
|
|
||||||
<PrePrompt>N:\Documents\src\cmder [master]
|
|
||||||
λ <PostPrompt> |
|
|
||||||
#>
|
|
||||||
|
|
||||||
[ScriptBlock]$PrePrompt = {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
# Replace the cmder prompt entirely with this.
|
|
||||||
# [ScriptBlock]$CmderPrompt = {}
|
|
||||||
|
|
||||||
[ScriptBlock]$PostPrompt = {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
## <Continue to add your own>
|
|
||||||
|
|
||||||
|
|
||||||
'@
|
|
||||||
|
|
||||||
New-Item -ItemType File -Path $CmderUserProfilePath -Value $UserProfileTemplate > $null
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
# Once Created these code blocks cannot be overwritten
|
|
||||||
Set-Item -Path function:\PrePrompt -Value $PrePrompt -Options Constant
|
|
||||||
Set-Item -Path function:\CmderPrompt -Value $CmderPrompt -Options Constant
|
|
||||||
Set-Item -Path function:\PostPrompt -Value $PostPrompt -Options Constant
|
|
||||||
|
|
||||||
<#
|
<#
|
||||||
This scriptblock runs every time the prompt is returned.
|
This scriptblock runs every time the prompt is returned.
|
||||||
Explicitly use functions from MS namespace to protect from being overridden in the user session.
|
Explicitly use functions from MS namespace to protect from being overridden in the user session.
|
||||||
@ -176,6 +121,75 @@ Custom prompt functions are loaded in as constants to get the same behaviour
|
|||||||
return " "
|
return " "
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Drop *.ps1 files into "$ENV:CMDER_ROOT\config\profile.d"
|
||||||
|
# to source them at startup.
|
||||||
|
if (-not (test-path "$ENV:CMDER_ROOT\config\profile.d")) {
|
||||||
|
mkdir "$ENV:CMDER_ROOT\config\profile.d"
|
||||||
|
}
|
||||||
|
|
||||||
|
pushd $ENV:CMDER_ROOT\config\profile.d
|
||||||
|
foreach ($x in Get-ChildItem *.psm1) {
|
||||||
|
# write-host write-host Sourcing $x
|
||||||
|
Import-Module $x
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($x in Get-ChildItem *.ps1) {
|
||||||
|
# write-host write-host Sourcing $x
|
||||||
|
. $x
|
||||||
|
}
|
||||||
|
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 *.psm1) {
|
||||||
|
# write-host write-host Sourcing $x
|
||||||
|
Import-Module $x
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($x in Get-ChildItem *.ps1) {
|
||||||
|
# write-host write-host Sourcing $x
|
||||||
|
. $x
|
||||||
|
}
|
||||||
|
popd
|
||||||
|
}
|
||||||
|
|
||||||
|
# Renaming to "config\user_profile.ps1" to "user_profile.ps1" for consistency.
|
||||||
|
if (test-path "$env:CMDER_ROOT\config\user-profile.ps1") {
|
||||||
|
rename-item "$env:CMDER_ROOT\config\user-profile.ps1" user_profile.ps1
|
||||||
|
}
|
||||||
|
|
||||||
|
$CmderUserProfilePath = Join-Path $env:CMDER_ROOT "config\user_profile.ps1"
|
||||||
|
if (Test-Path $CmderUserProfilePath) {
|
||||||
|
# Create this file and place your own command in there.
|
||||||
|
. "$CmderUserProfilePath" # user_profile.ps1 is not a module DO NOT USE import-module
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($ENV:CMDER_USER_CONFIG) {
|
||||||
|
# Renaming to "$env:CMDER_USER_CONFIG\user-profile.ps1" to "user_profile.ps1" for consistency.
|
||||||
|
if (test-path "$env:CMDER_USER_CONFIG\user-profile.ps1") {
|
||||||
|
rename-item "$env:CMDER_USER_CONFIG\user-profile.ps1" user_profile.ps1
|
||||||
|
}
|
||||||
|
|
||||||
|
$env:Path = "$Env:CMDER_USER_CONFIG\bin;$env:Path"
|
||||||
|
|
||||||
|
$CmderUserProfilePath = Join-Path $ENV:CMDER_USER_CONFIG "user_profile.ps1"
|
||||||
|
if (Test-Path $CmderUserProfilePath) {
|
||||||
|
. "$CmderUserProfilePath" # user_profile.ps1 is not a module DO NOT USE import-module
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! (Test-Path $CmderUserProfilePath) ) {
|
||||||
|
Write-Host -BackgroundColor Darkgreen -ForegroundColor White "First Run: Creating user startup file: $CmderUserProfilePath"
|
||||||
|
Copy-Item "$env:CMDER_ROOT\vendor\user_profile.ps1.default" -Destination $CmderUserProfilePath
|
||||||
|
}
|
||||||
|
|
||||||
|
# Once Created these code blocks cannot be overwritten
|
||||||
|
Set-Item -Path function:\PrePrompt -Value $PrePrompt -Options Constant
|
||||||
|
Set-Item -Path function:\CmderPrompt -Value $CmderPrompt -Options Constant
|
||||||
|
Set-Item -Path function:\PostPrompt -Value $PostPrompt -Options Constant
|
||||||
|
|
||||||
# Functions can be made constant only at creation time
|
# Functions can be made constant only at creation time
|
||||||
# ReadOnly at least requires `-force` to be overwritten
|
# ReadOnly at least requires `-force` to be overwritten
|
||||||
Set-Item -Path function:\prompt -Value $Prompt -Options ReadOnly
|
Set-Item -Path function:\prompt -Value $Prompt -Options ReadOnly
|
||||||
|
81
vendor/psmodules/PsGet/PsGet.psm1
vendored
81
vendor/psmodules/PsGet/PsGet.psm1
vendored
@ -9,8 +9,16 @@
|
|||||||
#region Setup
|
#region Setup
|
||||||
|
|
||||||
Write-Debug 'Set up the global scope config variables.'
|
Write-Debug 'Set up the global scope config variables.'
|
||||||
$global:UserModuleBasePath = Join-Path -Path ([Environment]::GetFolderPath('MyDocuments')) -ChildPath 'WindowsPowerShell\Modules'
|
if ([Environment]::GetFolderPath('MyDocuments')) {
|
||||||
$global:CommonGlobalModuleBasePath = Join-Path -Path $env:CommonProgramFiles -ChildPath 'Modules'
|
$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)) {
|
if (-not (Test-Path -Path:variable:global:PsGetDirectoryUrl)) {
|
||||||
$global:PsGetDirectoryUrl = 'https://github.com/psget/psget/raw/master/Directory.xml'
|
$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
|
.PARAMETER DoNotPostInstall
|
||||||
If defined, the PostInstallHook is not executed.
|
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.
|
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'
|
Default: definition in directory file or 'Install.ps1'
|
||||||
|
|
||||||
.PARAMETER Force
|
.PARAMETER Force
|
||||||
OBSOLATE
|
OBSOLETE
|
||||||
Alternative name for 'Update'.
|
Alternative name for 'Update'.
|
||||||
|
|
||||||
.PARAMETER Startup
|
.PARAMETER Startup
|
||||||
OBSOLATE
|
OBSOLETE
|
||||||
Alternative name for 'AddToProfile'.
|
Alternative name for 'AddToProfile'.
|
||||||
|
|
||||||
.LINK
|
.LINK
|
||||||
@ -349,7 +357,7 @@ function Install-Module {
|
|||||||
.PARAMETER DoNotPostInstall
|
.PARAMETER DoNotPostInstall
|
||||||
If defined, the PostInstallHook is not executed.
|
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.
|
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.
|
Will not be check in combination with -All switch.
|
||||||
Default: 'Install.ps1'
|
Default: 'Install.ps1'
|
||||||
@ -414,7 +422,7 @@ function Update-Module {
|
|||||||
|
|
||||||
}
|
}
|
||||||
else {
|
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 {
|
try {
|
||||||
Write-Verbose "Downloading modules repository from $DirectoryUrl"
|
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
|
$StatusCode = 200
|
||||||
}
|
}
|
||||||
catch [System.Net.WebException] {
|
catch [System.Net.WebException] {
|
||||||
@ -489,7 +499,7 @@ function Get-PsGetModuleInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($StatusCode -eq 200) {
|
if ($StatusCode -eq 200) {
|
||||||
$repoXml = [xml]$repoRaw
|
$repoXml = [xml]$repoXmlTemp
|
||||||
|
|
||||||
$CacheEntry.ETag = $client.ResponseHeaders['ETag']
|
$CacheEntry.ETag = $client.ResponseHeaders['ETag']
|
||||||
if (-not (Test-Path -Path $PsGetDataPath)) {
|
if (-not (Test-Path -Path $PsGetDataPath)) {
|
||||||
@ -629,7 +639,7 @@ function Get-PsGetModuleHash {
|
|||||||
.PARAMETER DoNotPostInstall
|
.PARAMETER DoNotPostInstall
|
||||||
If defined, the PostInstallHook is not executed.
|
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.
|
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'
|
Default: definition in directory file or 'Install.ps1'
|
||||||
#>
|
#>
|
||||||
@ -754,7 +764,7 @@ function Install-ModuleFromDirectory {
|
|||||||
.PARAMETER DoNotPostInstall
|
.PARAMETER DoNotPostInstall
|
||||||
If defined, the PostInstallHook is not executed.
|
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.
|
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||||
Default: 'Install.ps1'
|
Default: 'Install.ps1'
|
||||||
#>
|
#>
|
||||||
@ -863,7 +873,7 @@ function Install-ModuleFromWeb {
|
|||||||
.PARAMETER DoNotPostInstall
|
.PARAMETER DoNotPostInstall
|
||||||
If defined, the PostInstallHook is not executed.
|
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.
|
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||||
Default: 'Install.ps1'
|
Default: 'Install.ps1'
|
||||||
#>
|
#>
|
||||||
@ -1010,7 +1020,7 @@ function Install-ModuleFromLocal {
|
|||||||
.PARAMETER DoNotPostInstall
|
.PARAMETER DoNotPostInstall
|
||||||
If defined, the PostInstallHook is not executed.
|
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.
|
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||||
Default: 'Install.ps1'
|
Default: 'Install.ps1'
|
||||||
#>
|
#>
|
||||||
@ -1311,6 +1321,13 @@ function Import-ModuleGlobally {
|
|||||||
Write-Verbose "Importing installed module '$ModuleName' from '$($installedModule.ModuleBase)'"
|
Write-Verbose "Importing installed module '$ModuleName' from '$($installedModule.ModuleBase)'"
|
||||||
Import-Module -Name $ModuleBase -Global -Force:$Force
|
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))
|
$IdentityExtension = [System.IO.Path]::GetExtension((Get-ModuleFile -Path $ModuleBase -ModuleName $ModuleName))
|
||||||
if ($IdentityExtension -eq '.dll') {
|
if ($IdentityExtension -eq '.dll') {
|
||||||
# import module twice for binary modules to workaround PowerShell bug:
|
# import module twice for binary modules to workaround PowerShell bug:
|
||||||
@ -1514,7 +1531,7 @@ function Invoke-DownloadModuleFromWeb {
|
|||||||
.PARAMETER DoNotPostInstall
|
.PARAMETER DoNotPostInstall
|
||||||
If defined, the PostInstallHook is not executed.
|
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.
|
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||||
#>
|
#>
|
||||||
function Install-ModuleToDestination {
|
function Install-ModuleToDestination {
|
||||||
@ -1628,7 +1645,7 @@ function Install-ModuleToDestination {
|
|||||||
|
|
||||||
$isDestinationInPSModulePath = $env:PSModulePath.Contains($Destination)
|
$isDestinationInPSModulePath = $env:PSModulePath.Contains($Destination)
|
||||||
if ($isDestinationInPSModulePath) {
|
if ($isDestinationInPSModulePath) {
|
||||||
if (-not (Get-Module $ModuleName -ListAvailable)) {
|
if (-not (Get-Module $InstallWithModuleName -ListAvailable)) {
|
||||||
throw 'For some unexpected reasons module was not installed.'
|
throw 'For some unexpected reasons module was not installed.'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1639,14 +1656,14 @@ function Install-ModuleToDestination {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($Update) {
|
if ($Update) {
|
||||||
Write-Host "Module $ModuleName was successfully updated." -Foreground Green
|
Write-Host "Module $InstallWithModuleName was successfully updated." -Foreground Green
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Write-Host "Module $ModuleName was successfully installed." -Foreground Green
|
Write-Host "Module $InstallWithModuleName was successfully installed." -Foreground Green
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-not $DoNotImport) {
|
if (-not $DoNotImport) {
|
||||||
Import-ModuleGlobally -ModuleName:$ModuleName -ModuleBase:$targetFolderPath -Force:$Update
|
Import-ModuleGlobally -ModuleName:$InstallWithModuleName -ModuleBase:$targetFolderPath -Force:$Update
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($isDestinationInPSModulePath -and $AddToProfile) {
|
if ($isDestinationInPSModulePath -and $AddToProfile) {
|
||||||
@ -1657,8 +1674,8 @@ function Install-ModuleToDestination {
|
|||||||
New-Item $PROFILE -Type File -Force -ErrorAction Stop
|
New-Item $PROFILE -Type File -Force -ErrorAction Stop
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Select-String $PROFILE -Pattern "Import-Module $ModuleName") {
|
if (Select-String $PROFILE -Pattern "Import-Module $InstallWithModuleName") {
|
||||||
Write-Verbose "Import-Module $ModuleName command already in your profile"
|
Write-Verbose "Import-Module $InstallWithModuleName command already in your profile"
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$signature = Get-AuthenticodeSignature -FilePath $PROFILE
|
$signature = Get-AuthenticodeSignature -FilePath $PROFILE
|
||||||
@ -1667,8 +1684,8 @@ function Install-ModuleToDestination {
|
|||||||
Write-Error "PsGet cannot modify code-signed profile '$PROFILE'."
|
Write-Error "PsGet cannot modify code-signed profile '$PROFILE'."
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Write-Verbose "Add Import-Module $ModuleName command to the profile"
|
Write-Verbose "Add Import-Module $InstallWithModuleName command to the profile"
|
||||||
"`nImport-Module $ModuleName" | Add-Content $PROFILE
|
"`nImport-Module $InstallWithModuleName" | Add-Content $PROFILE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1736,7 +1753,7 @@ function Test-ModuleInstalledAndImport {
|
|||||||
return $false
|
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
|
$installedModule = $targetModule
|
||||||
}
|
}
|
||||||
elseif ((Split-Path $installedModule.ModuleBase) -ne $Destination) {
|
elseif ((Split-Path $installedModule.ModuleBase) -ne $Destination) {
|
||||||
@ -1801,7 +1818,7 @@ function Expand-ZipModule {
|
|||||||
|
|
||||||
# Check if powershell v3+ and .net v4.5 is available
|
# Check if powershell v3+ and .net v4.5 is available
|
||||||
$netFailed = $true
|
$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...'
|
Write-Debug 'Attempting unzip using the .NET Framework...'
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -1910,14 +1927,20 @@ function Invoke-DownloadNuGetPackage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Write-Verbose "Querying '$Source' repository for package with Id '$NuGetPackageId'"
|
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 {
|
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)
|
$XmlDoc = [xml]$WebClient.DownloadString($Url)
|
||||||
}
|
}
|
||||||
catch {
|
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) {
|
if ($PackageVersion) {
|
||||||
@ -2110,7 +2133,7 @@ function TabExpansion {
|
|||||||
Get-PsGetModuleInfo -ModuleName "$lastword*" | % { $_.Id } | sort -Unique
|
Get-PsGetModuleInfo -ModuleName "$lastword*" | % { $_.Id } | sort -Unique
|
||||||
}
|
}
|
||||||
elseif ( Test-Path -Path Function:\$tabExpansionBackup ) {
|
elseif ( Test-Path -Path Function:\$tabExpansionBackup ) {
|
||||||
& $teBackup $line $lastWord
|
& $tabExpansionBackup $line $lastWord
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
16
vendor/sources.json
vendored
16
vendor/sources.json
vendored
@ -1,22 +1,22 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "git-for-windows",
|
"name": "git-for-windows",
|
||||||
"version": "v2.10.2.windows.1",
|
"version": "v2.21.0.windows.1",
|
||||||
"url": "https://github.com/git-for-windows/git/releases/download/v2.10.2.windows.1/PortableGit-2.10.2-32-bit.7z.exe"
|
"url": "https://github.com/git-for-windows/git/releases/download/v2.21.0.windows.1/PortableGit-2.21.0-64-bit.7z.exe"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "clink",
|
"name": "clink",
|
||||||
"version": "0.4.8",
|
"version": "0.4.9",
|
||||||
"url": "https://github.com/mridgers/clink/releases/download/0.4.8/clink_0.4.8.zip"
|
"url": "https://github.com/mridgers/clink/releases/download/0.4.9/clink_0.4.9.zip"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "conemu-maximus5",
|
"name": "conemu-maximus5",
|
||||||
"version": "161022",
|
"version": "180626",
|
||||||
"url": "https://github.com/Maximus5/ConEmu/releases/download/v16.10.22/ConEmuPack.161022.7z"
|
"url": "https://github.com/Maximus5/ConEmu/releases/download/v18.06.26/ConEmuPack.180626.7z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "clink-completions",
|
"name": "clink-completions",
|
||||||
"version": "0.3.1",
|
"version": "0.3.3",
|
||||||
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/0.3.1.zip"
|
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/0.3.3.zip"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
19
vendor/user_profile.cmd.default
vendored
Normal file
19
vendor/user_profile.cmd.default
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
:: use this file to run your own startup commands
|
||||||
|
:: use in front of the command to prevent printing the command
|
||||||
|
|
||||||
|
:: uncomment this to have the ssh agent load when cmder starts
|
||||||
|
:: call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd" /k exit
|
||||||
|
|
||||||
|
:: uncomment the next two lines to use pageant as the ssh authentication agent
|
||||||
|
:: SET SSH_AUTH_SOCK=/tmp/.ssh-pageant-auth-sock
|
||||||
|
:: call "%GIT_INSTALL_ROOT%/cmd/start-ssh-pageant.cmd"
|
||||||
|
|
||||||
|
:: you can add your plugins to the cmder path like so
|
||||||
|
:: set "PATH=%CMDER_ROOT%\vendor\whatever;%PATH%"
|
||||||
|
|
||||||
|
:: arguments in this batch are passed from init.bat, you can quickly parse them like so:
|
||||||
|
:: more useage can be seen by typing "cexec /?"
|
||||||
|
|
||||||
|
:: %ccall% "/customOption" "command/program"
|
||||||
|
|
||||||
|
@echo off
|
25
vendor/user_profile.ps1.default
vendored
Normal file
25
vendor/user_profile.ps1.default
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# Use this file to run your own startup commands
|
||||||
|
|
||||||
|
## Prompt Customization
|
||||||
|
<#
|
||||||
|
.SYNTAX
|
||||||
|
<PrePrompt><CMDER DEFAULT>
|
||||||
|
λ <PostPrompt> <repl input>
|
||||||
|
.EXAMPLE
|
||||||
|
<PrePrompt>N:\Documents\src\cmder [master]
|
||||||
|
λ <PostPrompt> |
|
||||||
|
#>
|
||||||
|
|
||||||
|
[ScriptBlock]$PrePrompt = {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Replace the cmder prompt entirely with this.
|
||||||
|
# [ScriptBlock]$CmderPrompt = {}
|
||||||
|
|
||||||
|
[ScriptBlock]$PostPrompt = {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
## <Continue to add your own>
|
||||||
|
|
7
vendor/user_profile.sh.default
vendored
Normal file
7
vendor/user_profile.sh.default
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# use this file to run your own startup commands for msys2 bash'
|
||||||
|
|
||||||
|
# To add a new vendor to the path, do something like:
|
||||||
|
# export PATH=${CMDER_ROOT}/vendor/whatever:${PATH}
|
||||||
|
|
||||||
|
# Uncomment this to have the ssh agent load with the first bash terminal
|
||||||
|
# . "${CMDER_ROOT}/vendor/lib/start-ssh-agent.sh"
|
Loading…
Reference in New Issue
Block a user