mirror of
https://github.com/cmderdev/cmder.git
synced 2025-11-09 21:59:08 +08:00
Compare commits
215 Commits
v1.3.21
...
copilot/op
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b254bad5de | ||
|
|
49b7eee23a | ||
|
|
f90d276657 | ||
|
|
e99dc4d7e6 | ||
|
|
00636cf013 | ||
|
|
7f0cfac498 | ||
|
|
dc3b142b32 | ||
|
|
9c3bbe9b24 | ||
|
|
be44bac956 | ||
|
|
4fb6bed907 | ||
|
|
f4e68b0388 | ||
|
|
a824b721cb | ||
|
|
153f7310a1 | ||
|
|
3172771f15 | ||
|
|
ef46d6465d | ||
|
|
eabadf96dc | ||
|
|
7b248bc9a3 | ||
|
|
697c122faf | ||
|
|
2ce0146d6e | ||
|
|
5dfa14ccce | ||
|
|
4d259ba84c | ||
|
|
bbd7507b4e | ||
|
|
b9246177c0 | ||
|
|
a8d897f633 | ||
|
|
304b8c7a05 | ||
|
|
fc24040e5e | ||
|
|
a1def7195e | ||
|
|
456ddcc59e | ||
|
|
f6adae5fb2 | ||
|
|
c039d977c2 | ||
|
|
60045d8c4f | ||
|
|
9b64482f37 | ||
|
|
bc970e7f78 | ||
|
|
7df73096d6 | ||
|
|
96842bf09e | ||
|
|
ca068f5696 | ||
|
|
a0d085f93e | ||
|
|
538662ce56 | ||
|
|
f9d402d447 | ||
|
|
88ca59f82e | ||
|
|
d7fd2244cf | ||
|
|
667820105e | ||
|
|
6b26f5b9b4 | ||
|
|
d37d173702 | ||
|
|
1f70cfa508 | ||
|
|
641a3b55fc | ||
|
|
89ec06b387 | ||
|
|
b20f084fbc | ||
|
|
8ab1f11fa4 | ||
|
|
73739407b1 | ||
|
|
aa6b28a2b0 | ||
|
|
d01ab39181 | ||
|
|
a513d08ab8 | ||
|
|
fb01ee7bb9 | ||
|
|
0cbe1e8d8c | ||
|
|
614f314e41 | ||
|
|
6f6c21dcae | ||
|
|
9653adc5f9 | ||
|
|
f6bc623284 | ||
|
|
006567cdbc | ||
|
|
75d6973ccf | ||
|
|
1bcba81bec | ||
|
|
e7f102bdee | ||
|
|
a7c0e0642d | ||
|
|
1940e97ddc | ||
|
|
066203dbdc | ||
|
|
545331a336 | ||
|
|
08ce81609a | ||
|
|
218400a4b8 | ||
|
|
173b86fbc8 | ||
|
|
8ec4789e35 | ||
|
|
43ab19a74d | ||
|
|
c7116bd533 | ||
|
|
05552dc51c | ||
|
|
c6bfd6f276 | ||
|
|
1d51c4f402 | ||
|
|
aff4ad259f | ||
|
|
cb76868411 | ||
|
|
abcb1a1aa1 | ||
|
|
93785426a6 | ||
|
|
00763846a2 | ||
|
|
1737bcdeb7 | ||
|
|
126347025f | ||
|
|
7ceacb63dd | ||
|
|
510178852d | ||
|
|
4d15730d05 | ||
|
|
25ccfeed77 | ||
|
|
42315d8cec | ||
|
|
c6dbb89129 | ||
|
|
1cfba25beb | ||
|
|
2007baef6e | ||
|
|
e220d114b2 | ||
|
|
4204faa063 | ||
|
|
540532f126 | ||
|
|
41195ad8dd | ||
|
|
28f6098d48 | ||
|
|
b56a6d43cb | ||
|
|
d2f7136ef8 | ||
|
|
4daff054eb | ||
|
|
45fd0c2666 | ||
|
|
5145a15139 | ||
|
|
92419a48fc | ||
|
|
c9b77f618a | ||
|
|
a2e4884ea1 | ||
|
|
62a46140eb | ||
|
|
ae518cded8 | ||
|
|
4ad76d8274 | ||
|
|
8a199bf47b | ||
|
|
457d99da0b | ||
|
|
52762636dc | ||
|
|
ed6c9b2bc9 | ||
|
|
7753622897 | ||
|
|
18950135ef | ||
|
|
b59647b570 | ||
|
|
2135fce19f | ||
|
|
219c879582 | ||
|
|
289bcf03a5 | ||
|
|
50bc05fee7 | ||
|
|
8d916a4446 | ||
|
|
5e22496aca | ||
|
|
8b6add75cf | ||
|
|
8498447878 | ||
|
|
0874f4be44 | ||
|
|
ffb93b1804 | ||
|
|
092dc4d323 | ||
|
|
39afad1743 | ||
|
|
d0cb6b5c23 | ||
|
|
9ee2bef7cd | ||
|
|
a409a1cce8 | ||
|
|
3b8e87de84 | ||
|
|
faf66542b4 | ||
|
|
d3497f5eb0 | ||
|
|
98a1e9621e | ||
|
|
4f32d23c30 | ||
|
|
ad5c80bcd2 | ||
|
|
9a135947af | ||
|
|
1b9a1e5b6f | ||
|
|
1adaab963b | ||
|
|
29650960aa | ||
|
|
41f0454b05 | ||
|
|
3ea9728ffd | ||
|
|
a01fb4c444 | ||
|
|
4b0344172a | ||
|
|
4104a5612f | ||
|
|
5e219fe34e | ||
|
|
ff7621c1da | ||
|
|
9be28807cb | ||
|
|
5d4c45d099 | ||
|
|
e2168a361c | ||
|
|
f517494dc4 | ||
|
|
7542376213 | ||
|
|
84ee96c64f | ||
|
|
ad804eda44 | ||
|
|
15addb87ee | ||
|
|
e9750ab73d | ||
|
|
47258fbd2b | ||
|
|
37c41e80df | ||
|
|
59e14a1783 | ||
|
|
34f2aabb8e | ||
|
|
5a90558714 | ||
|
|
845720e25a | ||
|
|
c1f8dfdb27 | ||
|
|
55676399d5 | ||
|
|
48e4dff882 | ||
|
|
a605ec520d | ||
|
|
5fab87f4d6 | ||
|
|
c9153c96bf | ||
|
|
74381ecd19 | ||
|
|
50c3ea4ab3 | ||
|
|
8d39f79a90 | ||
|
|
7b880efda4 | ||
|
|
3f53d1b927 | ||
|
|
4aefd0bb71 | ||
|
|
7daeb465e8 | ||
|
|
6180aa53b3 | ||
|
|
23488fcbb2 | ||
|
|
d838f861af | ||
|
|
d80202c791 | ||
|
|
5e3b70338d | ||
|
|
a4ea326a62 | ||
|
|
73034f9e31 | ||
|
|
8875f77573 | ||
|
|
1d1e815c91 | ||
|
|
36ad85c7b7 | ||
|
|
bbb50f99f8 | ||
|
|
4efbe0bd62 | ||
|
|
476fd2d324 | ||
|
|
b3af7c3983 | ||
|
|
d82fece61e | ||
|
|
6bd2e260f0 | ||
|
|
c9d2b33792 | ||
|
|
9e87f375f1 | ||
|
|
84262c4476 | ||
|
|
0b01ea6f63 | ||
|
|
af6472cb57 | ||
|
|
fd12ece9af | ||
|
|
b5ae5eb711 | ||
|
|
c9e872e826 | ||
|
|
f99480fd49 | ||
|
|
834940cddb | ||
|
|
5135370ec1 | ||
|
|
92a3c9c215 | ||
|
|
f22943212b | ||
|
|
dc2bc9bda7 | ||
|
|
a03ad615f1 | ||
|
|
8b3f38ad21 | ||
|
|
9e55c48200 | ||
|
|
3b6e1cbf5f | ||
|
|
e1bf703f50 | ||
|
|
2e9b512102 | ||
|
|
9bbc97c981 | ||
|
|
4766425ad3 | ||
|
|
470808838f | ||
|
|
328f4b3073 | ||
|
|
691addb95c |
11
.github/dependabot.yml
vendored
Normal file
11
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# To get started with Dependabot version updates, you'll need to specify which
|
||||||
|
# package ecosystems to update and where the package manifests are located.
|
||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions" # See documentation for possible values
|
||||||
|
directory: "/" # Location of package manifests
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
33
.github/workflows/branches.yml
vendored
Normal file
33
.github/workflows/branches.yml
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
name: Update branches
|
||||||
|
|
||||||
|
# Controls when the action will run.
|
||||||
|
on:
|
||||||
|
# Triggers the workflow on push events for the development branch
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||||
|
jobs:
|
||||||
|
# This job updates the development branch with the master branch
|
||||||
|
update-development:
|
||||||
|
# The type of runner that the job will run on
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
|
steps:
|
||||||
|
# Checks-out the repository under $GITHUB_WORKSPACE, so the job can access it
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
fetch-depth: 0 # fetch all history for all branches and tags
|
||||||
|
|
||||||
|
# Runs a single command using the runners shell
|
||||||
|
- name: Merge master into development
|
||||||
|
run: |
|
||||||
|
git config user.name "${{ github.actor }}"
|
||||||
|
git config user.email "${{ github.actor }}@users.noreply.github.com"
|
||||||
|
git checkout development
|
||||||
|
git merge --no-ff master
|
||||||
|
git push origin development
|
||||||
32
.github/workflows/build.yml
vendored
32
.github/workflows/build.yml
vendored
@@ -8,8 +8,10 @@ name: Build Cmder
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ "master" ]
|
branches: [ "master" ]
|
||||||
|
tags:
|
||||||
|
- "v*"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ "master" ]
|
branches: [ "master", "development" ]
|
||||||
|
|
||||||
#---------------------------------#
|
#---------------------------------#
|
||||||
# environment configuration #
|
# environment configuration #
|
||||||
@@ -28,15 +30,17 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
name: Build Project
|
name: Build Project
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
discussions: write
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code (Action from GitHub)
|
- name: Check out repository code (Action from GitHub)
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Add MSBuild to PATH
|
- name: Add MSBuild to PATH
|
||||||
uses: microsoft/setup-msbuild@v1
|
uses: microsoft/setup-msbuild@v2
|
||||||
|
|
||||||
- name: Build Cmder Launcher
|
- name: Build Cmder Launcher
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
@@ -49,26 +53,38 @@ jobs:
|
|||||||
run: .\pack.ps1 -verbose
|
run: .\pack.ps1 -verbose
|
||||||
|
|
||||||
- name: Upload artifact (cmder.zip)
|
- name: Upload artifact (cmder.zip)
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
path: build/cmder.zip
|
path: build/cmder.zip
|
||||||
name: cmder.zip
|
name: cmder.zip
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
- name: Upload artifact (cmder.7z)
|
- name: Upload artifact (cmder.7z)
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
path: build/cmder.7z
|
path: build/cmder.7z
|
||||||
name: cmder.7z
|
name: cmder.7z
|
||||||
|
|
||||||
- name: Upload artifact (cmder_mini.zip)
|
- name: Upload artifact (cmder_mini.zip)
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
path: build/cmder_mini.zip
|
path: build/cmder_mini.zip
|
||||||
name: cmder_mini.zip
|
name: cmder_mini.zip
|
||||||
|
|
||||||
- name: Upload artifact (hashes.txt)
|
- name: Upload artifact (hashes.txt)
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
path: build/hashes.txt
|
path: build/hashes.txt
|
||||||
name: hashes.txt
|
name: hashes.txt
|
||||||
|
|
||||||
|
- name: Create Release
|
||||||
|
uses: softprops/action-gh-release@v2
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
build/cmder.zip
|
||||||
|
build/cmder.7z
|
||||||
|
build/cmder_mini.zip
|
||||||
|
build/hashes.txt
|
||||||
|
draft: true
|
||||||
|
generate_release_notes: true
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
|||||||
73
.github/workflows/codeql.yml
vendored
Normal file
73
.github/workflows/codeql.yml
vendored
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
|
||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "master", "development" ]
|
||||||
|
paths-ignore:
|
||||||
|
- '**/*.md'
|
||||||
|
- '**/*.txt'
|
||||||
|
- '.github/**'
|
||||||
|
- '**/.gitignore'
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [ "master", "development" ]
|
||||||
|
paths-ignore:
|
||||||
|
- '**/*.md'
|
||||||
|
- '**/*.txt'
|
||||||
|
- '.github/**'
|
||||||
|
- '**/.gitignore'
|
||||||
|
schedule:
|
||||||
|
- cron: '30 19 * * 0'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: windows-latest
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'cpp' ]
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||||
|
# Use only 'java' to analyze code written in Java, Kotlin or both
|
||||||
|
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
|
||||||
|
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v4
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
|
||||||
|
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||||
|
# queries: security-extended,security-and-quality
|
||||||
|
|
||||||
|
- name: Add MSBuild to PATH
|
||||||
|
uses: microsoft/setup-msbuild@v2
|
||||||
|
|
||||||
|
- name: Build Cmder Launcher
|
||||||
|
shell: pwsh
|
||||||
|
working-directory: scripts
|
||||||
|
run: .\build.ps1 -Compile -verbose
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v4
|
||||||
|
with:
|
||||||
|
category: "/language:${{matrix.language}}"
|
||||||
16
.github/workflows/tests.yml
vendored
16
.github/workflows/tests.yml
vendored
@@ -4,9 +4,21 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
- development
|
||||||
|
paths-ignore:
|
||||||
|
- '**/*.md'
|
||||||
|
- '**/*.txt'
|
||||||
|
- '.github/**'
|
||||||
|
- '**/.gitignore'
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
- development
|
||||||
|
paths-ignore:
|
||||||
|
- '**/*.md'
|
||||||
|
- '**/*.txt'
|
||||||
|
- '.github/**'
|
||||||
|
- '**/.gitignore'
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
@@ -26,7 +38,7 @@ jobs:
|
|||||||
continue-on-error: false
|
continue-on-error: false
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v5
|
||||||
- name: Initialize vendors
|
- name: Initialize vendors
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
working-directory: scripts
|
working-directory: scripts
|
||||||
@@ -36,7 +48,7 @@ jobs:
|
|||||||
cmd /c vendor\init.bat /v /d /t
|
cmd /c vendor\init.bat /v /d /t
|
||||||
- name: Testing PowerShell
|
- name: Testing PowerShell
|
||||||
run: |
|
run: |
|
||||||
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "Invoke-Expression '. ''vendor\profile.ps1'''"
|
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "$env:CMDER_DEBUG='1'; . 'vendor\profile.ps1'"
|
||||||
- name: Testing Bash
|
- name: Testing Bash
|
||||||
run: |
|
run: |
|
||||||
bash vendor/cmder.sh
|
bash vendor/cmder.sh
|
||||||
|
|||||||
4
.github/workflows/vendor.yml
vendored
4
.github/workflows/vendor.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@ jobs:
|
|||||||
Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ')
|
Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ')
|
||||||
echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||||
|
|
||||||
- uses: peter-evans/create-pull-request@v4
|
- uses: peter-evans/create-pull-request@v7
|
||||||
if: env.COUNT_UPDATED > 0
|
if: env.COUNT_UPDATED > 0
|
||||||
with:
|
with:
|
||||||
title: 'Updates to `${{ env.COUNT_UPDATED }}` vendored dependencies'
|
title: 'Updates to `${{ env.COUNT_UPDATED }}` vendored dependencies'
|
||||||
|
|||||||
@@ -352,6 +352,10 @@ Cmder by default comes with a vendored ConEmu installation as the underlying ter
|
|||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
|
⚠ *Note:* Cmder includes built-in support for Windows Terminal directory tracking via OSC 9;9 sequences. This enables "Duplicate Tab" and "Split Pane" features to preserve the current working directory for both `cmd.exe` and PowerShell sessions.
|
||||||
|
|
||||||
|
⚠ *Note:* Cmder also includes built-in support for [Windows Terminal shell integration](https://learn.microsoft.com/en-us/windows/terminal/tutorials/shell-integration) via OSC 133 sequences (A, B, C, D) for PowerShell sessions. This enables features like command navigation (jump between commands), command selection, visual command separators, command exit code tracking, and improved command history management in Windows Terminal.
|
||||||
|
|
||||||
For instructions on how to integrate Cmder with your IDE, please read our [Wiki section](https://github.com/cmderdev/cmder/wiki#cmder-integration).
|
For instructions on how to integrate Cmder with your IDE, please read our [Wiki section](https://github.com/cmderdev/cmder/wiki#cmder-integration).
|
||||||
|
|
||||||
## Upgrading
|
## Upgrading
|
||||||
|
|||||||
24
SECURITY.md
Normal file
24
SECURITY.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| 1.3.x | :white_check_mark: |
|
||||||
|
| < 1.3 | ❎ |
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
If you discover a security issue in our project, please report it to [MartiUK](https://github.com/MartiUK). We will acknowledge your email within 24 hours and provide a more detailed response within 48 hours. We will try to fix the issue as soon as possible and inform you when a new version is released.
|
||||||
|
|
||||||
|
Please include as much of the information listed below as you can to help us better understand and resolve the issue:
|
||||||
|
|
||||||
|
- The nature of the issue
|
||||||
|
- The affected source file(s) with full paths
|
||||||
|
- The location of the vulnerable code (tag/branch/commit or direct URL)
|
||||||
|
- Any special configuration needed to reproduce the issue
|
||||||
|
- Detailed steps to reproduce the issue
|
||||||
|
- Proof-of-concept or exploit code (if possible)
|
||||||
|
- The impact of the issue, including how an attacker could exploit it
|
||||||
|
|
||||||
|
Please do not disclose the vulnerability publicly until we have resolved it.
|
||||||
60
appveyor.yml
60
appveyor.yml
@@ -1,60 +0,0 @@
|
|||||||
#---------------------------------#
|
|
||||||
# general configuration #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
version: 1.0.{build}-{branch}
|
|
||||||
|
|
||||||
# branches to build
|
|
||||||
branches:
|
|
||||||
# blacklist
|
|
||||||
except:
|
|
||||||
- gh-pages
|
|
||||||
|
|
||||||
#---------------------------------#
|
|
||||||
# environment configuration #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
# Operating system (build VM template)
|
|
||||||
os: Visual Studio 2022
|
|
||||||
|
|
||||||
#---------------------------------#
|
|
||||||
# build configuration #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
build_script:
|
|
||||||
- ps: cd scripts; .\build.ps1 -Compile -verbose
|
|
||||||
|
|
||||||
after_build:
|
|
||||||
- ps: .\pack.ps1 -verbose
|
|
||||||
|
|
||||||
# Disable test search, since we don't have any.
|
|
||||||
test: off
|
|
||||||
|
|
||||||
#---------------------------------#
|
|
||||||
# artifacts #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
artifacts:
|
|
||||||
- path: build\cmder.zip
|
|
||||||
name: cmderzip
|
|
||||||
|
|
||||||
- path: build\cmder.7z
|
|
||||||
name: cmder7z
|
|
||||||
|
|
||||||
- path: build\cmder_mini.zip
|
|
||||||
name: cmdermini
|
|
||||||
|
|
||||||
- path: build\hashes.txt
|
|
||||||
name: hashes
|
|
||||||
|
|
||||||
#---------------------------------#
|
|
||||||
# notifications #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
notifications:
|
|
||||||
# Webhook
|
|
||||||
- provider: Webhook
|
|
||||||
url: https://webhooks.gitter.im/e/d673abb1b2e659dcd625
|
|
||||||
on_build_success: true
|
|
||||||
on_build_failure: true
|
|
||||||
on_build_status_changed: true
|
|
||||||
@@ -425,11 +425,6 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
|
|||||||
swprintf_s(args, L"%s /single", args);
|
swprintf_s(args, L"%s /single", args);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!streqi(cmderTask.c_str(), L""))
|
|
||||||
{
|
|
||||||
swprintf_s(args, L"%s /run {%s}", args, cmderTask.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!streqi(cmderTitle.c_str(), L""))
|
if (!streqi(cmderTitle.c_str(), L""))
|
||||||
{
|
{
|
||||||
swprintf_s(args, L"%s /title \"%s\"", args, cmderTitle.c_str());
|
swprintf_s(args, L"%s /title \"%s\"", args, cmderTitle.c_str());
|
||||||
@@ -445,6 +440,14 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
|
|||||||
swprintf_s(args, L"%s %s", args, cmderConEmuArgs.c_str());
|
swprintf_s(args, L"%s %s", args, cmderConEmuArgs.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The `/run` arg and its value MUST be the last arg of ConEmu
|
||||||
|
// see : https://conemu.github.io/en/ConEmuArgs.html
|
||||||
|
// > This must be the last used switch (excepting -new_console and -cur_console)
|
||||||
|
if (!streqi(cmderTask.c_str(), L""))
|
||||||
|
{
|
||||||
|
swprintf_s(args, L"%s /run {%s}", args, cmderTask.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
||||||
if (wcscmp(userConfigDirPath, configDirPath) != 0)
|
if (wcscmp(userConfigDirPath, configDirPath) != 0)
|
||||||
{
|
{
|
||||||
@@ -466,9 +469,6 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
|
|||||||
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)
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* WARNING: do NOT modify this file! the content of this file should be
|
* WARNING: This file should NOT be manually modified!
|
||||||
* automatically genereted before AppVeyor builds using the
|
* The contents will be automatically generated using the `.ps1` PowerShell scripts,
|
||||||
* respective .ps1 Powershell scripts.
|
* during builds by the CI.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
.\build.ps1 -SourcesPath '~/custom/vendors.json'
|
.\build.ps1 -SourcesPath '~/custom/vendors.json'
|
||||||
|
|
||||||
Build cmder with your own packages. See vendor/sources.json for the syntax you need to copy.
|
Build Cmder with your own packages. See vendor/sources.json for the syntax you need to copy.
|
||||||
.NOTES
|
.NOTES
|
||||||
AUTHORS
|
AUTHORS
|
||||||
Samuel Vasko, Jack Bennett
|
Samuel Vasko, Jack Bennett
|
||||||
@@ -60,7 +60,7 @@ Param(
|
|||||||
[switch]$Compile
|
[switch]$Compile
|
||||||
)
|
)
|
||||||
|
|
||||||
# Get the scripts and cmder root dirs we are building in.
|
# Get the scripts and Cmder root dirs we are building in.
|
||||||
$cmder_root = Resolve-Path "$PSScriptRoot\.."
|
$cmder_root = Resolve-Path "$PSScriptRoot\.."
|
||||||
|
|
||||||
# Dot source util functions into this scope
|
# Dot source util functions into this scope
|
||||||
@@ -79,7 +79,7 @@ if ($Compile) {
|
|||||||
|
|
||||||
Write-Verbose "Building the launcher..."
|
Write-Verbose "Building the launcher..."
|
||||||
|
|
||||||
# Referene: https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
|
# Reference: https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
|
||||||
msbuild CmderLauncher.vcxproj /t:Clean,Build /p:configuration=Release /m
|
msbuild CmderLauncher.vcxproj /t:Clean,Build /p:configuration=Release /m
|
||||||
|
|
||||||
if ($LastExitCode -ne 0) {
|
if ($LastExitCode -ne 0) {
|
||||||
|
|||||||
@@ -2,18 +2,18 @@
|
|||||||
.Synopsis
|
.Synopsis
|
||||||
Pack Cmder
|
Pack Cmder
|
||||||
.DESCRIPTION
|
.DESCRIPTION
|
||||||
Use this script to pack cmder into release archives
|
Use this script to pack Cmder into release archives
|
||||||
|
|
||||||
You will need to make this script executable by setting your Powershell Execution Policy to Remote signed
|
You will need to make this script executable by setting your Powershell Execution Policy to Remote signed
|
||||||
Then unblock the script for execution with UnblockFile .\pack.ps1
|
Then unblock the script for execution with UnblockFile .\pack.ps1
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
.\pack.ps1
|
.\pack.ps1
|
||||||
|
|
||||||
Creates default archives for cmder
|
Creates default archives for Cmder
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
.\pack.ps1 -verbose
|
.\pack.ps1 -verbose
|
||||||
|
|
||||||
Creates default archives for cmder with plenty of information
|
Creates default archives for Cmder with plenty of information
|
||||||
.NOTES
|
.NOTES
|
||||||
AUTHORS
|
AUTHORS
|
||||||
Samuel Vasko, Jack Bennett, Martin Kemp
|
Samuel Vasko, Jack Bennett, Martin Kemp
|
||||||
|
|||||||
@@ -32,7 +32,11 @@ Param(
|
|||||||
# -whatif switch to not actually make changes
|
# -whatif switch to not actually make changes
|
||||||
|
|
||||||
# Path to the vendor configuration source file
|
# Path to the vendor configuration source file
|
||||||
[string]$sourcesPath = "$PSScriptRoot\..\vendor\sources.json"
|
[string]$sourcesPath = "$PSScriptRoot\..\vendor\sources.json",
|
||||||
|
|
||||||
|
# Include pre-release versions (RC, beta, alpha, etc.)
|
||||||
|
# By default, only stable releases are considered
|
||||||
|
[switch]$IncludePrerelease = $false
|
||||||
)
|
)
|
||||||
|
|
||||||
# Get the root directory of the cmder project.
|
# Get the root directory of the cmder project.
|
||||||
@@ -79,11 +83,39 @@ function Match-Filenames {
|
|||||||
return $position
|
return $position
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Checks if a release is a pre-release based on GitHub API flag and version tag keywords
|
||||||
|
# Pre-release keywords include: -rc (release candidate), -beta, -alpha, -preview, -pre
|
||||||
|
function Test-IsPrerelease {
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
$release
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check if marked as pre-release by GitHub
|
||||||
|
if ($release.prerelease -eq $true) {
|
||||||
|
return $true
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check for common pre-release keywords in tag name
|
||||||
|
# This catches versions like v2.50.0-rc, v1.0.0-beta, v1.0.0-alpha, etc.
|
||||||
|
$prereleaseKeywords = @('-rc', '-beta', '-alpha', '-preview', '-pre')
|
||||||
|
foreach ($keyword in $prereleaseKeywords) {
|
||||||
|
if ($release.tag_name -ilike "*$keyword*") {
|
||||||
|
return $true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
|
||||||
# Uses the GitHub api in order to fetch the current download links for the latest releases of the repo.
|
# Uses the GitHub api in order to fetch the current download links for the latest releases of the repo.
|
||||||
function Fetch-DownloadUrl {
|
function Fetch-DownloadUrl {
|
||||||
param (
|
param (
|
||||||
[Parameter(Mandatory = $true)]
|
[Parameter(Mandatory = $true)]
|
||||||
$urlStr
|
$urlStr,
|
||||||
|
|
||||||
|
[Parameter(Mandatory = $false)]
|
||||||
|
[bool]$includePrerelease = $false
|
||||||
)
|
)
|
||||||
|
|
||||||
$url = [uri] $urlStr
|
$url = [uri] $urlStr
|
||||||
@@ -104,7 +136,7 @@ function Fetch-DownloadUrl {
|
|||||||
|
|
||||||
$headers = @{}
|
$headers = @{}
|
||||||
|
|
||||||
if ($($env:GITHUB_TOKEN)) {
|
if ($env:GITHUB_TOKEN) {
|
||||||
$headers["Authorization"] = "token $($env:GITHUB_TOKEN)"
|
$headers["Authorization"] = "token $($env:GITHUB_TOKEN)"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,6 +159,13 @@ function Fetch-DownloadUrl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
:loop foreach ($i in $info) {
|
:loop foreach ($i in $info) {
|
||||||
|
# Skip pre-release versions unless explicitly included
|
||||||
|
# Pre-releases include RC (Release Candidate), beta, alpha, and other test versions
|
||||||
|
if (-not $includePrerelease -and (Test-IsPrerelease $i)) {
|
||||||
|
Write-Verbose "Skipping pre-release version: $($i.tag_name)"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if (-not ($i.assets -is [array])) {
|
if (-not ($i.assets -is [array])) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -164,12 +203,26 @@ function Fetch-DownloadUrl {
|
|||||||
|
|
||||||
# Special case for archive downloads of repository
|
# Special case for archive downloads of repository
|
||||||
if (($null -eq $downloadLinks) -or (-not $downloadLinks)) {
|
if (($null -eq $downloadLinks) -or (-not $downloadLinks)) {
|
||||||
if ((($p | ForEach-Object { $_.Trim('/') }) -contains "archive") -and $info[0].tag_name) {
|
if ((($p | ForEach-Object { $_.Trim('/') }) -contains "archive")) {
|
||||||
for ($i = 0; $i -lt $p.Length; $i++) {
|
# Find the first release that matches our pre-release filtering criteria
|
||||||
if ($p[$i].Trim('/') -eq "archive") {
|
$selectedRelease = $null
|
||||||
$p[$i + 1] = $info[0].tag_name + ".zip"
|
foreach ($release in $info) {
|
||||||
$downloadLinks = $url.Scheme + "://" + $url.Host + ($p -join '')
|
# Apply the same filtering logic
|
||||||
return $downloadLinks
|
if (-not $includePrerelease -and (Test-IsPrerelease $release)) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
# Use the first release that passes the filter
|
||||||
|
$selectedRelease = $release
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($selectedRelease -and $selectedRelease.tag_name) {
|
||||||
|
for ($i = 0; $i -lt $p.Length; $i++) {
|
||||||
|
if ($p[$i].Trim('/') -eq "archive") {
|
||||||
|
$p[$i + 1] = $selectedRelease.tag_name + ".zip"
|
||||||
|
$downloadLinks = $url.Scheme + "://" + $url.Host + ($p -join '')
|
||||||
|
return $downloadLinks
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -215,7 +268,7 @@ foreach ($s in $sources) {
|
|||||||
|
|
||||||
Write-Verbose "Old Link: $($s.url)"
|
Write-Verbose "Old Link: $($s.url)"
|
||||||
|
|
||||||
$downloadUrl = Fetch-DownloadUrl $s.url
|
$downloadUrl = Fetch-DownloadUrl $s.url -includePrerelease $IncludePrerelease
|
||||||
|
|
||||||
if (($null -eq $downloadUrl) -or ($downloadUrl -eq '')) {
|
if (($null -eq $downloadUrl) -or ($downloadUrl -eq '')) {
|
||||||
Write-Verbose "No new links were found"
|
Write-Verbose "No new links were found"
|
||||||
|
|||||||
@@ -172,13 +172,13 @@ function Register-Cmder() {
|
|||||||
# Text for the context menu item.
|
# Text for the context menu item.
|
||||||
$MenuText = "Cmder Here"
|
$MenuText = "Cmder Here"
|
||||||
|
|
||||||
, # Defaults to the current cmder directory when run from cmder.
|
, # Defaults to the current Cmder directory when run from Cmder.
|
||||||
$PathToExe = (Join-Path $env:CMDER_ROOT "cmder.exe")
|
$PathToExe = (Join-Path $env:CMDER_ROOT "cmder.exe")
|
||||||
|
|
||||||
, # Commands the context menu will execute.
|
, # Commands the context menu will execute.
|
||||||
$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
|
||||||
|
|||||||
2
vendor/bin/cmder_shell.cmd
vendored
2
vendor/bin/cmder_shell.cmd
vendored
@@ -9,5 +9,5 @@ if "%cmder_init%" == "1" (
|
|||||||
)
|
)
|
||||||
|
|
||||||
pushd "%CMDER_ROOT%"
|
pushd "%CMDER_ROOT%"
|
||||||
call "%CMDER_ROOT%\vendor\init.bat" /f
|
call "%CMDER_ROOT%\vendor\init.bat" /f %*
|
||||||
popd
|
popd
|
||||||
|
|||||||
14
vendor/bin/excd.cmd
vendored
14
vendor/bin/excd.cmd
vendored
@@ -1,6 +1,8 @@
|
|||||||
@if "%~1"=="/?" (@cd %*)
|
@echo off
|
||||||
@set excd=%*
|
set excd=%*
|
||||||
@set excd=%excd:"=%
|
set excd=%excd:"=%
|
||||||
@if "%excd:~0,1%"=="~" (@set excd=%userprofile%\%excd:~1%)
|
set excd_param=/d
|
||||||
@if not "%~1"=="/d" (@set excd_param="/d") else (@set excd_param=)
|
if /i "%excd:~0,2%"=="/d" set "excd=%excd:~2%"
|
||||||
@cd %excd_param% "%excd%"
|
if "%excd:~0,1%"=="~" (set excd=%userprofile%\%excd:~1%)
|
||||||
|
if "%excd:~0,1%"=="/" (set excd_param=)
|
||||||
|
cd %excd_param% %excd%
|
||||||
|
|||||||
291
vendor/clink.lua
vendored
291
vendor/clink.lua
vendored
@@ -3,7 +3,12 @@
|
|||||||
-- !!! 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
|
-- luacheck: globals CMDER_SESSION
|
||||||
|
-- luacheck: globals uah_color cwd_color lamb_color clean_color dirty_color conflict_color unknown_color
|
||||||
|
-- luacheck: globals prompt_homeSymbol prompt_lambSymbol prompt_type prompt_useHomeSymbol prompt_useUserAtHost
|
||||||
|
-- luacheck: globals prompt_singleLine prompt_includeVersionControl
|
||||||
|
-- luacheck: globals prompt_overrideGitStatusOptIn
|
||||||
|
-- luacheck: globals clink io.popenyield os.isdir settings.get
|
||||||
|
|
||||||
-- 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
|
||||||
@@ -46,11 +51,37 @@ local function get_unknown_color()
|
|||||||
end
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Makes a string safe to use as the replacement in string.gsub
|
-- Escapes special characters in a string.gsub `find` parameter, so that it
|
||||||
|
-- can be matched as a literal plain text string, i.e. disable Lua pattern
|
||||||
|
-- matching. See "Patterns" (https://www.lua.org/manual/5.2/manual.html#6.4.1).
|
||||||
|
-- @param {string} text Text to escape
|
||||||
|
-- @returns {string} Escaped text
|
||||||
---
|
---
|
||||||
local function verbatim(s)
|
local function escape_gsub_find_arg(text)
|
||||||
s = string.gsub(s, "%%", "%%%%")
|
return text and text:gsub("([-+*?.%%()%[%]$^])", "%%%1") or ""
|
||||||
return s
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Escapes special characters in a string.gsub `replace` parameter, so that it
|
||||||
|
-- can be replaced as a literal plain text string, i.e. disable Lua pattern
|
||||||
|
-- matching. See "Patterns" (https://www.lua.org/manual/5.2/manual.html#6.4.1).
|
||||||
|
-- @param {string} text Text to escape
|
||||||
|
-- @returns {string} Escaped text
|
||||||
|
---
|
||||||
|
local function escape_gsub_replace_arg(text)
|
||||||
|
return text and text:gsub("%%", "%%%%") or ""
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Perform string.sub, but disable Lua pattern matching and just treat both
|
||||||
|
-- the `find` and `replace` parameters as a literal plain text replacement.
|
||||||
|
-- @param {string} str Text in which to perform find and replace
|
||||||
|
-- @param {string} find Text to find (plain text; not a Lua pattern)
|
||||||
|
-- @param {string} replace Replacement text (plain text; not a Lua pattern)
|
||||||
|
-- @returns {string} Copy of the input `str` with `find` replaced by `replace`
|
||||||
|
---
|
||||||
|
local function gsub_plain(str, find, replace)
|
||||||
|
return string.gsub(str, escape_gsub_find_arg(find), escape_gsub_replace_arg(replace))
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Extracts only the folder name from the input Path
|
-- Extracts only the folder name from the input Path
|
||||||
@@ -148,15 +179,15 @@ local function set_prompt_filter()
|
|||||||
end
|
end
|
||||||
|
|
||||||
if prompt_useHomeSymbol and string.find(cwd, clink.get_env("HOME")) then
|
if prompt_useHomeSymbol and string.find(cwd, clink.get_env("HOME")) then
|
||||||
cwd = string.gsub(cwd, clink.get_env("HOME"), prompt_homeSymbol)
|
cwd = gsub_plain(cwd, clink.get_env("HOME"), prompt_homeSymbol)
|
||||||
end
|
end
|
||||||
|
|
||||||
uah = ''
|
local uah = ''
|
||||||
if prompt_useUserAtHost then
|
if prompt_useUserAtHost then
|
||||||
uah = clink.get_env("USERNAME") .. "@" .. clink.get_env("COMPUTERNAME") .. ' '
|
uah = clink.get_env("USERNAME") .. "@" .. clink.get_env("COMPUTERNAME") .. ' '
|
||||||
end
|
end
|
||||||
|
|
||||||
cr = "\n"
|
local cr = "\n"
|
||||||
if prompt_singleLine then
|
if prompt_singleLine then
|
||||||
cr = ' '
|
cr = ' '
|
||||||
end
|
end
|
||||||
@@ -170,15 +201,15 @@ local function set_prompt_filter()
|
|||||||
|
|
||||||
local version_control = prompt_includeVersionControl and "{git}{hg}{svn}" or ""
|
local version_control = prompt_includeVersionControl and "{git}{hg}{svn}" or ""
|
||||||
|
|
||||||
prompt = "{uah}{cwd}" .. version_control .. cr .. get_lamb_color() .. "{env}{lamb}\x1b[0m "
|
local prompt = "{uah}{cwd}" .. version_control .. cr .. get_lamb_color() .. "{env}{lamb}\x1b[0m "
|
||||||
prompt = string.gsub(prompt, "{uah}", uah)
|
prompt = gsub_plain(prompt, "{uah}", uah)
|
||||||
prompt = string.gsub(prompt, "{cwd}", cwd)
|
prompt = gsub_plain(prompt, "{cwd}", cwd)
|
||||||
prompt = string.gsub(prompt, "{env}", env)
|
prompt = gsub_plain(prompt, "{env}", env)
|
||||||
clink.prompt.value = string.gsub(prompt, "{lamb}", prompt_lambSymbol)
|
clink.prompt.value = gsub_plain(prompt, "{lamb}", prompt_lambSymbol)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function percent_prompt_filter()
|
local function percent_prompt_filter()
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{percent}", "%%")
|
clink.prompt.value = gsub_plain(clink.prompt.value, "{percent}", "%")
|
||||||
end
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -191,7 +222,7 @@ end
|
|||||||
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)
|
||||||
local function pathname(path)
|
local function pathname(path) -- luacheck: ignore 432
|
||||||
local prefix = ""
|
local prefix = ""
|
||||||
local i = path:find("[\\/:][^\\/:]*$")
|
local i = path:find("[\\/:][^\\/:]*$")
|
||||||
if i then
|
if i then
|
||||||
@@ -201,14 +232,14 @@ local function get_dir_contains(path, dirname)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Navigates up one level
|
-- Navigates up one level
|
||||||
local function up_one_level(path)
|
local function up_one_level(path) -- luacheck: ignore 432
|
||||||
if path == nil then path = '.' end
|
if path == nil then path = '.' end
|
||||||
if path == '.' then path = clink.get_cwd() end
|
if path == '.' then path = clink.get_cwd() end
|
||||||
return pathname(path)
|
return pathname(path)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Checks if provided directory contains git directory
|
-- Checks if provided directory contains git directory
|
||||||
local function has_specified_dir(path, specified_dir)
|
local function has_specified_dir(path, specified_dir) -- luacheck: ignore 432
|
||||||
if path == nil then path = '.' end
|
if path == nil then path = '.' end
|
||||||
local found_dirs = clink.find_dirs(path..'/'..specified_dir)
|
local found_dirs = clink.find_dirs(path..'/'..specified_dir)
|
||||||
if #found_dirs > 0 then return true end
|
if #found_dirs > 0 then return true end
|
||||||
@@ -236,7 +267,7 @@ end
|
|||||||
local function get_git_dir(path)
|
local function get_git_dir(path)
|
||||||
|
|
||||||
-- return parent path for specified entry (either file or directory)
|
-- return parent path for specified entry (either file or directory)
|
||||||
local function pathname(path)
|
local function pathname(path) -- luacheck: ignore 432
|
||||||
local prefix = ""
|
local prefix = ""
|
||||||
local i = path:find("[\\/:][^\\/:]*$")
|
local i = path:find("[\\/:][^\\/:]*$")
|
||||||
if i then
|
if i then
|
||||||
@@ -255,7 +286,8 @@ local function get_git_dir(path)
|
|||||||
local gitfile = io.open(dir..'/.git')
|
local gitfile = io.open(dir..'/.git')
|
||||||
if not gitfile then return false end
|
if not gitfile then return false end
|
||||||
|
|
||||||
local git_dir = gitfile:read():match('gitdir: (.*)')
|
local line = gitfile:read() or ''
|
||||||
|
local git_dir = line:match('gitdir: (.*)')
|
||||||
gitfile:close()
|
gitfile:close()
|
||||||
|
|
||||||
if os.isdir then -- only available in Clink v1.0.0 and higher
|
if os.isdir then -- only available in Clink v1.0.0 and higher
|
||||||
@@ -303,6 +335,9 @@ local function get_git_branch(git_dir)
|
|||||||
local HEAD = head_file:read()
|
local HEAD = head_file:read()
|
||||||
head_file:close()
|
head_file:close()
|
||||||
|
|
||||||
|
-- If HEAD is missing, something is wrong.
|
||||||
|
if not HEAD then return end
|
||||||
|
|
||||||
-- 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/(.+)')
|
||||||
@@ -315,13 +350,11 @@ end
|
|||||||
-- @return {false|mercurial branch information}
|
-- @return {false|mercurial branch information}
|
||||||
---
|
---
|
||||||
local function get_hg_branch()
|
local function get_hg_branch()
|
||||||
-- Return the branch information. The default is to get just the
|
-- Return the branch information.
|
||||||
-- branch name, but you could e.g. use the "hg-prompt" extension to
|
local file = io.popen("hg branch 2>nul")
|
||||||
-- get more information, such as any applied mq patches. Here's an
|
if not file then
|
||||||
-- example of that:
|
return false
|
||||||
-- local cmd = "hg prompt \"{branch}{status}{|{patch}}{update}\""
|
end
|
||||||
local cmd = "hg branch 2>nul"
|
|
||||||
local file = io.popen(cmd)
|
|
||||||
|
|
||||||
for line in file:lines() do
|
for line in file:lines() do
|
||||||
local m = line:match("(.+)$")
|
local m = line:match("(.+)$")
|
||||||
@@ -339,8 +372,12 @@ end
|
|||||||
-- Find out current branch
|
-- Find out current branch
|
||||||
-- @return {false|svn branch name}
|
-- @return {false|svn branch name}
|
||||||
---
|
---
|
||||||
local function get_svn_branch(svn_dir)
|
local function get_svn_branch()
|
||||||
local file = io_popenyield("svn info 2>nul")
|
local file = io_popenyield("svn info 2>nul")
|
||||||
|
if not file then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
for line in file:lines() do
|
for line in file:lines() do
|
||||||
local m = line:match("^Relative URL:")
|
local m = line:match("^Relative URL:")
|
||||||
if m then
|
if m then
|
||||||
@@ -359,12 +396,16 @@ end
|
|||||||
---
|
---
|
||||||
local function get_git_status()
|
local function get_git_status()
|
||||||
local file = io_popenyield("git --no-optional-locks status --porcelain 2>nul")
|
local file = io_popenyield("git --no-optional-locks status --porcelain 2>nul")
|
||||||
|
if not file then
|
||||||
|
return {}
|
||||||
|
end
|
||||||
|
|
||||||
local conflict_found = false
|
local conflict_found = false
|
||||||
local is_status = true
|
local is_status = true
|
||||||
for line in file:lines() do
|
for line in file:lines() do
|
||||||
local code = line:sub(1, 2)
|
local code = line:sub(1, 2)
|
||||||
-- print (string.format("code: %s, line: %s", code, line))
|
-- print (string.format("code: %s, line: %s", code, line))
|
||||||
if code == "DD" or code == "AU" or code == "UD" or code == "UA" or code == "DU" or code == "AA" or code == "UU" then
|
if code == "DD" or code == "AU" or code == "UD" or code == "UA" or code == "DU" or code == "AA" or code == "UU" then -- luacheck: no max line length
|
||||||
is_status = false
|
is_status = false
|
||||||
conflict_found = true
|
conflict_found = true
|
||||||
break
|
break
|
||||||
@@ -374,23 +415,29 @@ local function get_git_status()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
file:close()
|
file:close()
|
||||||
|
|
||||||
return { status = is_status, conflict = conflict_found }
|
return { status = is_status, conflict = conflict_found }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Get the status of working dir
|
-- Get the status of working dir
|
||||||
-- @return {bool}
|
-- @return {bool}
|
||||||
---
|
---
|
||||||
local function get_hg_status()
|
local function get_hg_status()
|
||||||
local file = io.popen("hg status -0")
|
-- The default is to just use the branch name, but you could e.g. use the
|
||||||
for line in file:lines() do
|
-- "hg-prompt" extension to get more information, such as any applied mq
|
||||||
file:close()
|
-- patches. Here's an example of that:
|
||||||
return false
|
-- "hg prompt \"{branch}{status}{|{patch}}{update}\""
|
||||||
|
local pipe = io_popenyield("hg status -amrd 2>&1")
|
||||||
|
if not pipe then
|
||||||
|
return { error = true }
|
||||||
end
|
end
|
||||||
file:close()
|
|
||||||
|
|
||||||
return true
|
local output = pipe:read('*all')
|
||||||
|
pipe:close()
|
||||||
|
|
||||||
|
local dirty = (output ~= nil and output ~= "")
|
||||||
|
return { clean = not dirty }
|
||||||
end
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -398,14 +445,18 @@ end
|
|||||||
-- @return {bool}
|
-- @return {bool}
|
||||||
---
|
---
|
||||||
local function get_svn_status()
|
local function get_svn_status()
|
||||||
local file = io_popenyield("svn status -q")
|
local file = io_popenyield("svn status -q 2>nul")
|
||||||
for line in file:lines() do
|
if not file then
|
||||||
|
return { error = true }
|
||||||
|
end
|
||||||
|
|
||||||
|
for line in file:lines() do -- luacheck: ignore 512, no unused
|
||||||
file:close()
|
file:close()
|
||||||
return false
|
return { clean = false }
|
||||||
end
|
end
|
||||||
file:close()
|
file:close()
|
||||||
|
|
||||||
return true
|
return { clean = true }
|
||||||
end
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -433,24 +484,28 @@ local function get_git_status_setting()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local gitStatusConfig = io_popenyield("git --no-pager config cmder.status 2>nul")
|
local gitStatusConfig = io_popenyield("git --no-pager config cmder.status 2>nul")
|
||||||
for line in gitStatusConfig:lines() do
|
if gitStatusConfig then
|
||||||
if string.match(line, 'false') then
|
for line in gitStatusConfig:lines() do
|
||||||
gitStatusConfig:close()
|
if string.match(line, 'false') then
|
||||||
last_git_status_setting = false
|
gitStatusConfig:close()
|
||||||
return false
|
last_git_status_setting = false
|
||||||
|
return false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
gitStatusConfig:close()
|
||||||
end
|
end
|
||||||
gitStatusConfig:close()
|
|
||||||
|
|
||||||
local gitCmdStatusConfig = io_popenyield("git --no-pager config cmder.cmdstatus 2>nul")
|
local gitCmdStatusConfig = io_popenyield("git --no-pager config cmder.cmdstatus 2>nul")
|
||||||
for line in gitCmdStatusConfig:lines() do
|
if gitCmdStatusConfig then
|
||||||
if string.match(line, 'false') then
|
for line in gitCmdStatusConfig:lines() do
|
||||||
gitCmdStatusConfig:close()
|
if string.match(line, 'false') then
|
||||||
last_git_status_setting = false
|
gitCmdStatusConfig:close()
|
||||||
return false
|
last_git_status_setting = false
|
||||||
|
return false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
gitCmdStatusConfig:close()
|
||||||
end
|
end
|
||||||
gitCmdStatusConfig:close()
|
|
||||||
|
|
||||||
last_git_status_setting = true
|
last_git_status_setting = true
|
||||||
return true
|
return true
|
||||||
@@ -481,14 +536,6 @@ local function git_prompt_filter()
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Colors for git status
|
|
||||||
local colors = {
|
|
||||||
clean = get_clean_color(),
|
|
||||||
dirty = get_dirty_color(),
|
|
||||||
conflict = get_conflict_color(),
|
|
||||||
nostatus = get_unknown_color()
|
|
||||||
}
|
|
||||||
|
|
||||||
local git_dir = get_git_dir()
|
local git_dir = get_git_dir()
|
||||||
local color
|
local color
|
||||||
if git_dir then
|
if git_dir then
|
||||||
@@ -508,27 +555,40 @@ local function git_prompt_filter()
|
|||||||
local gitConflict = gitInfo.conflict
|
local gitConflict = gitInfo.conflict
|
||||||
|
|
||||||
if gitStatus == nil then
|
if gitStatus == nil then
|
||||||
color = colors.nostatus
|
color = get_unknown_color()
|
||||||
elseif gitStatus then
|
elseif gitStatus then
|
||||||
color = colors.clean
|
color = get_clean_color()
|
||||||
else
|
else
|
||||||
color = colors.dirty
|
color = get_dirty_color()
|
||||||
end
|
end
|
||||||
|
|
||||||
if gitConflict then
|
if gitConflict then
|
||||||
color = colors.conflict
|
color = get_conflict_color()
|
||||||
end
|
end
|
||||||
|
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", " "..color.."("..verbatim(branch)..")")
|
local result = " "..color.."("..branch..")"
|
||||||
|
clink.prompt.value = gsub_plain(clink.prompt.value, "{git}", result)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- No git present or not in git file
|
-- No git present or not in git file
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", "")
|
clink.prompt.value = gsub_plain(clink.prompt.value, "{git}", "")
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function get_hg_info_table()
|
||||||
|
local info = clink_promptcoroutine(function ()
|
||||||
|
return get_hg_status() or {}
|
||||||
|
end)
|
||||||
|
if not info then
|
||||||
|
info = cached_info.hg_info or {}
|
||||||
|
else
|
||||||
|
cached_info.hg_info = info
|
||||||
|
end
|
||||||
|
return info
|
||||||
|
end
|
||||||
|
|
||||||
local function hg_prompt_filter()
|
local function hg_prompt_filter()
|
||||||
|
|
||||||
-- Don't do any hg processing if the prompt doesn't want to show hg info.
|
-- Don't do any hg processing if the prompt doesn't want to show hg info.
|
||||||
@@ -536,39 +596,50 @@ local function hg_prompt_filter()
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
local result = ""
|
|
||||||
|
|
||||||
local hg_dir = get_hg_dir()
|
local hg_dir = get_hg_dir()
|
||||||
if hg_dir then
|
if hg_dir then
|
||||||
-- Colors for mercurial status
|
local branch = get_hg_branch()
|
||||||
local colors = {
|
if branch and
|
||||||
clean = get_clean_color(),
|
|
||||||
dirty = get_dirty_color(),
|
|
||||||
nostatus = get_unknown_color()
|
|
||||||
}
|
|
||||||
local output = get_hg_branch()
|
|
||||||
|
|
||||||
-- 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
|
string.sub(branch,1,7) ~= "abort: " and -- not an HG working copy
|
||||||
(not string.find(branch, "is not recognized")) then -- 'hg' not in path
|
(not string.find(branch, "is not recognized")) then -- 'hg' not in path
|
||||||
local color = colors.clean
|
-- If in a different repo or branch than last time, discard cached info
|
||||||
|
if cached_info.hg_dir ~= hg_dir or cached_info.hg_branch ~= branch then
|
||||||
|
cached_info.hg_info = nil
|
||||||
|
cached_info.hg_dir = hg_dir
|
||||||
|
cached_info.hg_branch = branch
|
||||||
|
end
|
||||||
|
|
||||||
local pipe = io.popen("hg status -amrd 2>&1")
|
local hgInfo = get_hg_info_table()
|
||||||
local output = pipe:read('*all')
|
|
||||||
local rc = { pipe:close() }
|
|
||||||
|
|
||||||
if output ~= nil and output ~= "" then color = colors.dirty end
|
local color
|
||||||
result = color .. "(" .. branch .. ")"
|
if not hgInfo or hgInfo.error then
|
||||||
|
color = get_unknown_color()
|
||||||
|
elseif hgInfo.clean then
|
||||||
|
color = get_clean_color()
|
||||||
|
else
|
||||||
|
color = get_dirty_color()
|
||||||
|
end
|
||||||
|
|
||||||
|
local result = " "..color.."("..branch..")"
|
||||||
|
clink.prompt.value = gsub_plain(clink.prompt.value, "{hg}", result)
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", " "..verbatim(result))
|
-- No hg present or not in hg repo
|
||||||
return false
|
clink.prompt.value = gsub_plain(clink.prompt.value, "{hg}", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
local function get_svn_info_table()
|
||||||
|
local info = clink_promptcoroutine(function ()
|
||||||
|
return get_svn_status() or {}
|
||||||
|
end)
|
||||||
|
if not info then
|
||||||
|
info = cached_info.svn_info or {}
|
||||||
|
else
|
||||||
|
cached_info.svn_info = info
|
||||||
|
end
|
||||||
|
return info
|
||||||
end
|
end
|
||||||
|
|
||||||
local function svn_prompt_filter()
|
local function svn_prompt_filter()
|
||||||
@@ -578,18 +649,10 @@ local function svn_prompt_filter()
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Colors for svn status
|
|
||||||
local colors = {
|
|
||||||
clean = get_clean_color(),
|
|
||||||
dirty = get_dirty_color(),
|
|
||||||
nostatus = get_unknown_color()
|
|
||||||
}
|
|
||||||
|
|
||||||
local svn_dir = get_svn_dir()
|
local svn_dir = get_svn_dir()
|
||||||
if svn_dir then
|
if svn_dir then
|
||||||
-- if we're inside of svn repo then try to detect current branch
|
-- if we're inside of svn repo then try to detect current branch
|
||||||
local branch = get_svn_branch()
|
local branch = get_svn_branch()
|
||||||
local color
|
|
||||||
if branch then
|
if branch then
|
||||||
-- If in a different repo or branch than last time, discard cached info
|
-- If in a different repo or branch than last time, discard cached info
|
||||||
if cached_info.svn_dir ~= svn_dir or cached_info.svn_branch ~= branch then
|
if cached_info.svn_dir ~= svn_dir or cached_info.svn_branch ~= branch then
|
||||||
@@ -597,37 +660,25 @@ local function svn_prompt_filter()
|
|||||||
cached_info.svn_dir = svn_dir
|
cached_info.svn_dir = svn_dir
|
||||||
cached_info.svn_branch = branch
|
cached_info.svn_branch = branch
|
||||||
end
|
end
|
||||||
-- Get the svn status using coroutine if available and option is enabled. Otherwise use a blocking call
|
|
||||||
local svnStatus
|
local svnInfo = get_svn_info_table()
|
||||||
if clink.promptcoroutine and io.popenyield and settings.get("prompt.async") and prompt_overrideSvnStatusOptIn then
|
|
||||||
svnStatus = clink_promptcoroutine(function ()
|
local color
|
||||||
return get_svn_status()
|
if not svnInfo or svnInfo.error then
|
||||||
end)
|
color = get_unknown_color()
|
||||||
-- If the status result is pending, use the cached version instead, otherwise store it to the cache
|
elseif svnInfo.clean then
|
||||||
if svnStatus == nil then
|
color = get_clean_color()
|
||||||
svnStatus = cached_info.svn_info
|
|
||||||
else
|
|
||||||
cached_info.svn_info = svnStatus
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
svnStatus = get_svn_status()
|
color = get_dirty_color()
|
||||||
end
|
end
|
||||||
|
|
||||||
if svnStatus == nil then
|
clink.prompt.value = gsub_plain(clink.prompt.value, "{svn}", " "..color.."("..branch..")")
|
||||||
color = colors.nostatus
|
|
||||||
elseif svnStatus then
|
|
||||||
color = colors.clean
|
|
||||||
else
|
|
||||||
color = colors.dirty
|
|
||||||
end
|
|
||||||
|
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", " "..color.."("..verbatim(branch)..")")
|
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- No svn present or not in svn file
|
-- No svn present or not in svn file
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", "")
|
clink.prompt.value = gsub_plain(clink.prompt.value, "{svn}", "")
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
10
vendor/clink_settings.default
vendored
10
vendor/clink_settings.default
vendored
@@ -1,6 +1,10 @@
|
|||||||
# For explanation of these and other settings see:
|
# For explanation of these and other settings see:
|
||||||
# https://chrisant996.github.io/clink/clink.html
|
# https://chrisant996.github.io/clink/clink.html
|
||||||
|
|
||||||
|
# name: Expand envvars when completing
|
||||||
|
# type: boolean
|
||||||
|
match.expand_envvars = True
|
||||||
|
|
||||||
# name: Sets how command history expansion is applied
|
# name: Sets how command history expansion is applied
|
||||||
# type: enum
|
# type: enum
|
||||||
# options: off,on,not_squoted,not_dquoted,not_quoted
|
# options: off,on,not_squoted,not_dquoted,not_quoted
|
||||||
@@ -8,15 +12,15 @@ history.expand_mode = not_dquoted
|
|||||||
|
|
||||||
# name: Skip adding lines prefixed with whitespace
|
# name: Skip adding lines prefixed with whitespace
|
||||||
# type: boolean
|
# type: boolean
|
||||||
history.ignore_space = False
|
history.ignore_space = True
|
||||||
|
|
||||||
# name: The number of history lines to save
|
# name: The number of history lines to save
|
||||||
# type: integer
|
# type: integer
|
||||||
history.max_lines = 10000
|
history.max_lines = 25000
|
||||||
|
|
||||||
# name: Share history between instances
|
# name: Share history between instances
|
||||||
# type: boolean
|
# type: boolean
|
||||||
history.shared = True
|
history.shared = False
|
||||||
|
|
||||||
# name: Auto-answer terminate prompt
|
# name: Auto-answer terminate prompt
|
||||||
# type: enum
|
# type: enum
|
||||||
|
|||||||
116
vendor/cmder.sh
vendored
116
vendor/cmder.sh
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
# 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,
|
||||||
@@ -7,93 +8,130 @@
|
|||||||
# 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 {
|
# Source all .sh scripts in a given directory
|
||||||
unset profile_d_scripts
|
# Args: $1 - directory path containing .sh scripts to source
|
||||||
pushd "${1}" >/dev/null
|
run_profile_d() {
|
||||||
|
local profile_d_scripts
|
||||||
|
pushd "${1}" >/dev/null || return
|
||||||
|
# shellcheck disable=SC2035
|
||||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||||
|
|
||||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
if [ -n "${profile_d_scripts}" ]; then
|
||||||
for x in ${profile_d_scripts} ; do
|
for script in ${profile_d_scripts}; do
|
||||||
# echo Sourcing "${1}/${x}"...
|
# echo Sourcing "${1}/${script}"...
|
||||||
. "${1}/${x}"
|
# shellcheck disable=SC1090
|
||||||
|
. "${1}/${script}"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
popd >/dev/null
|
popd >/dev/null || return
|
||||||
}
|
}
|
||||||
|
|
||||||
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
|
# Detect and set CMDER_ROOT for bash admin sessions
|
||||||
if [ "$CMDER_ROOT" == "" ] ; then
|
# Converts Windows paths to Unix paths if needed
|
||||||
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
|
# ConEmuDir is set by ConEmu/Cmder environment
|
||||||
|
if [ -z "$CMDER_ROOT" ]; then
|
||||||
|
# Try to get CMDER_ROOT from ConEmuDir
|
||||||
|
case "$ConEmuDir" in
|
||||||
|
*\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." && pwd );;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# If still not set, derive from script location (vendor -> root)
|
||||||
|
if [ -z "$CMDER_ROOT" ]; then
|
||||||
|
CMDER_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
case "$CMDER_ROOT" in *\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";; esac
|
case "$CMDER_ROOT" in
|
||||||
|
*\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Remove any trailing '/'
|
# Remove any trailing '/' from CMDER_ROOT
|
||||||
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
|
CMDER_ROOT="${CMDER_ROOT%/}"
|
||||||
|
|
||||||
|
# Exit early if CMDER_ROOT is not set
|
||||||
|
if [ -z "$CMDER_ROOT" ]; then
|
||||||
|
echo "Warning: CMDER_ROOT is not set. Cmder integration skipped."
|
||||||
|
# shellcheck disable=SC2317
|
||||||
|
return 2>/dev/null || exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
export CMDER_ROOT
|
export CMDER_ROOT
|
||||||
|
|
||||||
if [ -f "/c/Program Files/Git/cmd/git.exe" ] ; then
|
# Detect Git installation location
|
||||||
|
if [ -f "/c/Program Files/Git/cmd/git.exe" ]; then
|
||||||
GIT_INSTALL_ROOT="/c/Program Files/Git"
|
GIT_INSTALL_ROOT="/c/Program Files/Git"
|
||||||
elif [ -f "/c/Program Files(x86)/Git/cmd/git.exe" ] ; then
|
elif [ -f "/c/Program Files(x86)/Git/cmd/git.exe" ]; then
|
||||||
GIT_INSTALL_ROOT="/c/Program Files(x86)/Git"
|
GIT_INSTALL_ROOT="/c/Program Files(x86)/Git"
|
||||||
elif [ -f "${CMDER_ROOT}/vendor/git-for-windows/cmd/git.exe" ] ; then
|
elif [ -f "${CMDER_ROOT}/vendor/git-for-windows/cmd/git.exe" ]; then
|
||||||
GIT_INSTALL_ROOT=${CMDER_ROOT}/vendor/git-for-windows
|
GIT_INSTALL_ROOT="${CMDER_ROOT}/vendor/git-for-windows"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! "$PATH" =~ "${GIT_INSTALL_ROOT}/bin:" ]] ; then
|
# Add Git to PATH if not already present
|
||||||
|
if [[ -n "${GIT_INSTALL_ROOT}" && ! "$PATH" =~ ${GIT_INSTALL_ROOT}/bin: ]]; then
|
||||||
PATH="${GIT_INSTALL_ROOT}/bin:$PATH"
|
PATH="${GIT_INSTALL_ROOT}/bin:$PATH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Add Cmder directories to PATH
|
||||||
PATH="${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/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"
|
# Create profile.d directory if it doesn't exist
|
||||||
# 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
|
# Source all .sh scripts in profile.d directories
|
||||||
runProfiled "${CMDER_ROOT}/config/profile.d"
|
if [ -d "${CMDER_ROOT}/config/profile.d" ]; then
|
||||||
|
run_profile_d "${CMDER_ROOT}/config/profile.d"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
|
if [ -d "${CMDER_USER_CONFIG}/profile.d" ]; then
|
||||||
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
run_profile_d "${CMDER_USER_CONFIG}/profile.d"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
# Rename legacy user-profile.sh to user_profile.sh for consistency
|
||||||
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
|
if [ -f "$CMDER_ROOT/config/user-profile.sh" ]; then
|
||||||
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
|
# Source user profile from CMDER_ROOT config
|
||||||
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
|
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ]; then
|
||||||
. "${CMDER_ROOT}/config/user_profile.sh"
|
. "${CMDER_ROOT}/config/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
# Handle CMDER_USER_CONFIG if set
|
||||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
||||||
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
|
# Rename legacy 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"
|
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
|
export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
|
||||||
|
|
||||||
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
|
# Source user profile from CMDER_USER_CONFIG
|
||||||
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
|
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "${CmderUserProfilePath}" ] ; then
|
# Determine the user profile path for creation if needed
|
||||||
echo Creating user startup file: "${CmderUserProfilePath}"
|
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
||||||
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
|
cmder_user_profile_path="${CMDER_USER_CONFIG}/user_profile.sh"
|
||||||
|
else
|
||||||
|
cmder_user_profile_path="${CMDER_ROOT}/config/user_profile.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create user profile from default template if it doesn't exist
|
||||||
|
if [ ! -f "${cmder_user_profile_path}" ] && [ -f "${CMDER_ROOT}/vendor/user_profile.sh.default" ]; then
|
||||||
|
echo "Creating user startup file: ${cmder_user_profile_path}"
|
||||||
|
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${cmder_user_profile_path}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Source the users .bashrc file if it exists
|
# Source the users .bashrc file if it exists
|
||||||
if [ -f "${HOME}/.bashrc" ] ; then
|
if [ -f "${HOME}/.bashrc" ]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
. "${HOME}/.bashrc"
|
. "${HOME}/.bashrc"
|
||||||
fi
|
fi
|
||||||
|
|||||||
123
vendor/cmder_exinit
vendored
123
vendor/cmder_exinit
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
# 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
|
||||||
@@ -22,92 +23,130 @@
|
|||||||
# # 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 {
|
# Source all .sh or .zsh scripts in a given directory based on shell type
|
||||||
unset profile_d_scripts
|
# Args: $1 - directory path containing shell scripts to source
|
||||||
pushd "${1}" >/dev/null
|
run_profile_d() {
|
||||||
|
local profile_d_scripts
|
||||||
|
pushd "${1}" >/dev/null || return
|
||||||
|
|
||||||
if [ ! "x${ZSH_VERSION}" = "x" ]; then
|
if [ -n "${ZSH_VERSION}" ]; then
|
||||||
|
# shellcheck disable=SC2035
|
||||||
profile_d_scripts=$(ls *.zsh 2>/dev/null)
|
profile_d_scripts=$(ls *.zsh 2>/dev/null)
|
||||||
elif [ ! "x${BASH_VERSION}" = "x" ]; then
|
elif [ -n "${BASH_VERSION}" ]; then
|
||||||
|
# shellcheck disable=SC2035
|
||||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
if [ -n "${profile_d_scripts}" ]; then
|
||||||
for x in ${profile_d_scripts} ; do
|
for script in ${profile_d_scripts}; do
|
||||||
echo Sourcing "${1}/${x}"...
|
echo "Sourcing ${1}/${script}..."
|
||||||
. "${1}/${x}"
|
# shellcheck disable=SC1090
|
||||||
|
. "${1}/${script}"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
popd >/dev/null
|
popd >/dev/null || return
|
||||||
}
|
}
|
||||||
|
|
||||||
# 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
|
||||||
|
|
||||||
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
|
# Detect and set CMDER_ROOT for bash admin sessions
|
||||||
if [ "$CMDER_ROOT" = "" -a "$ConEmuDir" != "" ] ; then
|
# Converts Windows paths to Unix paths if needed
|
||||||
if [ -d "${ConEmuDir}../../vendor" ] ; then
|
# ConEmuDir is set by ConEmu/Cmder environment
|
||||||
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
|
if [ -z "$CMDER_ROOT" ] && [ -n "$ConEmuDir" ]; then
|
||||||
|
if [ -d "${ConEmuDir}../../vendor" ]; then
|
||||||
|
case "$ConEmuDir" in
|
||||||
|
*\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." && pwd );;
|
||||||
|
esac
|
||||||
else
|
else
|
||||||
echo "Running in ConEmu without Cmder, skipping Cmder integration."
|
echo "Running in ConEmu without Cmder, skipping Cmder integration."
|
||||||
fi
|
fi
|
||||||
elif [ "$CMDER_ROOT" != "" ] ; then
|
elif [ -n "$CMDER_ROOT" ]; then
|
||||||
case "$CMDER_ROOT" in *\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";; esac
|
case "$CMDER_ROOT" in
|
||||||
|
*\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! "$CMDER_ROOT" = "" ] ; then
|
# If CMDER_ROOT is still not set, try to derive from script location
|
||||||
# Remove any trailing '/'
|
# Note: This only works if cmder_exinit is in its original location (vendor/)
|
||||||
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
|
if [ -z "$CMDER_ROOT" ] && [ -f "${BASH_SOURCE[0]}" ]; then
|
||||||
|
# Check if we're in the vendor directory
|
||||||
|
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
if [[ "$script_dir" == */vendor ]] || [[ "$script_dir" == */vendor/* ]]; then
|
||||||
|
# Extract the Cmder root (parent of vendor)
|
||||||
|
CMDER_ROOT="$( cd "$script_dir/.." && pwd )"
|
||||||
|
# Verify this looks like a Cmder installation
|
||||||
|
if [ ! -d "${CMDER_ROOT}/vendor" ]; then
|
||||||
|
unset CMDER_ROOT
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Using \"CMDER_ROOT\" at \"${CMDER_ROOT}\"."
|
if [ -n "$CMDER_ROOT" ]; then
|
||||||
|
# Remove any trailing '/' from CMDER_ROOT
|
||||||
|
CMDER_ROOT="${CMDER_ROOT%/}"
|
||||||
|
|
||||||
|
echo "Using CMDER_ROOT at \"${CMDER_ROOT}\"."
|
||||||
|
|
||||||
export CMDER_ROOT
|
export CMDER_ROOT
|
||||||
|
|
||||||
PATH=${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}
|
# Add Cmder directories to PATH
|
||||||
|
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"
|
# Create profile.d directory if it doesn't exist
|
||||||
# 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
|
# Source all shell scripts in profile.d directories
|
||||||
runProfiled "${CMDER_ROOT}/config/profile.d"
|
if [ -d "${CMDER_ROOT}/config/profile.d" ]; then
|
||||||
|
run_profile_d "${CMDER_ROOT}/config/profile.d"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
|
if [ -d "${CMDER_USER_CONFIG}/profile.d" ]; then
|
||||||
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
run_profile_d "${CMDER_USER_CONFIG}/profile.d"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
# Rename legacy user-profile.sh to user_profile.sh for consistency
|
||||||
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
|
if [ -f "$CMDER_ROOT/config/user-profile.sh" ]; then
|
||||||
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
|
# Source user profile from CMDER_ROOT config
|
||||||
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
|
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
. "${CMDER_ROOT}/config/user_profile.sh"
|
. "${CMDER_ROOT}/config/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
# Handle CMDER_USER_CONFIG if set
|
||||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
||||||
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
|
# Rename legacy 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"
|
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export PATH=${CMDER_USER_CONFIG}/bin:$PATH
|
export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
|
||||||
|
|
||||||
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
|
# Source user profile from CMDER_USER_CONFIG
|
||||||
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
|
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "${CmderUserProfilePath}" ] ; then
|
# Determine the user profile path for creation if needed
|
||||||
echo Creating user startup file: "${CmderUserProfilePath}"
|
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
||||||
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
|
cmder_user_profile_path="${CMDER_USER_CONFIG}/user_profile.sh"
|
||||||
|
else
|
||||||
|
cmder_user_profile_path="${CMDER_ROOT}/config/user_profile.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create user profile from default template if it doesn't exist
|
||||||
|
if [ ! -f "${cmder_user_profile_path}" ] && [ -f "${CMDER_ROOT}/vendor/user_profile.sh.default" ]; then
|
||||||
|
echo "Creating user startup file: ${cmder_user_profile_path}"
|
||||||
|
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${cmder_user_profile_path}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
15
vendor/cmder_prompt_config.lua.default
vendored
15
vendor/cmder_prompt_config.lua.default
vendored
@@ -38,25 +38,20 @@ prompt_includeVersionControl = true
|
|||||||
-- NOTE: This only takes effect if using Clink v1.2.10 or higher.
|
-- NOTE: This only takes effect if using Clink v1.2.10 or higher.
|
||||||
prompt_overrideGitStatusOptIn = false
|
prompt_overrideGitStatusOptIn = false
|
||||||
|
|
||||||
-- OPTIONAL. If true then always ignore the cmder.status and cmder.cmdstatus svn config settings and run the svn prompt commands in the background.
|
|
||||||
-- default is false
|
|
||||||
-- NOTE: This only takes effect if using Clink v1.2.10 or higher.
|
|
||||||
prompt_overrideSvnStatusOptIn = false
|
|
||||||
|
|
||||||
-- Prompt Attributes
|
-- Prompt Attributes
|
||||||
--
|
--
|
||||||
-- Colors: https://github.com/cmderdev/cmder/wiki/Customization#list-of-colors
|
-- Colors: https://github.com/cmderdev/cmder/wiki/Customization#list-of-colors
|
||||||
-- Effects: https://github.com/cmderdev/cmder/wiki/Customization#list-of-effects
|
-- Effects: https://github.com/cmderdev/cmder/wiki/Customization#list-of-effects
|
||||||
--
|
--
|
||||||
-- Green: "\x1b[1;33;49m"
|
-- Green: "\x1b[1;32;49m"
|
||||||
-- Yellow: "\x1b[1;32;49m"
|
-- Yellow: "\x1b[1;33;49m"
|
||||||
-- Light Grey: "\x1b[1;30;49m"
|
-- Light Grey: "\x1b[1;30;49m"
|
||||||
|
|
||||||
-- Prompt Element Colors
|
-- Prompt Element Colors
|
||||||
uah_color = "\x1b[1;33;49m" -- Green = uah = [user]@[hostname]
|
uah_color = "\x1b[1;33;49m" -- Yellow uah = [user]@[hostname]
|
||||||
cwd_color = "\x1b[1;32;49m" -- Yellow cwd = Current Working Directory
|
cwd_color = "\x1b[1;32;49m" -- Green cwd = Current Working Directory
|
||||||
lamb_color = "\x1b[1;30;49m" -- Light Grey = Lambda Color
|
lamb_color = "\x1b[1;30;49m" -- Light Grey = Lambda Color
|
||||||
clean_color = "\x1b[37;1m"
|
clean_color = "\x1b[37;1m"
|
||||||
dirty_color = "\x1b[33;3m" -- Yellow, Italic
|
dirty_color = "\x1b[33;3m" -- Yellow, Italic
|
||||||
conflict_color = "\x1b[31;1m" -- Red, Bold
|
conflict_color = "\x1b[31;1m" -- Red, Bold
|
||||||
unknown_color = "\x1b[37;1m" -- White = No VCS Status Branch Color
|
unknown_color = "\x1b[37;1m" -- White, Bold = No VCS Status Branch Color
|
||||||
|
|||||||
109
vendor/git-prompt.sh
vendored
109
vendor/git-prompt.sh
vendored
@@ -1,26 +1,35 @@
|
|||||||
|
# Returns 1 if git status for Cmder is disabled, otherwise returns 0
|
||||||
function getGitStatusSetting() {
|
function getGitStatusSetting() {
|
||||||
gitStatusSetting=$(git --no-pager config -l 2>/dev/null)
|
local gitConfig
|
||||||
|
|
||||||
if [[ -n ${gitStatusSetting} ]] && [[ ${gitStatusSetting} =~ cmder.status=false ]] || [[ ${gitStatusSetting} =~ cmder.shstatus=false ]]
|
# Get all git config entries for the current repository without pager
|
||||||
|
gitConfig=$(git --no-pager config -l 2>/dev/null) || return 0 # treat failure as enabled
|
||||||
|
|
||||||
|
# Check if git status display for Cmder is disabled via config
|
||||||
|
# Matches: cmder.status=false or cmder.shstatus=false (Bash-specific)
|
||||||
|
if [[ $gitConfig =~ (^|$'\n')cmder\.(sh)?status=false($|$'\n') ]]
|
||||||
then
|
then
|
||||||
echo false
|
return 1 # disabled
|
||||||
else
|
|
||||||
echo true
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Prints current branch or detached HEAD short commit hash
|
||||||
function getSimpleGitBranch() {
|
function getSimpleGitBranch() {
|
||||||
gitDir=$(git rev-parse --git-dir 2>/dev/null)
|
local gitDir
|
||||||
if [ -z "$gitDir" ]; then
|
gitDir=$(git rev-parse --git-dir 2>/dev/null) || return 0
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
headContent=$(< "$gitDir/HEAD")
|
local headFile="$gitDir/HEAD"
|
||||||
if [[ "$headContent" == "ref: refs/heads/"* ]]
|
[ -f "$headFile" ] || return 0
|
||||||
|
|
||||||
|
local headContent
|
||||||
|
headContent=$(< "$headFile")
|
||||||
|
if [[ "$headContent" =~ ^ref:\ refs/heads/(.+)$ ]]
|
||||||
then
|
then
|
||||||
echo " (${headContent:16})"
|
echo " (${BASH_REMATCH[1]})"
|
||||||
else
|
else
|
||||||
echo " (HEAD detached at ${headContent:0:7})"
|
echo " (HEAD detached at ${headContent:0:7})"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,18 +42,50 @@ fi
|
|||||||
|
|
||||||
if test -f ~/.config/git/git-prompt.sh
|
if test -f ~/.config/git/git-prompt.sh
|
||||||
then
|
then
|
||||||
if [[ $(getGitStatusSetting) == true ]]
|
if getGitStatusSetting
|
||||||
then
|
then
|
||||||
. ~/.config/git/git-prompt.sh
|
. ~/.config/git/git-prompt.sh
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
PS1='\[\033]0;$MSYSTEM:${PWD//[^[:ascii:]]/?}\007\]' # set window title
|
|
||||||
# PS1="$PS1"'\n' # new line
|
# Setup OSC 133 shell integration for Windows Terminal
|
||||||
PS1="$PS1"'\[\033[32m\]' # change to green
|
if [ -n "$WT_SESSION" ]; then
|
||||||
|
__cmder_prompt_command() {
|
||||||
|
local exit_code=$?
|
||||||
|
# Emit OSC 133;D to mark the end of command execution with exit code
|
||||||
|
printf '\e]133;D;%s\a' "$exit_code"
|
||||||
|
return $exit_code
|
||||||
|
}
|
||||||
|
|
||||||
|
__cmder_preexec() {
|
||||||
|
# Emit OSC 133;C to mark the start of command execution
|
||||||
|
printf '\e]133;C\a'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Append to PROMPT_COMMAND to emit sequences just before each prompt
|
||||||
|
if [ -z "$PROMPT_COMMAND" ]; then
|
||||||
|
PROMPT_COMMAND="__cmder_prompt_command"
|
||||||
|
else
|
||||||
|
PROMPT_COMMAND="__cmder_prompt_command;$PROMPT_COMMAND"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use DEBUG trap to emit OSC 133;C before command execution
|
||||||
|
trap '__cmder_preexec' DEBUG
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Source: github.com/git-for-windows/build-extra/blob/main/git-extra/git-prompt.sh
|
||||||
|
PS1='\[\033]0;${TITLEPREFIX:+$TITLEPREFIX:}${PWD//[^[:ascii:]]/?}\007\]' # set window title to TITLEPREFIX (if set) and current working directory
|
||||||
|
# PS1="$PS1"'\n' # new line (disabled)
|
||||||
|
|
||||||
|
if [ -n "$WT_SESSION" ]; then
|
||||||
|
# Emit OSC 133;A to mark the start of prompt
|
||||||
|
PS1="$PS1"'\e]133;A\a'
|
||||||
|
fi
|
||||||
|
|
||||||
|
PS1="$PS1"'\[\033[32m\]' # change to green and bold
|
||||||
PS1="$PS1"'\u@\h ' # user@host<space>
|
PS1="$PS1"'\u@\h ' # user@host<space>
|
||||||
# PS1="$PS1"'\[\033[35m\]' # change to purple
|
PS1="$PS1${MSYSTEM:+\[\033[35m\]$MSYSTEM }" # show MSYSTEM in purple (if set)
|
||||||
# PS1="$PS1"'$MSYSTEM ' # show MSYSTEM
|
PS1="$PS1"'\[\033[1;33m\]' # change to dark yellow in bold
|
||||||
PS1="$PS1"'\[\033[33m\]' # change to brownish yellow
|
|
||||||
PS1="$PS1"'\w' # current working directory
|
PS1="$PS1"'\w' # current working directory
|
||||||
if test -z "$WINELOADERNOEXEC"
|
if test -z "$WINELOADERNOEXEC"
|
||||||
then
|
then
|
||||||
@@ -55,20 +96,38 @@ else
|
|||||||
if test -f "$COMPLETION_PATH/git-prompt.sh"
|
if test -f "$COMPLETION_PATH/git-prompt.sh"
|
||||||
then
|
then
|
||||||
. "$COMPLETION_PATH/git-completion.bash"
|
. "$COMPLETION_PATH/git-completion.bash"
|
||||||
if [[ $(getGitStatusSetting) == true ]]
|
if getGitStatusSetting
|
||||||
then
|
then
|
||||||
. "$COMPLETION_PATH/git-prompt.sh"
|
. "$COMPLETION_PATH/git-prompt.sh"
|
||||||
PS1="$PS1"'\[\033[36m\]' # change color to cyan
|
PS1="$PS1"'\[\033[36m\]' # change color to cyan
|
||||||
PS1="$PS1"'`__git_ps1`' # bash function
|
PS1="$PS1"'`__git_ps1`' # bash function
|
||||||
else
|
else
|
||||||
PS1="$PS1"'\[\033[37;1m\]' # change color to white
|
PS1="$PS1"'\[\033[37;1m\]' # change color to white
|
||||||
PS1="$PS1"'`getSimpleGitBranch`'
|
PS1="$PS1"'`getSimpleGitBranch`'
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
PS1="$PS1"'\[\033[0m\]' # change color
|
PS1="$PS1"'\[\033[0m\]' # reset color
|
||||||
PS1="$PS1"'\n' # new line
|
PS1="$PS1"'\n' # new line
|
||||||
PS1="$PS1"'λ ' # prompt: always λ
|
PS1="$PS1"'\[\033[30;1m\]' # change color to grey in bold
|
||||||
|
PS1="$PS1"'λ ' # prompt: Cmder uses λ
|
||||||
|
PS1="$PS1"'\[\033[0m\]' # reset color
|
||||||
|
|
||||||
|
if [ -n "$WT_SESSION" ]; then
|
||||||
|
# Emit OSC 133;B to mark the end of prompt
|
||||||
|
PS1="$PS1"'\[\e]133;B\a\]'
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MSYS2_PS1="$PS1" # for detection by MSYS2 SDK's bash.basrc
|
MSYS2_PS1="$PS1" # for detection by MSYS2 SDK's bash.basrc
|
||||||
|
|
||||||
|
# Evaluate all user-specific Bash completion scripts (if any)
|
||||||
|
if test -z "$WINELOADERNOEXEC"
|
||||||
|
then
|
||||||
|
for c in "$HOME"/bash_completion.d/*.bash
|
||||||
|
do
|
||||||
|
# Handle absence of any scripts (or the folder) gracefully
|
||||||
|
test ! -f "$c" ||
|
||||||
|
. "$c"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|||||||
57
vendor/init.bat
vendored
57
vendor/init.bat
vendored
@@ -148,12 +148,13 @@ if defined CMDER_USER_CONFIG (
|
|||||||
)
|
)
|
||||||
|
|
||||||
if not "%CMDER_SHELL%" == "cmd" (
|
if not "%CMDER_SHELL%" == "cmd" (
|
||||||
%print_warning% "Incompatible 'ComSpec/Shell' Detetected: %CMDER_SHELL%"
|
%print_warning% "Incompatible 'ComSpec/Shell' Detected: %CMDER_SHELL%"
|
||||||
set CMDER_CLINK=0
|
set CMDER_CLINK=0
|
||||||
set CMDER_ALIASES=0
|
set CMDER_ALIASES=0
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Pick right version of Clink
|
:: Pick the right version of Clink
|
||||||
|
:: TODO: Support for ARM
|
||||||
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
||||||
set clink_architecture=x86
|
set clink_architecture=x86
|
||||||
set architecture_bits=32
|
set architecture_bits=32
|
||||||
@@ -161,16 +162,24 @@ if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
|||||||
set clink_architecture=x64
|
set clink_architecture=x64
|
||||||
set architecture_bits=64
|
set architecture_bits=64
|
||||||
) else (
|
) else (
|
||||||
%print_warning% "Incompatible Processor Detetected: %PROCESSOR_ARCHITECTURE%"
|
%print_warning% "Incompatible Processor Detected: %PROCESSOR_ARCHITECTURE%"
|
||||||
set CMDER_CLINK=0
|
set CMDER_CLINK=0
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%CMDER_CLINK%" == "1" (
|
if "%CMDER_CLINK%" == "1" (
|
||||||
|
REM TODO: Detect if clink is already injected, if so goto :CLINK_FINISH
|
||||||
|
goto :INJECT_CLINK
|
||||||
|
)
|
||||||
|
|
||||||
|
goto :SKIP_CLINK
|
||||||
|
|
||||||
|
:INJECT_CLINK
|
||||||
%print_verbose% "Injecting Clink!"
|
%print_verbose% "Injecting Clink!"
|
||||||
|
|
||||||
:: Check if Clink is not present
|
:: Check if Clink is not present
|
||||||
if not exist "%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" (
|
if not exist "%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" (
|
||||||
%print_error% "Clink executable is not present in 'vendor\clink\clink_%clink_architecture%.exe'"
|
%print_error% "Clink executable is not present in 'vendor\clink\clink_%clink_architecture%.exe'"
|
||||||
|
goto :SKIP_CLINK
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Run Clink
|
:: Run Clink
|
||||||
@@ -185,7 +194,7 @@ if "%CMDER_CLINK%" == "1" (
|
|||||||
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua"
|
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua"
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Cleanup lagacy Clink Settings file
|
:: Cleanup legacy Clink Settings file
|
||||||
if exist "%CMDER_CONFIG_DIR%\settings" if exist "%CMDER_CONFIG_DIR%\clink_settings" (
|
if exist "%CMDER_CONFIG_DIR%\settings" if exist "%CMDER_CONFIG_DIR%\clink_settings" (
|
||||||
del "%CMDER_CONFIG_DIR%\settings"
|
del "%CMDER_CONFIG_DIR%\settings"
|
||||||
)
|
)
|
||||||
@@ -197,10 +206,15 @@ if "%CMDER_CLINK%" == "1" (
|
|||||||
|
|
||||||
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_CONFIG_DIR%" --scripts "%CMDER_ROOT%\vendor"
|
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_CONFIG_DIR%" --scripts "%CMDER_ROOT%\vendor"
|
||||||
|
|
||||||
if errorlevel 1 (
|
:: Check if a fatal error occurred when trying to inject Clink
|
||||||
%print_error% "Clink initilization has failed with error code: %errorlevel%"
|
if errorlevel 2 (
|
||||||
|
REM %print_error% "Clink injection has failed with error code: %errorlevel%"
|
||||||
|
goto :SKIP_CLINK
|
||||||
)
|
)
|
||||||
) else (
|
|
||||||
|
goto :CLINK_FINISH
|
||||||
|
|
||||||
|
:SKIP_CLINK
|
||||||
%print_warning% "Skipping Clink Injection!"
|
%print_warning% "Skipping Clink Injection!"
|
||||||
|
|
||||||
for /f "tokens=2 delims=:." %%x in ('chcp') do set cp=%%x
|
for /f "tokens=2 delims=:." %%x in ('chcp') do set cp=%%x
|
||||||
@@ -209,8 +223,12 @@ if "%CMDER_CLINK%" == "1" (
|
|||||||
:: Revert back to plain cmd.exe prompt without clink
|
:: Revert back to plain cmd.exe prompt without clink
|
||||||
prompt $E[1;32;49m$P$S$_$E[1;30;49mλ$S$E[0m
|
prompt $E[1;32;49m$P$S$_$E[1;30;49mλ$S$E[0m
|
||||||
|
|
||||||
|
:: Add Windows Terminal shell integration support (OSC 133 sequences)
|
||||||
|
if defined WT_SESSION (prompt $e]133;D$e\$e]133;A$e\$e]9;9;$P$e\%PROMPT%$e]133;B$e\)
|
||||||
|
|
||||||
chcp %cp%>nul
|
chcp %cp%>nul
|
||||||
)
|
|
||||||
|
:CLINK_FINISH
|
||||||
|
|
||||||
if "%CMDER_CONFIGURED%" GTR "1" (
|
if "%CMDER_CONFIGURED%" GTR "1" (
|
||||||
%print_verbose% "Cmder is already configured, skipping Cmder Init!"
|
%print_verbose% "Cmder is already configured, skipping Cmder Init!"
|
||||||
@@ -225,8 +243,8 @@ if "%CMDER_CONFIGURED%" GTR "1" (
|
|||||||
:: Prepare for git-for-windows
|
:: Prepare for git-for-windows
|
||||||
|
|
||||||
:: Detect which git.exe version to use
|
:: Detect which git.exe version to use
|
||||||
:: * if the users points as to a specific git, use that
|
:: * if the user points to a specific git, use that
|
||||||
:: * test if a git is in path and if yes, use that
|
:: * test if 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 by examining the version string
|
:: also check that we have a recent enough version of git by examining the version string
|
||||||
if defined GIT_INSTALL_ROOT (
|
if defined GIT_INSTALL_ROOT (
|
||||||
@@ -237,6 +255,13 @@ if defined GIT_INSTALL_ROOT (
|
|||||||
%print_debug% init.bat "Skipping Git Auto-Detect!"
|
%print_debug% init.bat "Skipping Git Auto-Detect!"
|
||||||
goto :VENDORED_GIT
|
goto :VENDORED_GIT
|
||||||
)
|
)
|
||||||
|
|
||||||
|
%print_debug% init.bat "Fast init is enabled, vendored Git does not exist"
|
||||||
|
for /F "delims=" %%F in ('where git.exe 2^>nul') do (
|
||||||
|
set "EXT_GIT_EXE=%%~fF"
|
||||||
|
%print_debug% init.bat "Found User installed Git at '%%~fF'. Skipping Git Auto-Detect!"
|
||||||
|
goto :SET_ENV
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
%print_debug% init.bat "Looking for Git install root..."
|
%print_debug% init.bat "Looking for Git install root..."
|
||||||
@@ -309,6 +334,8 @@ if %nix_tools% geq 1 (
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
:SET_ENV
|
||||||
|
|
||||||
:: Plink (PuTTY Link) is a command-line connection tool similar to ssh, setting its protocol to ssh
|
:: Plink (PuTTY Link) is a command-line connection tool similar to ssh, setting its protocol to ssh
|
||||||
set PLINK_PROTOCOL=ssh
|
set PLINK_PROTOCOL=ssh
|
||||||
|
|
||||||
@@ -316,6 +343,12 @@ set PLINK_PROTOCOL=ssh
|
|||||||
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"
|
||||||
|
|
||||||
:: Find locale.exe: From the git install root, from the path, using the git installed env, or fallback using the env from the path.
|
:: Find locale.exe: From the git install root, from the path, using the git installed env, or fallback using the env from the path.
|
||||||
|
setlocal enabledelayedexpansion
|
||||||
|
if not defined git_locale if defined EXT_GIT_EXE (
|
||||||
|
set "GIT_INSTALL_ROOT=!EXT_GIT_EXE:\cmd\git.exe=!"
|
||||||
|
)
|
||||||
|
endlocal && set GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%
|
||||||
|
|
||||||
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 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 "tokens=* delims=" %%F in ('where locale.exe 2^>nul') do ( if not defined git_locale set git_locale="%%F" )
|
if not defined git_locale for /F "tokens=* 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 if exist "%GIT_INSTALL_ROOT%\usr\bin\env.exe" set git_locale="%GIT_INSTALL_ROOT%\usr\bin\env.exe" /usr/bin/locale
|
||||||
@@ -325,7 +358,7 @@ setlocal enabledelayedexpansion
|
|||||||
if defined git_locale (
|
if defined git_locale (
|
||||||
REM %print_debug% init.bat "Env Var - git_locale=!git_locale!"
|
REM %print_debug% init.bat "Env Var - git_locale=!git_locale!"
|
||||||
if not defined LANG (
|
if not defined LANG (
|
||||||
for /F "delims=" %%F in ('!git_locale! -uU 2') do (
|
for /F "delims=" %%F in ('"!git_locale!" -uU 2') do (
|
||||||
set "LANG=%%F"
|
set "LANG=%%F"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -396,7 +429,7 @@ if "%CMDER_ALIASES%" == "1" (
|
|||||||
)
|
)
|
||||||
|
|
||||||
:: Add aliases to the environment
|
:: Add aliases to the environment
|
||||||
type "%user_aliases%" | findstr /b /l /i "history=cat " >nul
|
type "%user_aliases%" | %WINDIR%\System32\findstr /b /l /i "history=cat " >nul
|
||||||
if "%ERRORLEVEL%" == "0" (
|
if "%ERRORLEVEL%" == "0" (
|
||||||
echo Migrating alias 'history' to new Clink 1.x.x...
|
echo Migrating alias 'history' to new Clink 1.x.x...
|
||||||
call "%CMDER_ROOT%\vendor\bin\alias.cmd" /d history
|
call "%CMDER_ROOT%\vendor\bin\alias.cmd" /d history
|
||||||
|
|||||||
66
vendor/lib/lib_base.cmd
vendored
66
vendor/lib/lib_base.cmd
vendored
@@ -4,15 +4,14 @@ set lib_base=call "%~dp0lib_base.cmd"
|
|||||||
|
|
||||||
if "%~1" == "/h" (
|
if "%~1" == "/h" (
|
||||||
%lib_base% help "%~0"
|
%lib_base% help "%~0"
|
||||||
) else if "%1" neq "" (
|
) else if "%~1" neq "" (
|
||||||
call :%*
|
call :%*
|
||||||
)
|
)
|
||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:help
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::show_subs - shows all sub routines in a .bat/.cmd file with documentation
|
:::help - shows all sub routines in a .bat/.cmd file with documentation
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@@ -20,16 +19,15 @@ exit /b
|
|||||||
:::.
|
:::.
|
||||||
:::usage:
|
:::usage:
|
||||||
:::.
|
:::.
|
||||||
::: %lib_base% show_subs "file"
|
::: %lib_base% help "file"
|
||||||
:::.
|
:::.
|
||||||
:::options:
|
:::options:
|
||||||
:::.
|
:::.
|
||||||
::: file <in> full path to file containing lib_routines to display
|
::: 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"
|
|
||||||
|
|
||||||
|
:help
|
||||||
|
for /f "tokens=* delims=:" %%a in ('%WINDIR%\System32\findstr /i /r "^:::" "%~1"') do (
|
||||||
if "%%a"=="." (
|
if "%%a"=="." (
|
||||||
echo.
|
echo.
|
||||||
) else if /i "%%a" == "usage" (
|
) else if /i "%%a" == "usage" (
|
||||||
@@ -44,9 +42,13 @@ exit /b
|
|||||||
pause
|
pause
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:cmder_shell
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::show_subs - shows all sub routines in a .bat/.cmd file with documentation
|
:::cmder_shell - Initializes the Cmder shell environment variables
|
||||||
|
:::.
|
||||||
|
:::description:
|
||||||
|
:::.
|
||||||
|
::: This routine sets up the Cmder shell environment by detecting the
|
||||||
|
::: command shell and initializing related variables.
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@@ -55,15 +57,30 @@ exit /b
|
|||||||
:::usage:
|
:::usage:
|
||||||
:::.
|
:::.
|
||||||
::: %lib_base% cmder_shell
|
::: %lib_base% cmder_shell
|
||||||
:::.
|
|
||||||
:::options:
|
|
||||||
:::.
|
|
||||||
::: file <in> full path to file containing lib_routines to display
|
|
||||||
:::.
|
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
:cmder_shell
|
||||||
call :detect_comspec %ComSpec%
|
call :detect_comspec %ComSpec%
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
:::===============================================================================
|
||||||
|
:::detect_comspec - Detects the command shell being used:::
|
||||||
|
:::.
|
||||||
|
:::description:
|
||||||
|
:::.
|
||||||
|
::: This function sets the CMDER_SHELL variable to the name of the
|
||||||
|
::: detected command shell. It also initializes the CMDER_CLINK and
|
||||||
|
::: CMDER_ALIASES variables if they are not already defined.
|
||||||
|
:::.
|
||||||
|
:::include:
|
||||||
|
:::.
|
||||||
|
::: call "lib_base.cmd"
|
||||||
|
:::.
|
||||||
|
:::usage:
|
||||||
|
:::.
|
||||||
|
::: %lib_base% detect_comspec %ComSpec%
|
||||||
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
:detect_comspec
|
:detect_comspec
|
||||||
set CMDER_SHELL=%~n1
|
set CMDER_SHELL=%~n1
|
||||||
if not defined CMDER_CLINK (
|
if not defined CMDER_CLINK (
|
||||||
@@ -74,6 +91,27 @@ exit /b
|
|||||||
)
|
)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
:::===============================================================================
|
||||||
|
:::update_legacy_aliases - Updates the legacy alias definitions in the user_aliases file
|
||||||
|
:::.
|
||||||
|
:::description:
|
||||||
|
:::.
|
||||||
|
::: This function checks if the user_aliases file contains the marker
|
||||||
|
::: ";= Add aliases below here". If the marker is not found, it creates
|
||||||
|
::: an initial user_aliases store by copying the default user_aliases file
|
||||||
|
::: from the CMDER_ROOT directory. If the CMDER_USER_CONFIG environment
|
||||||
|
::: variable is defined, it creates a backup of the existing user_aliases
|
||||||
|
::: file before copying the default file.
|
||||||
|
:::.
|
||||||
|
:::include:
|
||||||
|
:::.
|
||||||
|
::: call "lib_base.cmd"
|
||||||
|
:::.
|
||||||
|
:::usage:
|
||||||
|
:::.
|
||||||
|
::: %lib_base% update_legacy_aliases
|
||||||
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
:update_legacy_aliases
|
:update_legacy_aliases
|
||||||
type "%user_aliases%" | %WINDIR%\System32\findstr /i ";= Add aliases below here" >nul
|
type "%user_aliases%" | %WINDIR%\System32\findstr /i ";= Add aliases below here" >nul
|
||||||
if "%errorlevel%" == "1" (
|
if "%errorlevel%" == "1" (
|
||||||
|
|||||||
4
vendor/lib/lib_console.cmd
vendored
4
vendor/lib/lib_console.cmd
vendored
@@ -14,7 +14,7 @@ if %fast_init% gtr %verbose_output% if %fast_init% gtr %debug_output% exit /b
|
|||||||
|
|
||||||
if "%~1" == "/h" (
|
if "%~1" == "/h" (
|
||||||
%lib_base% help "%~0"
|
%lib_base% help "%~0"
|
||||||
) else if "%1" neq "" (
|
) else if "%~1" neq "" (
|
||||||
call :%*
|
call :%*
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ exit /b
|
|||||||
:::.
|
:::.
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
if %debug_output% gtr 0 echo DEBUG(%~1): %~2 & echo.
|
if %debug_output% gtr 0 echo %time% DEBUG(%~1): %~2 & echo.
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:verbose_output
|
:verbose_output
|
||||||
|
|||||||
35
vendor/lib/lib_git.cmd
vendored
35
vendor/lib/lib_git.cmd
vendored
@@ -1,18 +1,17 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
call "%~dp0lib_base.cmd"
|
call "%~dp0lib_base.cmd"
|
||||||
call "%%~dp0lib_console.cmd"
|
call "%~dp0lib_console.cmd"
|
||||||
set lib_git=call "%~dp0lib_git.cmd"
|
set lib_git=call "%~dp0lib_git.cmd"
|
||||||
|
|
||||||
if "%~1" == "/h" (
|
if "%~1" == "/h" (
|
||||||
%lib_base% help "%~0"
|
%lib_base% help "%~0"
|
||||||
) else if "%1" neq "" (
|
) else if "%~1" neq "" (
|
||||||
call :%*
|
call :%*
|
||||||
)
|
)
|
||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:read_version
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::read_version - Get the git.exe version
|
:::read_version - Get the git.exe version
|
||||||
:::.
|
:::.
|
||||||
@@ -34,6 +33,7 @@ exit /b
|
|||||||
::: GIT_VERSION_[GIT SCOPE] <out> Env variable containing Git semantic version string
|
::: GIT_VERSION_[GIT SCOPE] <out> Env variable containing Git semantic version string
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
:read_version
|
||||||
:: clear the variables
|
:: clear the variables
|
||||||
set GIT_VERSION_%~1=
|
set GIT_VERSION_%~1=
|
||||||
|
|
||||||
@@ -55,6 +55,7 @@ exit /b
|
|||||||
set "GIT_VERSION=%%C"
|
set "GIT_VERSION=%%C"
|
||||||
) else (
|
) else (
|
||||||
echo "'git --version' returned an improper version string!"
|
echo "'git --version' returned an improper version string!"
|
||||||
|
%print_debug% :read_version "returned string: '%%A %%B %%C' by executable path: %git_executable%"
|
||||||
pause
|
pause
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
@@ -63,7 +64,6 @@ exit /b
|
|||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:parse_version
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::parse_version - Parse semantic version string 'x.x.x.x' and return the pieces
|
:::parse_version - Parse semantic version string 'x.x.x.x' and return the pieces
|
||||||
:::.
|
:::.
|
||||||
@@ -88,6 +88,7 @@ exit /b
|
|||||||
::: [SCOPE]_BUILD <out> Scoped Build version.
|
::: [SCOPE]_BUILD <out> Scoped Build version.
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
:parse_version
|
||||||
:: process a `x.x.x.xxxx.x` formatted string
|
:: process a `x.x.x.xxxx.x` formatted string
|
||||||
%print_debug% :parse_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
%print_debug% :parse_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
||||||
|
|
||||||
@@ -110,9 +111,8 @@ exit /b
|
|||||||
|
|
||||||
:endlocal_set_git_version
|
:endlocal_set_git_version
|
||||||
|
|
||||||
:validate_version
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::validate_version - Validate semantic version string 'x.x.x.x'.
|
:::validate_version - Validate semantic version string 'x.x.x.x'
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@@ -128,6 +128,7 @@ exit /b
|
|||||||
::: [VERSION] <in> Semantic version String. Ex: 1.2.3.4
|
::: [VERSION] <in> Semantic version String. Ex: 1.2.3.4
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
:validate_version
|
||||||
:: now parse the version information into the corresponding variables
|
:: now parse the version information into the corresponding variables
|
||||||
%print_debug% :validate_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
%print_debug% :validate_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
||||||
|
|
||||||
@@ -142,9 +143,8 @@ exit /b
|
|||||||
)
|
)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:compare_versions
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::compare_version - Compare semantic versions return latest version.
|
:::compare_version - Compare semantic versions and return latest version
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@@ -160,6 +160,7 @@ exit /b
|
|||||||
::: [SCOPE2] <in> Example: VENDOR
|
::: [SCOPE2] <in> Example: VENDOR
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
:compare_versions
|
||||||
:: checks all major, minor, patch and build variables for the given arguments.
|
:: 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.
|
:: whichever binary that has the most recent version will be used based on the return code.
|
||||||
|
|
||||||
@@ -184,7 +185,12 @@ exit /b
|
|||||||
endlocal & exit /b 0
|
endlocal & exit /b 0
|
||||||
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::is_git_shim
|
:::is_git_shim - Check if the directory has a git.shim file
|
||||||
|
:::.
|
||||||
|
:::description:
|
||||||
|
:::.
|
||||||
|
::: Shim is a small helper program for Scoop that calls the executable configured in git.shim file
|
||||||
|
::: See: github.com/ScoopInstaller/Shim and github.com/cmderdev/cmder/pull/1905
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@@ -201,7 +207,7 @@ exit /b
|
|||||||
|
|
||||||
:is_git_shim
|
:is_git_shim
|
||||||
pushd "%~1"
|
pushd "%~1"
|
||||||
:: check if there's shim - and if yes follow the path
|
:: check if there is a shim file - if yes, read the actual executable path
|
||||||
setlocal enabledelayedexpansion
|
setlocal enabledelayedexpansion
|
||||||
if exist git.shim (
|
if exist git.shim (
|
||||||
for /F "tokens=2 delims== " %%I in (git.shim) do (
|
for /F "tokens=2 delims== " %%I in (git.shim) do (
|
||||||
@@ -218,7 +224,7 @@ exit /b
|
|||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::compare_git_versions
|
:::compare_git_versions - Compare the user git version against the vendored version
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@@ -252,7 +258,7 @@ exit /b
|
|||||||
:: if the user provided git executable is not found
|
:: if the user provided git executable is not found
|
||||||
IF ERRORLEVEL -255 IF NOT ERRORLEVEL -254 (
|
IF ERRORLEVEL -255 IF NOT ERRORLEVEL -254 (
|
||||||
:: if not exist "%git_executable%" (
|
:: if not exist "%git_executable%" (
|
||||||
%print_debug% ":compare_git_versions" "No git at "%git_executable%" found."
|
%print_debug% ":compare_git_versions" "No git at '%git_executable%' found."
|
||||||
set test_dir=
|
set test_dir=
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -261,7 +267,7 @@ exit /b
|
|||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::get_user_git_version - get the version information for the user provided git binary
|
:::get_user_git_version - Get the version information for the user provided git binary
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@@ -277,5 +283,4 @@ exit /b
|
|||||||
%lib_git% read_version USER "%test_dir%" 2>nul
|
%lib_git% read_version USER "%test_dir%" 2>nul
|
||||||
%print_debug% ":get_user_git_version" "get_user_git_version GIT_VERSION_USER: %GIT_VERSION_USER%"
|
%print_debug% ":get_user_git_version" "get_user_git_version GIT_VERSION_USER: %GIT_VERSION_USER%"
|
||||||
%lib_git% validate_version USER %GIT_VERSION_USER%
|
%lib_git% validate_version USER %GIT_VERSION_USER%
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
|||||||
78
vendor/lib/lib_path.cmd
vendored
78
vendor/lib/lib_path.cmd
vendored
@@ -1,16 +1,22 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
|
|
||||||
call "%~dp0lib_base.cmd"
|
call "%~dp0lib_base.cmd"
|
||||||
call "%%~dp0lib_console"
|
call "%~dp0lib_console.cmd"
|
||||||
set lib_path=call "%~dp0lib_path.cmd"
|
set lib_path=call "%~dp0lib_path.cmd"
|
||||||
|
|
||||||
if "%~1" == "/h" (
|
if "%~1" == "/h" (
|
||||||
%lib_base% help "%~0"
|
%lib_base% help "%~0"
|
||||||
) else if "%1" neq "" (
|
) else if "%~1" neq "" (
|
||||||
call :%*
|
call :%*
|
||||||
)
|
)
|
||||||
|
|
||||||
|
setlocal enabledelayedexpansion
|
||||||
|
if not defined find_pathext (
|
||||||
|
set "find_pathext=!PATHEXT:;= !"
|
||||||
|
set "find_pathext=!find_pathext:.=\.!"
|
||||||
|
)
|
||||||
|
endlocal & set "find_pathext=%find_pathext%"
|
||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:enhance_path
|
:enhance_path
|
||||||
@@ -32,18 +38,17 @@ exit /b
|
|||||||
:::options:
|
:::options:
|
||||||
:::
|
:::
|
||||||
::: append <in> Append to the path env variable rather than pre-pend.
|
::: append <in> Append to the path env variable rather than pre-pend.
|
||||||
::B
|
:::
|
||||||
:::
|
:::
|
||||||
:::output:
|
:::output:
|
||||||
:::
|
:::
|
||||||
::: path <out> Sets the path env variable if required.
|
::: path <out> Sets the path env variable if required.
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
if "%~1" neq "" (
|
if "%~1" neq "" (
|
||||||
set "add_path=%~1"
|
set "add_path=%~1"
|
||||||
) else (
|
) else (
|
||||||
%print_error% "You must specify a directory to add to the path!"
|
%print_error% "You must specify a directory to add to the path!"
|
||||||
exit 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%~2" neq "" if /i "%~2" == "append" (
|
if "%~2" neq "" if /i "%~2" == "append" (
|
||||||
@@ -52,7 +57,8 @@ exit /b
|
|||||||
set "position="
|
set "position="
|
||||||
)
|
)
|
||||||
|
|
||||||
dir "%add_path%" | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL
|
dir "%add_path%" 2>NUL | findstr -i -e "%find_pathext%" >NUL
|
||||||
|
|
||||||
if "%ERRORLEVEL%" == "0" (
|
if "%ERRORLEVEL%" == "0" (
|
||||||
set "add_to_path=%add_path%"
|
set "add_to_path=%add_path%"
|
||||||
) else (
|
) else (
|
||||||
@@ -66,7 +72,7 @@ exit /b
|
|||||||
set "PATH=%add_to_path%;%PATH%"
|
set "PATH=%add_to_path%;%PATH%"
|
||||||
)
|
)
|
||||||
goto :end_enhance_path
|
goto :end_enhance_path
|
||||||
) else if "add_to_path" equ "" (
|
) else if "%add_to_path%" equ "" (
|
||||||
goto :end_enhance_path
|
goto :end_enhance_path
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -78,23 +84,23 @@ exit /b
|
|||||||
|
|
||||||
setlocal enabledelayedexpansion
|
setlocal enabledelayedexpansion
|
||||||
if "!found!" == "0" (
|
if "!found!" == "0" (
|
||||||
echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!;"
|
echo "!PATH!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!;"
|
||||||
call :set_found
|
call :set_found
|
||||||
)
|
)
|
||||||
%print_debug% :enhance_path "Env Var INSIDE PATH !find_query! - found=!found!"
|
%print_debug% :enhance_path "Env Var INSIDE PATH !find_query! - found=!found!"
|
||||||
|
|
||||||
if /i "!position!" == "append" (
|
if /i "!position!" == "append" (
|
||||||
if "!found!" == "0" (
|
if "!found!" == "0" (
|
||||||
echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!\"$"
|
echo "!PATH!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!\"$"
|
||||||
call :set_found
|
call :set_found
|
||||||
)
|
)
|
||||||
%print_debug% :enhance_path "Env Var END PATH !find_query! - found=!found!"
|
%print_debug% :enhance_path "Env Var END PATH !find_query! - found=!found!"
|
||||||
) else (
|
) else (
|
||||||
if "!found!" == "0" (
|
if "!found!" == "0" (
|
||||||
echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:"^\"!find_query!;"
|
echo "!PATH!"|!WINDIR!\System32\findstr >nul /I /R /C:"^\"!find_query!;"
|
||||||
call :set_found
|
call :set_found
|
||||||
)
|
)
|
||||||
%print_debug% :enhance_path "Env Var BEGIN PATH !find_query! - found=!found!"
|
%print_debug% :enhance_path "Env Var BEGIN PATH !find_query! - found=!found!"
|
||||||
)
|
)
|
||||||
endlocal & set found=%found%
|
endlocal & set found=%found%
|
||||||
|
|
||||||
@@ -113,7 +119,8 @@ exit /b
|
|||||||
:end_enhance_path
|
:end_enhance_path
|
||||||
set "PATH=%PATH:;;=;%"
|
set "PATH=%PATH:;;=;%"
|
||||||
|
|
||||||
REM echo %path%|"C:\Users\dgames\cmder - dev\vendor\git-for-windows\usr\bin\wc" -c
|
REM echo %path%|wc -c
|
||||||
|
|
||||||
if "%fast_init%" == "1" exit /b
|
if "%fast_init%" == "1" exit /b
|
||||||
|
|
||||||
if not "%OLD_PATH:~0,3000%" == "%OLD_PATH:~0,3001%" goto :toolong
|
if not "%OLD_PATH:~0,3000%" == "%OLD_PATH:~0,3001%" goto :toolong
|
||||||
@@ -121,21 +128,27 @@ exit /b
|
|||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:toolong
|
:toolong
|
||||||
echo "%OLD_PATH%">"%temp%\cmder_lib_pathA"
|
set "_rand=%RANDOM%"
|
||||||
echo "%PATH%">"%temp%\cmder_lib_pathB"
|
if exist "%temp%\%_rand%_cmder_lib_pathA" del "%temp%\%_rand%_cmder_lib_pathA" 2>nul 1>nul
|
||||||
fc /b "%temp%\cmder_lib_pathA" "%temp%\cmder_lib_pathB" 2>nul 1>nul
|
if exist "%temp%\%_rand%_cmder_lib_pathB" del "%temp%\%_rand%_cmder_lib_pathB" 2>nul 1>nul
|
||||||
if errorlevel 1 ( del "%temp%\cmder_lib_pathA" & del "%temp%\cmder_lib_pathB" & goto :changed )
|
if exist "%temp%\%_rand%_cmder_lib_pathA" goto :toolong
|
||||||
del "%temp%\cmder_lib_pathA" & del "%temp%\cmder_lib_pathB"
|
if exist "%temp%\%_rand%_cmder_lib_pathB" goto :toolong
|
||||||
|
echo "%OLD_PATH%">"%temp%\%_rand%_cmder_lib_pathA"
|
||||||
|
if errorlevel 1 ( if exist "%temp%\%_rand%_cmder_lib_pathA" del "%temp%\%_rand%_cmder_lib_pathA" & goto :toolong )
|
||||||
|
echo "%PATH%">"%temp%\%_rand%_cmder_lib_pathB"
|
||||||
|
if errorlevel 1 ( if exist "%temp%\%_rand%_cmder_lib_pathA" del "%temp%\%_rand%_cmder_lib_pathA" & if exist "%temp%\%_rand%_cmder_lib_pathB" del "%temp%\%_rand%_cmder_lib_pathB" & goto :toolong )
|
||||||
|
fc /b "%temp%\%_rand%_cmder_lib_pathA" "%temp%\%_rand%_cmder_lib_pathB" 2>nul 1>nul
|
||||||
|
if errorlevel 1 ( del "%temp%\%_rand%_cmder_lib_pathA" & del "%temp%\%_rand%_cmder_lib_pathB" & set "_rand=" & goto :changed )
|
||||||
|
del "%temp%\%_rand%_cmder_lib_pathA" & del "%temp%\%_rand%_cmder_lib_pathB" & set "_rand="
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:changed
|
:changed
|
||||||
%print_debug% :enhance_path "END Env Var - PATH=%path%"
|
%print_debug% :enhance_path "END Env Var - PATH=%PATH%"
|
||||||
%print_debug% :enhance_path "Env Var %find_query% - found=%found%"
|
%print_debug% :enhance_path "Env Var %find_query% - found=%found%"
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
|
||||||
:set_found
|
:set_found
|
||||||
if "%ERRORLEVEL%" == "0" (
|
if "%ERRORLEVEL%" == "0" (
|
||||||
set found=1
|
set found=1
|
||||||
@@ -174,7 +187,7 @@ exit /b
|
|||||||
set "add_path=%~1"
|
set "add_path=%~1"
|
||||||
) else (
|
) else (
|
||||||
%print_error% "You must specify a directory to add to the path!"
|
%print_error% "You must specify a directory to add to the path!"
|
||||||
exit 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
set "depth=%~2"
|
set "depth=%~2"
|
||||||
@@ -186,7 +199,7 @@ exit /b
|
|||||||
set "position="
|
set "position="
|
||||||
)
|
)
|
||||||
|
|
||||||
dir "%add_path%" 2>NUL | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL
|
dir "%add_path%" 2>NUL | findstr -i -e "%find_pathext%" >NUL
|
||||||
|
|
||||||
if "%ERRORLEVEL%" == "0" (
|
if "%ERRORLEVEL%" == "0" (
|
||||||
set "add_to_path=%add_path%"
|
set "add_to_path=%add_path%"
|
||||||
@@ -205,10 +218,10 @@ exit /b
|
|||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
|
||||||
%print_debug% :enhance_path_recursive "Env Var - add_path=%add_to_path%"
|
%print_debug% :enhance_path_recursive "Env Var - add_path=%add_to_path%"
|
||||||
%print_debug% :enhance_path_recursive "Env Var - position=%position%"
|
%print_debug% :enhance_path_recursive "Env Var - position=%position%"
|
||||||
%print_debug% :enhance_path_recursive "Env Var - depth=%depth%"
|
%print_debug% :enhance_path_recursive "Env Var - depth=%depth%"
|
||||||
%print_debug% :enhance_path_recursive "Env Var - max_depth=%max_depth%"
|
%print_debug% :enhance_path_recursive "Env Var - max_depth=%max_depth%"
|
||||||
|
|
||||||
if %max_depth% gtr %depth% (
|
if %max_depth% gtr %depth% (
|
||||||
if "%add_to_path%" neq "" (
|
if "%add_to_path%" neq "" (
|
||||||
@@ -223,7 +236,7 @@ exit /b
|
|||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
: set_depth
|
:set_depth
|
||||||
set /a "depth=%depth%+1"
|
set /a "depth=%depth%+1"
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
@@ -233,10 +246,9 @@ exit /b
|
|||||||
)
|
)
|
||||||
|
|
||||||
for /d %%i in ("%add_path%\*") do (
|
for /d %%i in ("%add_path%\*") do (
|
||||||
%print_debug% :enhance_path_recursive "Env Var BEFORE - depth=%depth%"
|
%print_debug% :enhance_path_recursive "Env Var BEFORE - depth=%depth%"
|
||||||
%print_debug% :enhance_path_recursive "Found Subdirectory - '%%~fi'"
|
%print_debug% :enhance_path_recursive "Found Subdirectory - '%%~fi'"
|
||||||
call :enhance_path_recursive "%%~fi" %depth% %max_depth% %position%
|
call :enhance_path_recursive "%%~fi" %depth% %max_depth% %position%
|
||||||
%print_debug% :enhance_path_recursive "Env Var AFTER- depth=%depth%"
|
%print_debug% :enhance_path_recursive "Env Var AFTER- depth=%depth%"
|
||||||
)
|
)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
|||||||
23
vendor/lib/lib_profile.cmd
vendored
23
vendor/lib/lib_profile.cmd
vendored
@@ -1,37 +1,37 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
call "%~dp0lib_base.cmd"
|
call "%~dp0lib_base.cmd"
|
||||||
call "%%~dp0lib_console"
|
call "%~dp0lib_console.cmd"
|
||||||
set lib_profile=call "%~dp0lib_profile.cmd"
|
set lib_profile=call "%~dp0lib_profile.cmd"
|
||||||
|
|
||||||
if "%~1" == "/h" (
|
if "%~1" == "/h" (
|
||||||
%lib_base% help "%~0"
|
%lib_base% help "%~0"
|
||||||
) else if "%1" neq "" (
|
) else if "%~1" neq "" (
|
||||||
call :%*
|
call :%*
|
||||||
)
|
)
|
||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:run_profile_d
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::run_profile_d - Run all scripts in the passed dir path
|
:::run_profile_d - Run all scripts in the passed directory path
|
||||||
:::
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::
|
:::.
|
||||||
::: call "lib_profile.cmd"
|
::: call "lib_profile.cmd"
|
||||||
:::
|
:::.
|
||||||
:::usage:
|
:::usage:
|
||||||
:::
|
:::.
|
||||||
::: %lib_profile% "[dir_path]"
|
::: %lib_profile% "[dir_path]"
|
||||||
:::
|
:::.
|
||||||
:::required:
|
:::required:
|
||||||
:::
|
:::.
|
||||||
::: [dir_path] <in> Fully qualified directory path containing init *.cmd|*.bat.
|
::: [dir_path] <in> Fully qualified directory path containing init *.cmd|*.bat.
|
||||||
::: Example: "c:\bin"
|
::: Example: "c:\bin"
|
||||||
:::
|
:::.
|
||||||
::: path <out> Sets the path env variable if required.
|
::: path <out> Sets the path env variable if required.
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
:run_profile_d
|
||||||
if not exist "%~1" (
|
if not exist "%~1" (
|
||||||
mkdir "%~1"
|
mkdir "%~1"
|
||||||
)
|
)
|
||||||
@@ -43,4 +43,3 @@ exit /b
|
|||||||
)
|
)
|
||||||
popd
|
popd
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
|||||||
127
vendor/profile.ps1
vendored
127
vendor/profile.ps1
vendored
@@ -5,17 +5,13 @@
|
|||||||
# !!! 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
|
||||||
|
|
||||||
$CMDER_INIT_START = $(Get-Date -UFormat %s)
|
$CMDER_INIT_START = Get-Date
|
||||||
|
|
||||||
# Compatibility with PS major versions <= 2
|
# Determine the script root if not already set
|
||||||
if (!$PSScriptRoot) {
|
if (!$PSScriptRoot) {
|
||||||
$PSScriptRoot = Split-Path $Script:MyInvocation.MyCommand.Path
|
$PSScriptRoot = Split-Path $Script:MyInvocation.MyCommand.Path
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($ENV:CMDER_USER_CONFIG) {
|
|
||||||
Write-Verbose "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 being set.
|
# We do this for Powershell as Admin Sessions because CMDER_ROOT is not being set.
|
||||||
if (!$ENV:CMDER_ROOT) {
|
if (!$ENV:CMDER_ROOT) {
|
||||||
if ($ENV:ConEmuDir) {
|
if ($ENV:ConEmuDir) {
|
||||||
@@ -28,41 +24,61 @@ if (!$ENV:CMDER_ROOT) {
|
|||||||
# Remove trailing '\'
|
# Remove trailing '\'
|
||||||
$ENV:CMDER_ROOT = ($ENV:CMDER_ROOT).TrimEnd("\")
|
$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
|
||||||
# -> recent PowerShell versions include PowerShellGet out of the box
|
|
||||||
$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue)
|
$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue)
|
||||||
|
|
||||||
|
# Enable Debug and Verbose output if CMDER_DEBUG environment variable is set to '1' or 'true'
|
||||||
|
if ($env:CMDER_DEBUG -and ($env:CMDER_DEBUG -match '^(1|true)$')) {
|
||||||
|
$DebugPreference = 'Continue'
|
||||||
|
$VerbosePreference = 'Continue'
|
||||||
|
}
|
||||||
|
|
||||||
# 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/"
|
||||||
|
|
||||||
|
# Import Cmder functions
|
||||||
$CmderFunctions = Join-Path $CmderModulePath "Cmder.ps1"
|
$CmderFunctions = Join-Path $CmderModulePath "Cmder.ps1"
|
||||||
. $CmderFunctions
|
. $CmderFunctions
|
||||||
|
|
||||||
if(-not $moduleInstallerAvailable -and -not $env:PSModulePath.Contains($CmderModulePath) ) {
|
# Configure PSModulePath to include Cmder modules if not already present
|
||||||
|
if (-not $moduleInstallerAvailable -and -not $env:PSModulePath.Contains($CmderModulePath) ) {
|
||||||
$env:PSModulePath = $env:PSModulePath.Insert(0, "$CmderModulePath;")
|
$env:PSModulePath = $env:PSModulePath.Insert(0, "$CmderModulePath;")
|
||||||
}
|
}
|
||||||
|
|
||||||
$gitVersionVendor = (readVersion -gitPath "$ENV:CMDER_ROOT\vendor\git-for-windows\cmd")
|
if ($env:CMDER_USER_CONFIG) {
|
||||||
Write-Debug "GIT VENDOR: ${gitVersionVendor}"
|
Write-Verbose "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '$ENV:CMDER_USER_CONFIG'!"
|
||||||
|
}
|
||||||
|
|
||||||
# Get user installed Git Version[s] and Compare with vendored if found.
|
# Read vendored Git Version
|
||||||
|
$gitVendorPath = Join-Path $ENV:CMDER_ROOT 'vendor\git-for-windows\cmd'
|
||||||
|
$gitVersionVendor = Get-GitVersion -GitPath $gitVendorPath
|
||||||
|
if (-not [string]::IsNullOrEmpty($gitVersionVendor)) {
|
||||||
|
Write-Debug "GIT VENDOR: ${gitVersionVendor}"
|
||||||
|
} else {
|
||||||
|
Write-Debug "GIT VENDOR is not present at '$gitVendorPath'"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get user installed Git version(s) if found, and compare them with vendored version.
|
||||||
foreach ($git in (Get-Command -ErrorAction SilentlyContinue 'git')) {
|
foreach ($git in (Get-Command -ErrorAction SilentlyContinue 'git')) {
|
||||||
Write-Debug "GIT PATH: {$git.Path}"
|
Write-Debug "GIT USER PATH: $($git.Path)"
|
||||||
$gitDir = Split-Path -Path $git.Path
|
$gitDir = Split-Path -Path $git.Path
|
||||||
$gitDir = isGitShim -gitPath $gitDir
|
$gitDir = Get-GitShimPath -GitPath $gitDir
|
||||||
$gitVersionUser = (readVersion -gitPath $gitDir)
|
$gitVersionUser = Get-GitVersion -GitPath $gitDir
|
||||||
Write-Debug "GIT USER: ${gitVersionUser}"
|
Write-Debug "GIT USER VERSION: ${gitVersionUser}"
|
||||||
|
|
||||||
$useGitVersion = compare_git_versions -userVersion $gitVersionUser -vendorVersion $gitVersionVendor
|
$useGitVersion = Compare-GitVersion -UserVersion $gitVersionUser -VendorVersion $gitVersionVendor
|
||||||
Write-Debug "Using Git Version: ${useGitVersion}"
|
Write-Debug "Using Git Version: ${useGitVersion}"
|
||||||
|
|
||||||
# Use user installed Git
|
# Use user installed Git
|
||||||
if ($null -eq $gitPathUser) {
|
if ($null -eq $gitPathUser) {
|
||||||
|
Write-Debug "Detected Git from mingw bin directory"
|
||||||
|
Write-Debug "Git Dir: ${gitDir}"
|
||||||
if ($gitDir -match '\\mingw32\\bin' -or $gitDir -match '\\mingw64\\bin') {
|
if ($gitDir -match '\\mingw32\\bin' -or $gitDir -match '\\mingw64\\bin') {
|
||||||
$gitPathUser = ($gitDir.subString(0,$gitDir.Length - 12))
|
$gitPathUser = $gitDir.subString(0, $gitDir.Length - 12)
|
||||||
} else {
|
} else {
|
||||||
$gitPathUser = ($gitDir.subString(0,$gitDir.Length - 4))
|
$gitPathUser = $gitDir.subString(0, $gitDir.Length - 4)
|
||||||
}
|
}
|
||||||
|
Write-Debug "Git Path User: ${gitDir}"
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($useGitVersion -eq $gitVersionUser) {
|
if ($useGitVersion -eq $gitVersionUser) {
|
||||||
@@ -73,7 +89,7 @@ foreach ($git in (Get-Command -ErrorAction SilentlyContinue 'git')) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# User vendored Git.
|
# Use vendored Git if no user Git found or user Git is older than vendored Git
|
||||||
if ($null -eq $ENV:GIT_INSTALL_ROOT -and $null -ne $gitVersionVendor) {
|
if ($null -eq $ENV:GIT_INSTALL_ROOT -and $null -ne $gitVersionVendor) {
|
||||||
$ENV:GIT_INSTALL_ROOT = "$ENV:CMDER_ROOT\vendor\git-for-windows"
|
$ENV:GIT_INSTALL_ROOT = "$ENV:CMDER_ROOT\vendor\git-for-windows"
|
||||||
$ENV:GIT_INSTALL_TYPE = 'VENDOR'
|
$ENV:GIT_INSTALL_TYPE = 'VENDOR'
|
||||||
@@ -83,23 +99,43 @@ Write-Debug "GIT_INSTALL_ROOT: ${ENV:GIT_INSTALL_ROOT}"
|
|||||||
Write-Debug "GIT_INSTALL_TYPE: ${ENV:GIT_INSTALL_TYPE}"
|
Write-Debug "GIT_INSTALL_TYPE: ${ENV:GIT_INSTALL_TYPE}"
|
||||||
|
|
||||||
if ($null -ne $ENV:GIT_INSTALL_ROOT) {
|
if ($null -ne $ENV:GIT_INSTALL_ROOT) {
|
||||||
$env:Path = Configure-Git -gitRoot "$ENV:GIT_INSTALL_ROOT" -gitType $ENV:GIT_INSTALL_TYPE -gitPathUser $gitPathUser
|
$env:Path = Set-GitPath -GitRoot "$ENV:GIT_INSTALL_ROOT" -GitType $ENV:GIT_INSTALL_TYPE -GitPathUser $gitPathUser
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Create 'vi' alias for 'vim' if vim is available
|
||||||
if (Get-Command -Name "vim" -ErrorAction SilentlyContinue) {
|
if (Get-Command -Name "vim" -ErrorAction SilentlyContinue) {
|
||||||
New-Alias -name "vi" -value vim
|
New-Alias -name "vi" -value vim
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# PSReadline configuration
|
||||||
if (Get-Module PSReadline -ErrorAction "SilentlyContinue") {
|
if (Get-Module PSReadline -ErrorAction "SilentlyContinue") {
|
||||||
|
# Display an extra prompt line between the prompt and the command input
|
||||||
Set-PSReadlineOption -ExtraPromptLineCount 1
|
Set-PSReadlineOption -ExtraPromptLineCount 1
|
||||||
|
|
||||||
|
# Invoked when Enter is pressed to submit a command
|
||||||
|
if ($env:WT_SESSION) {
|
||||||
|
Set-PSReadLineKeyHandler -Key Enter -ScriptBlock {
|
||||||
|
# Get the current command line
|
||||||
|
$line = $null
|
||||||
|
$cursor = $null
|
||||||
|
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor)
|
||||||
|
|
||||||
|
# Accept the line first
|
||||||
|
[Microsoft.PowerShell.PSConsoleReadLine]::AcceptLine()
|
||||||
|
|
||||||
|
# Emit OSC 133;C to mark start of command output
|
||||||
|
# This is written directly to the console after the command is accepted
|
||||||
|
[Console]::Write("$([char]0x1B)]133;C$([char]7)")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Pre-assign default prompt hooks so the first run of cmder gets a working prompt.
|
# Pre-assign default prompt hooks so the first run of Cmder gets a working prompt
|
||||||
$env:gitLoaded = $null
|
$env:gitLoaded = $null
|
||||||
[ScriptBlock]$PrePrompt = {}
|
[ScriptBlock]$PrePrompt = {}
|
||||||
[ScriptBlock]$PostPrompt = {}
|
[ScriptBlock]$PostPrompt = {}
|
||||||
[ScriptBlock]$CmderPrompt = {
|
[ScriptBlock]$CmderPrompt = {
|
||||||
# Check if we're currently running under Admin privileges.
|
# Check if we're currently running under Admin privileges
|
||||||
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
|
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
|
||||||
$principal = [Security.Principal.WindowsPrincipal] $identity
|
$principal = [Security.Principal.WindowsPrincipal] $identity
|
||||||
$adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator
|
$adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator
|
||||||
@@ -108,7 +144,7 @@ $env:gitLoaded = $null
|
|||||||
$Host.UI.RawUI.ForegroundColor = "White"
|
$Host.UI.RawUI.ForegroundColor = "White"
|
||||||
Microsoft.PowerShell.Utility\Write-Host "PS " -NoNewline -ForegroundColor $color
|
Microsoft.PowerShell.Utility\Write-Host "PS " -NoNewline -ForegroundColor $color
|
||||||
Microsoft.PowerShell.Utility\Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
|
Microsoft.PowerShell.Utility\Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
|
||||||
checkGit($pwd.ProviderPath)
|
Show-GitStatus -Path $pwd.ProviderPath
|
||||||
Microsoft.PowerShell.Utility\Write-Host "`nλ" -NoNewLine -ForegroundColor "DarkGray"
|
Microsoft.PowerShell.Utility\Write-Host "`nλ" -NoNewLine -ForegroundColor "DarkGray"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,11 +159,11 @@ if (-not (Test-Path -PathType container "$ENV:CMDER_ROOT\config\profile.d")) {
|
|||||||
|
|
||||||
Push-Location $ENV:CMDER_ROOT\config\profile.d
|
Push-Location $ENV:CMDER_ROOT\config\profile.d
|
||||||
foreach ($x in Get-ChildItem *.psm1) {
|
foreach ($x in Get-ChildItem *.psm1) {
|
||||||
Write-Verbose Write-Host Sourcing $x
|
Write-Verbose "Sourcing $x"
|
||||||
Import-Module $x
|
Import-Module $x
|
||||||
}
|
}
|
||||||
foreach ($x in Get-ChildItem *.ps1) {
|
foreach ($x in Get-ChildItem *.ps1) {
|
||||||
Write-Verbose Write-Host Sourcing $x
|
Write-Verbose "Sourcing $x"
|
||||||
. $x
|
. $x
|
||||||
}
|
}
|
||||||
Pop-Location
|
Pop-Location
|
||||||
@@ -137,11 +173,11 @@ Pop-Location
|
|||||||
if ($ENV:CMDER_USER_CONFIG -ne "" -and (Test-Path "$ENV:CMDER_USER_CONFIG\profile.d")) {
|
if ($ENV:CMDER_USER_CONFIG -ne "" -and (Test-Path "$ENV:CMDER_USER_CONFIG\profile.d")) {
|
||||||
Push-Location $ENV:CMDER_USER_CONFIG\profile.d
|
Push-Location $ENV:CMDER_USER_CONFIG\profile.d
|
||||||
foreach ($x in Get-ChildItem *.psm1) {
|
foreach ($x in Get-ChildItem *.psm1) {
|
||||||
Write-Verbose Write-Host Sourcing $x
|
Write-Verbose "Sourcing $x"
|
||||||
Import-Module $x
|
Import-Module $x
|
||||||
}
|
}
|
||||||
foreach ($x in Get-ChildItem *.ps1) {
|
foreach ($x in Get-ChildItem *.ps1) {
|
||||||
Write-Verbose Write-Host Sourcing $x
|
Write-Verbose "Sourcing $x"
|
||||||
. $x
|
. $x
|
||||||
}
|
}
|
||||||
Pop-Location
|
Pop-Location
|
||||||
@@ -197,6 +233,28 @@ if ( $(Get-Command prompt).Definition -match 'PS \$\(\$executionContext.SessionS
|
|||||||
[ScriptBlock]$Prompt = {
|
[ScriptBlock]$Prompt = {
|
||||||
$lastSUCCESS = $?
|
$lastSUCCESS = $?
|
||||||
$realLastExitCode = $LastExitCode
|
$realLastExitCode = $LastExitCode
|
||||||
|
|
||||||
|
# Terminal-specific escape sequences for Windows Terminal and ConEmu
|
||||||
|
if ($env:WT_SESSION -or $env:ConEmuPID) {
|
||||||
|
# Emit OSC 133;D to mark the end of command execution with exit code
|
||||||
|
if ($env:WT_SESSION) {
|
||||||
|
Microsoft.PowerShell.Utility\Write-Host -NoNewline "$([char]0x1B)]133;D;$realLastExitCode$([char]7)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Emit OSC 9;9 to enable directory tracking
|
||||||
|
# Enables "Duplicate Tab" and "Split Pane" to preserve the working directory
|
||||||
|
$loc = $executionContext.SessionState.Path.CurrentLocation
|
||||||
|
if ($loc.Provider.Name -eq "FileSystem") {
|
||||||
|
Microsoft.PowerShell.Utility\Write-Host -NoNewline "$([char]0x1B)]9;9;`"$($loc.ProviderPath)`"$([char]0x1B)\"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Emit OSC 133;A to mark the start of the prompt
|
||||||
|
# Enables features like command navigation, selection, and visual separators
|
||||||
|
if ($env:WT_SESSION) {
|
||||||
|
Microsoft.PowerShell.Utility\Write-Host -NoNewline "$([char]0x1B)]133;A$([char]7)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$host.UI.RawUI.WindowTitle = Microsoft.PowerShell.Management\Split-Path $pwd.ProviderPath -Leaf
|
$host.UI.RawUI.WindowTitle = Microsoft.PowerShell.Management\Split-Path $pwd.ProviderPath -Leaf
|
||||||
Microsoft.PowerShell.Utility\Write-Host -NoNewline "$([char]0x200B)`r$([char]0x1B)[K"
|
Microsoft.PowerShell.Utility\Write-Host -NoNewline "$([char]0x200B)`r$([char]0x1B)[K"
|
||||||
if ($lastSUCCESS -or ($LastExitCode -ne 0)) {
|
if ($lastSUCCESS -or ($LastExitCode -ne 0)) {
|
||||||
@@ -205,6 +263,12 @@ if ( $(Get-Command prompt).Definition -match 'PS \$\(\$executionContext.SessionS
|
|||||||
PrePrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
PrePrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
||||||
CmderPrompt
|
CmderPrompt
|
||||||
PostPrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
PostPrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
||||||
|
|
||||||
|
# Emit OSC 133;B to mark the start of command input (after prompt, before user types)
|
||||||
|
if ($env:WT_SESSION) {
|
||||||
|
Microsoft.PowerShell.Utility\Write-Host -NoNewline "$([char]0x1B)]133;B$([char]7)"
|
||||||
|
}
|
||||||
|
|
||||||
$global:LastExitCode = $realLastExitCode
|
$global:LastExitCode = $realLastExitCode
|
||||||
return " "
|
return " "
|
||||||
}
|
}
|
||||||
@@ -224,5 +288,8 @@ if ( $(Get-Command prompt).Definition -match 'PS \$\(\$executionContext.SessionS
|
|||||||
Set-Item -Path function:\prompt -Value $Prompt -Options ReadOnly
|
Set-Item -Path function:\prompt -Value $Prompt -Options ReadOnly
|
||||||
}
|
}
|
||||||
|
|
||||||
$CMDER_INIT_END = $(Get-Date -UFormat %s)
|
$CMDER_INIT_END = Get-Date
|
||||||
Write-Verbose "Elapsed Time: $(get-Date) `($($CMDER_INIT_END - $CMDER_INIT_START) total`)"
|
|
||||||
|
$ElapsedTime = New-TimeSpan -Start $CMDER_INIT_START -End $CMDER_INIT_END
|
||||||
|
|
||||||
|
Write-Verbose "Elapsed Time: $($ElapsedTime.TotalSeconds) seconds total"
|
||||||
|
|||||||
307
vendor/psmodules/Cmder.ps1
vendored
307
vendor/psmodules/Cmder.ps1
vendored
@@ -1,177 +1,250 @@
|
|||||||
function readVersion($gitPath) {
|
function Get-GitVersion {
|
||||||
$gitExecutable = "${gitPath}\git.exe"
|
param(
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[string]$GitPath
|
||||||
|
)
|
||||||
|
|
||||||
if (-not (Test-Path "$gitExecutable")) {
|
$gitExecutable = Join-Path $GitPath "git.exe"
|
||||||
|
|
||||||
|
if (-not (Test-Path $gitExecutable)) {
|
||||||
return $null
|
return $null
|
||||||
}
|
}
|
||||||
|
|
||||||
$gitVersion = (cmd /c "${gitExecutable}" --version)
|
# Execute 'git --version' and capture output
|
||||||
|
$gitVersion = & $gitExecutable --version 2>$null
|
||||||
|
|
||||||
if ($gitVersion -match 'git version') {
|
if ($gitVersion -match 'git version\s+(\S+)') {
|
||||||
($trash1, $trash2, $gitVersion) = $gitVersion.split(' ', 3)
|
return $Matches[1]
|
||||||
} else {
|
|
||||||
pause
|
|
||||||
return $null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $gitVersion.toString()
|
Write-Debug "Git executable path: $gitExecutable"
|
||||||
|
Write-Error "'git --version' returned an improper version string!"
|
||||||
|
Write-Error "Unable to determine Git version from output: $gitVersion"
|
||||||
|
|
||||||
|
return $null
|
||||||
}
|
}
|
||||||
|
|
||||||
function isGitShim($gitPath) {
|
function Get-GitShimPath {
|
||||||
# check if there's shim - and if yes follow the path
|
param(
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[string]$GitPath
|
||||||
|
)
|
||||||
|
# Check if there is a shim file - if yes, read the actual executable path
|
||||||
|
# See: github.com/ScoopInstaller/Shim
|
||||||
|
|
||||||
if (Test-Path "${gitPath}\git.shim") {
|
$shimFile = Join-Path $GitPath "git.shim"
|
||||||
$shim = (get-content "${gitPath}\git.shim")
|
if (Test-Path $shimFile) {
|
||||||
($trash, $gitPath) = $shim.replace(' ', '').split('=')
|
$shimContent = Get-Content $shimFile -Raw
|
||||||
|
if ($shimContent -match '^\s*path\s*=\s*(.+)\s*$') {
|
||||||
$gitPath = $gitPath.replace('\git.exe', '')
|
$GitPath = $Matches[1].Trim().Replace('\git.exe', '')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $gitPath.toString()
|
return $GitPath
|
||||||
}
|
}
|
||||||
|
|
||||||
function compareVersions($userVersion, $vendorVersion) {
|
function Compare-Version {
|
||||||
if ($null -ne $userVersion) {
|
param(
|
||||||
($userMajor, $userMinor, $userPatch, $userBuild) = $userVersion.split('.', 4)
|
[Parameter(Mandatory = $false)]
|
||||||
} else {
|
[AllowNull()]
|
||||||
return -1
|
[string]$UserVersion,
|
||||||
|
[Parameter(Mandatory = $false)]
|
||||||
|
[AllowNull()]
|
||||||
|
[string]$VendorVersion
|
||||||
|
)
|
||||||
|
|
||||||
|
if ([string]::IsNullOrEmpty($UserVersion)) { return -1 }
|
||||||
|
if ([string]::IsNullOrEmpty($VendorVersion)) { return 1 }
|
||||||
|
|
||||||
|
# Split version strings by dots to compare segment by segment
|
||||||
|
# For "2.49.0.windows.1", we get: ["2", "49", "0", "windows", "1"]
|
||||||
|
$userParts = $UserVersion -split '\.'
|
||||||
|
$vendorParts = $VendorVersion -split '\.'
|
||||||
|
|
||||||
|
$maxLength = [Math]::Max($userParts.Count, $vendorParts.Count)
|
||||||
|
|
||||||
|
for ($i = 0; $i -lt $maxLength; $i++) {
|
||||||
|
$userPart = if ($i -lt $userParts.Count) { $userParts[$i] } else { '' }
|
||||||
|
$vendorPart = if ($i -lt $vendorParts.Count) { $vendorParts[$i] } else { '' }
|
||||||
|
|
||||||
|
# Check if both parts are purely numeric
|
||||||
|
$userIsNumeric = $userPart -match '^\d+$'
|
||||||
|
$vendorIsNumeric = $vendorPart -match '^\d+$'
|
||||||
|
|
||||||
|
if ($userIsNumeric -and $vendorIsNumeric) {
|
||||||
|
# Both numeric: compare as integers (so 49 > 5, not lexicographic)
|
||||||
|
$userNum = [int]$userPart
|
||||||
|
$vendorNum = [int]$vendorPart
|
||||||
|
|
||||||
|
if ($userNum -gt $vendorNum) { return 1 }
|
||||||
|
if ($userNum -lt $vendorNum) { return -1 }
|
||||||
|
}
|
||||||
|
elseif ($userIsNumeric -and -not $vendorIsNumeric) {
|
||||||
|
# Numeric segment comes before text segment (e.g., "2.0" < "2.0.rc1")
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
elseif (-not $userIsNumeric -and $vendorIsNumeric) {
|
||||||
|
# Text segment comes after numeric segment
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
# Both are text: use case-insensitive lexicographic comparison
|
||||||
|
$cmp = [string]::Compare($userPart, $vendorPart, $true)
|
||||||
|
if ($cmp -ne 0) { return [Math]::Sign($cmp) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($null -ne $vendorVersion) {
|
|
||||||
($vendorMajor, $vendorMinor, $vendorPatch, $vendorBuild) = $vendorVersion.split('.', 4)
|
|
||||||
} else {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($userMajor -eq $vendorMajor) -and ($userMinor -eq $vendorMinor) -and ($userPatch -eq $vendorPatch) -and ($userBuild -eq $vendorBuild)) {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($userMajor -gt $vendorMajor) { return 1 }
|
|
||||||
if ($userMajor -lt $vendorMajor) { return -1 }
|
|
||||||
|
|
||||||
if ($userMinor -gt $vendorMinor) { return 1 }
|
|
||||||
if ($userMinor -lt $vendorMinor) { return -1 }
|
|
||||||
|
|
||||||
if ($userPatch -gt $vendorPatch) { return 1 }
|
|
||||||
if ($userPatch -lt $vendorPatch) { return -1 }
|
|
||||||
|
|
||||||
if ($userBuild -gt $vendorBuild) { return 1 }
|
|
||||||
if ($userBuild -lt $vendorBuild) { return -1 }
|
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
function compare_git_versions($userVersion, $vendorVersion) {
|
function Compare-GitVersion {
|
||||||
$result = compareVersions -userVersion $userVersion -vendorVersion $vendorVersion
|
param(
|
||||||
|
[Parameter(Mandatory = $false)]
|
||||||
|
[AllowNull()]
|
||||||
|
[string]$UserVersion,
|
||||||
|
[Parameter(Mandatory = $false)]
|
||||||
|
[AllowNull()]
|
||||||
|
[string]$VendorVersion
|
||||||
|
)
|
||||||
|
|
||||||
Write-Debug "Compare Versions Result: ${result}"
|
$result = Compare-Version -UserVersion $UserVersion -VendorVersion $VendorVersion
|
||||||
|
|
||||||
|
Write-Debug "Compare Versions Result: $result"
|
||||||
if ($result -ge 0) {
|
if ($result -ge 0) {
|
||||||
return $userVersion
|
return $UserVersion
|
||||||
}
|
|
||||||
else {
|
|
||||||
return $vendorVersion
|
|
||||||
}
|
}
|
||||||
|
return $VendorVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
function Configure-Git($gitRoot, $gitType, $gitPathUser) {
|
function Set-GitPath {
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[string]$GitRoot,
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[string]$GitType,
|
||||||
|
[Parameter(Mandatory = $false)]
|
||||||
|
[string]$GitPathUser
|
||||||
|
)
|
||||||
|
|
||||||
# Proposed Behavior
|
# Proposed Behavior
|
||||||
|
|
||||||
# Modify the path if we are using VENDORED Git, do nothing if using USER Git.
|
# Modify the path if we are using VENDORED Git, do nothing if using USER Git.
|
||||||
# If User Git is installed but is older, match its path config adding paths
|
# If User Git is installed but is older, match its path config adding paths
|
||||||
# in the same path positions allowing a user to configure Cmder Git path
|
# in the same path positions allowing a user to configure Cmder Git path
|
||||||
# using locally installed Git Path Config.
|
# using locally installed Git Path Config.
|
||||||
if ($gitType -eq 'VENDOR') {
|
|
||||||
# If User Git is installed replace its path config with Newer Vendored Git Path
|
|
||||||
if (($null -ne $gitPathUser) -and ($gitPathUser -ne '')) {
|
|
||||||
Write-Verbose "Cmder 'profile.ps1': Replacing older user Git path '$gitPathUser' with newer vendored Git path '$gitRoot' in the system path..."
|
|
||||||
|
|
||||||
$newPath = ($env:path -ireplace [regex]::Escape($gitPathUser), $gitRoot)
|
if ($GitType -ne 'VENDOR') {
|
||||||
}
|
return $env:Path
|
||||||
else {
|
|
||||||
if (-not ($env:Path -match [regex]::Escape("$gitRoot\cmd"))) {
|
|
||||||
Write-Debug "Adding $gitRoot\cmd to the path"
|
|
||||||
$newPath = $($gitRoot + "\cmd" + ";" + $env:Path)
|
|
||||||
}
|
|
||||||
|
|
||||||
# Add "$gitRoot\mingw[32|64]\bin" to the path if exists and not done already
|
|
||||||
if ((Test-Path "$gitRoot\mingw32\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\mingw32\bin"))) {
|
|
||||||
Write-Debug "Adding $gitRoot\mingw32\bin to the path"
|
|
||||||
$newPath = "$newPath;$gitRoot\mingw32\bin"
|
|
||||||
}
|
|
||||||
elseif ((Test-Path "$gitRoot\mingw64\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\mingw64\bin"))) {
|
|
||||||
Write-Debug "Adding $gitRoot\mingw64\bin to the path"
|
|
||||||
$newPath = "$newPath;$gitRoot\mingw64\bin"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Add "$gitRoot\usr\bin" to the path if exists and not done already
|
|
||||||
if ((Test-Path "$gitRoot\usr\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\usr\bin"))) {
|
|
||||||
Write-Debug "Adding $gitRoot\usr\bin to the path"
|
|
||||||
$newPath = "$newPath;$gitRoot\usr\bin"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $newPath
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $env:path
|
$newPath = $env:Path
|
||||||
|
|
||||||
|
# Replace user Git path with vendored Git if user path exists
|
||||||
|
if ($GitPathUser) {
|
||||||
|
Write-Verbose "Cmder 'profile.ps1': Replacing older user Git path '$GitPathUser' with newer vendored Git path '$GitRoot' in the system path..."
|
||||||
|
$newPath = $newPath -ireplace [regex]::Escape($GitPathUser), $GitRoot
|
||||||
|
} else {
|
||||||
|
# Add Git cmd directory to the path
|
||||||
|
$gitCmd = Join-Path $GitRoot "cmd"
|
||||||
|
if (-not ($newPath -match [regex]::Escape($gitCmd))) {
|
||||||
|
Write-Debug "Adding $gitCmd to the path"
|
||||||
|
$newPath = "$gitCmd;$newPath"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add mingw[32|64]\bin directories to the path, if they exist and not already present
|
||||||
|
# Prefer mingw64 on 64-bit systems, mingw32 on 32-bit systems
|
||||||
|
$is64Bit = [Environment]::Is64BitOperatingSystem
|
||||||
|
$mingwDirs = if ($is64Bit) { @('mingw64', 'mingw32') } else { @('mingw32') }
|
||||||
|
|
||||||
|
foreach ($mingw in $mingwDirs) {
|
||||||
|
$mingwBin = Join-Path $GitRoot "$mingw\bin"
|
||||||
|
if ((Test-Path $mingwBin) -and -not ($newPath -match [regex]::Escape($mingwBin))) {
|
||||||
|
Write-Debug "Adding $mingwBin to the path"
|
||||||
|
$newPath = "$newPath;$mingwBin"
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add usr\bin directory to the path
|
||||||
|
$usrBin = Join-Path $GitRoot "usr\bin"
|
||||||
|
if ((Test-Path $usrBin) -and -not ($newPath -match [regex]::Escape($usrBin))) {
|
||||||
|
Write-Debug "Adding $usrBin to the path"
|
||||||
|
$newPath = "$newPath;$usrBin"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $newPath
|
||||||
}
|
}
|
||||||
|
|
||||||
function Import-Git() {
|
function Import-Git {
|
||||||
$GitModule = Get-Module -Name Posh-Git -ListAvailable
|
$gitModule = Get-Module -Name Posh-Git -ListAvailable
|
||||||
if ($GitModule | Select-Object version | Where-Object version -le ([version]"0.6.1.20160330")) {
|
|
||||||
Import-Module Posh-Git > $null
|
if (-not $gitModule) {
|
||||||
}
|
Microsoft.PowerShell.Utility\Write-Host -NoNewline "`r`n"
|
||||||
if ($GitModule | Select-Object version | Where-Object version -ge ([version]"1.0.0")) {
|
|
||||||
Import-Module Posh-Git > $null
|
|
||||||
$GitPromptSettings.AnsiConsole = $false
|
|
||||||
}
|
|
||||||
if (-not $GitModule) {
|
|
||||||
Write-Host -NoNewline "`r`n"
|
|
||||||
Write-Warning "Missing git support, install posh-git with 'Install-Module posh-git' and restart Cmder."
|
Write-Warning "Missing git support, install posh-git with 'Install-Module posh-git' and restart Cmder."
|
||||||
Write-Host -NoNewline "`r$([char]0x1B)[A"
|
Microsoft.PowerShell.Utility\Write-Host -NoNewline "`r$([char]0x1B)[A"
|
||||||
return $false
|
return $false
|
||||||
}
|
}
|
||||||
# Make sure we only run once by always returning true
|
|
||||||
|
# Import posh-git module (works for all versions)
|
||||||
|
Import-Module Posh-Git -ErrorAction SilentlyContinue | Out-Null
|
||||||
|
|
||||||
|
# Apply version-specific settings for posh-git 1.0.0+
|
||||||
|
if (($gitModule.Version -ge [version]"1.0.0") -and (Get-Variable -Name GitPromptSettings -ErrorAction SilentlyContinue)) {
|
||||||
|
$GitPromptSettings.AnsiConsole = $false
|
||||||
|
}
|
||||||
|
|
||||||
return $true
|
return $true
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkGit($Path) {
|
function Show-GitStatus {
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[string]$Path
|
||||||
|
)
|
||||||
|
|
||||||
if (-not (Get-Command git -ErrorAction SilentlyContinue)) {
|
if (-not (Get-Command git -ErrorAction SilentlyContinue)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (-not (Test-Path -Path (Join-Path $Path '.git'))) {
|
|
||||||
$SplitPath = Split-Path $path
|
$gitDir = Join-Path $Path '.git'
|
||||||
if ($SplitPath) { checkGit($SplitPath) }
|
if (-not (Test-Path $gitDir)) {
|
||||||
|
$parentPath = Split-Path $Path
|
||||||
|
if ($parentPath) {
|
||||||
|
Show-GitStatus -Path $parentPath
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (getGitStatusSetting -eq $true) {
|
|
||||||
|
if (Get-GitStatusSetting) {
|
||||||
if ($null -eq $env:gitLoaded) {
|
if ($null -eq $env:gitLoaded) {
|
||||||
$env:gitLoaded = Import-Git
|
$env:gitLoaded = Import-Git
|
||||||
}
|
}
|
||||||
if ($env:gitLoaded -eq $true) {
|
if ($env:gitLoaded -eq $true) {
|
||||||
Write-VcsStatus
|
Write-VcsStatus
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
$headFile = Join-Path $gitDir 'HEAD'
|
||||||
$headContent = Get-Content (Join-Path $Path '.git/HEAD')
|
if (Test-Path $headFile) {
|
||||||
if ($headContent -like "ref: refs/heads/*") {
|
$headContent = Get-Content $headFile -Raw
|
||||||
$branchName = $headContent.Substring(16)
|
if ($headContent -match 'ref: refs/heads/(.+)') {
|
||||||
|
$branchName = $Matches[1].Trim()
|
||||||
|
} else {
|
||||||
|
$shortHash = $headContent.Substring(0, [Math]::Min(7, $headContent.Length))
|
||||||
|
$branchName = "HEAD detached at $shortHash"
|
||||||
|
}
|
||||||
|
Microsoft.PowerShell.Utility\Write-Host " [$branchName]" -NoNewline -ForegroundColor White
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
$branchName = "HEAD detached at $($headContent.Substring(0, 7))"
|
|
||||||
}
|
|
||||||
Write-Host " [$branchName]" -NoNewline -ForegroundColor White
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getGitStatusSetting() {
|
function Get-GitStatusSetting {
|
||||||
$gitStatus = (git --no-pager config -l) | Out-String
|
$gitConfig = git --no-pager config -l 2>$null | Out-String
|
||||||
|
|
||||||
foreach ($line in $($gitStatus -split "`r`n")) {
|
# Check if git status display is disabled via config
|
||||||
if (($line -match 'cmder.status=false') -or ($line -match 'cmder.psstatus=false')) {
|
# Matches: cmder.status=false or cmder.psstatus=false (PowerShell-specific)
|
||||||
return $false
|
if ($gitConfig -match '(?m)^cmder\.(ps)?status=false$') {
|
||||||
}
|
return $false
|
||||||
}
|
}
|
||||||
|
|
||||||
return $true
|
return $true
|
||||||
|
|||||||
2155
vendor/psmodules/PsGet/PsGet.psm1
vendored
2155
vendor/psmodules/PsGet/PsGet.psm1
vendored
File diff suppressed because it is too large
Load Diff
21
vendor/sources.json
vendored
21
vendor/sources.json
vendored
@@ -1,22 +1,27 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "git-for-windows",
|
"name": "git-for-windows",
|
||||||
"version": "2.39.0.windows.1",
|
"version": "2.51.2.windows.1",
|
||||||
"url": "https://github.com/git-for-windows/git/releases/download/v2.39.0.windows.1/PortableGit-2.39.0-64-bit.7z.exe"
|
"url": "https://github.com/git-for-windows/git/releases/download/v2.51.2.windows.1/PortableGit-2.51.2-64-bit.7z.exe"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "clink",
|
"name": "clink",
|
||||||
"version": "1.4.4",
|
"version": "1.8.8",
|
||||||
"url": "https://github.com/chrisant996/clink/releases/download/v1.4.4/clink.1.4.4.7fe1ca.zip"
|
"url": "https://github.com/chrisant996/clink/releases/download/v1.8.8/clink.1.8.8.a63364.zip"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "conemu-maximus5",
|
"name": "conemu-maximus5",
|
||||||
"version": "22.12.18",
|
"version": "23.07.24",
|
||||||
"url": "https://github.com/Maximus5/ConEmu/releases/download/v22.12.18/ConEmuPack.221218.7z"
|
"url": "https://github.com/ConEmu/ConEmu/releases/download/v23.07.24/ConEmuPack.230724.7z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "windows-terminal",
|
||||||
|
"version": "1.23.12811.0",
|
||||||
|
"url": "https://github.com/microsoft/terminal/releases/download/v1.23.12811.0/Microsoft.WindowsTerminal_1.23.12811.0_x64.zip"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "clink-completions",
|
"name": "clink-completions",
|
||||||
"version": "0.4.2",
|
"version": "0.6.6",
|
||||||
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.4.2.zip"
|
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.6.zip"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user