mirror of
https://github.com/cmderdev/cmder.git
synced 2025-11-09 05:39:03 +08:00
Compare commits
135 Commits
v1.3.22
...
copilot/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
f517494dc4 | ||
|
|
84ee96c64f | ||
|
|
ad804eda44 | ||
|
|
15addb87ee | ||
|
|
47258fbd2b | ||
|
|
37c41e80df | ||
|
|
5a90558714 | ||
|
|
c1f8dfdb27 | ||
|
|
50c3ea4ab3 | ||
|
|
3f53d1b927 | ||
|
|
6180aa53b3 | ||
|
|
5e3b70338d | ||
|
|
a4ea326a62 |
2
.github/workflows/branches.yml
vendored
2
.github/workflows/branches.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
||||
# 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@v3
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0 # fetch all history for all branches and tags
|
||||
|
||||
|
||||
20
.github/workflows/build.yml
vendored
20
.github/workflows/build.yml
vendored
@@ -11,7 +11,7 @@ on:
|
||||
tags:
|
||||
- "v*"
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
branches: [ "master", "development" ]
|
||||
|
||||
#---------------------------------#
|
||||
# environment configuration #
|
||||
@@ -30,15 +30,17 @@ jobs:
|
||||
build:
|
||||
name: Build Project
|
||||
runs-on: windows-latest
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
discussions: write
|
||||
steps:
|
||||
- name: Check out repository code (Action from GitHub)
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Add MSBuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1
|
||||
uses: microsoft/setup-msbuild@v2
|
||||
|
||||
- name: Build Cmder Launcher
|
||||
shell: pwsh
|
||||
@@ -51,32 +53,32 @@ jobs:
|
||||
run: .\pack.ps1 -verbose
|
||||
|
||||
- name: Upload artifact (cmder.zip)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: build/cmder.zip
|
||||
name: cmder.zip
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Upload artifact (cmder.7z)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: build/cmder.7z
|
||||
name: cmder.7z
|
||||
|
||||
- name: Upload artifact (cmder_mini.zip)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: build/cmder_mini.zip
|
||||
name: cmder_mini.zip
|
||||
|
||||
- name: Upload artifact (hashes.txt)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: build/hashes.txt
|
||||
name: hashes.txt
|
||||
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
files: |
|
||||
build/cmder.zip
|
||||
|
||||
29
.github/workflows/codeql.yml
vendored
29
.github/workflows/codeql.yml
vendored
@@ -3,20 +3,25 @@
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
branches: [ "master", "development" ]
|
||||
paths-ignore:
|
||||
- '**/*.md'
|
||||
- '**/*.txt'
|
||||
- '.github/**'
|
||||
- '**/.gitignore'
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ "master" ]
|
||||
branches: [ "master", "development" ]
|
||||
paths-ignore:
|
||||
- '**/*.md'
|
||||
- '**/*.txt'
|
||||
- '.github/**'
|
||||
- '**/.gitignore'
|
||||
schedule:
|
||||
- cron: '30 19 * * 0'
|
||||
|
||||
@@ -40,11 +45,11 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v5
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
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.
|
||||
@@ -55,7 +60,7 @@ jobs:
|
||||
# queries: security-extended,security-and-quality
|
||||
|
||||
- name: Add MSBuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1
|
||||
uses: microsoft/setup-msbuild@v2
|
||||
|
||||
- name: Build Cmder Launcher
|
||||
shell: pwsh
|
||||
@@ -63,6 +68,6 @@ jobs:
|
||||
run: .\build.ps1 -Compile -verbose
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
uses: github/codeql-action/analyze@v4
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
|
||||
14
.github/workflows/tests.yml
vendored
14
.github/workflows/tests.yml
vendored
@@ -4,9 +4,21 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- development
|
||||
paths-ignore:
|
||||
- '**/*.md'
|
||||
- '**/*.txt'
|
||||
- '.github/**'
|
||||
- '**/.gitignore'
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- development
|
||||
paths-ignore:
|
||||
- '**/*.md'
|
||||
- '**/*.txt'
|
||||
- '.github/**'
|
||||
- '**/.gitignore'
|
||||
|
||||
defaults:
|
||||
run:
|
||||
@@ -26,7 +38,7 @@ jobs:
|
||||
continue-on-error: false
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v5
|
||||
- name: Initialize vendors
|
||||
shell: pwsh
|
||||
working-directory: scripts
|
||||
|
||||
4
.github/workflows/vendor.yml
vendored
4
.github/workflows/vendor.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
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
|
||||
|
||||
- uses: peter-evans/create-pull-request@v5
|
||||
- uses: peter-evans/create-pull-request@v7
|
||||
if: env.COUNT_UPDATED > 0
|
||||
with:
|
||||
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.
|
||||
|
||||
⚠ *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) for PowerShell sessions. This enables features like command navigation (jump between commands), command selection, visual command separators, 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).
|
||||
|
||||
## 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.
|
||||
@@ -469,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);
|
||||
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)
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
|
||||
/**
|
||||
* WARNING: do NOT modify this file! the content of this file should be
|
||||
* automatically genereted before AppVeyor builds using the
|
||||
* respective .ps1 Powershell scripts.
|
||||
*
|
||||
* WARNING: This file should NOT be manually modified!
|
||||
* The contents will be automatically generated using the `.ps1` PowerShell scripts,
|
||||
* during builds by the CI.
|
||||
*/
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -79,7 +79,7 @@ if ($Compile) {
|
||||
|
||||
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
|
||||
|
||||
if ($LastExitCode -ne 0) {
|
||||
|
||||
@@ -32,7 +32,11 @@ Param(
|
||||
# -whatif switch to not actually make changes
|
||||
|
||||
# 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.
|
||||
@@ -79,11 +83,39 @@ function Match-Filenames {
|
||||
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.
|
||||
function Fetch-DownloadUrl {
|
||||
param (
|
||||
[Parameter(Mandatory = $true)]
|
||||
$urlStr
|
||||
$urlStr,
|
||||
|
||||
[Parameter(Mandatory = $false)]
|
||||
[bool]$includePrerelease = $false
|
||||
)
|
||||
|
||||
$url = [uri] $urlStr
|
||||
@@ -127,6 +159,13 @@ function Fetch-DownloadUrl {
|
||||
}
|
||||
|
||||
: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])) {
|
||||
continue
|
||||
}
|
||||
@@ -164,12 +203,26 @@ function Fetch-DownloadUrl {
|
||||
|
||||
# Special case for archive downloads of repository
|
||||
if (($null -eq $downloadLinks) -or (-not $downloadLinks)) {
|
||||
if ((($p | ForEach-Object { $_.Trim('/') }) -contains "archive") -and $info[0].tag_name) {
|
||||
for ($i = 0; $i -lt $p.Length; $i++) {
|
||||
if ($p[$i].Trim('/') -eq "archive") {
|
||||
$p[$i + 1] = $info[0].tag_name + ".zip"
|
||||
$downloadLinks = $url.Scheme + "://" + $url.Host + ($p -join '')
|
||||
return $downloadLinks
|
||||
if ((($p | ForEach-Object { $_.Trim('/') }) -contains "archive")) {
|
||||
# Find the first release that matches our pre-release filtering criteria
|
||||
$selectedRelease = $null
|
||||
foreach ($release in $info) {
|
||||
# Apply the same filtering logic
|
||||
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)"
|
||||
|
||||
$downloadUrl = Fetch-DownloadUrl $s.url
|
||||
$downloadUrl = Fetch-DownloadUrl $s.url -includePrerelease $IncludePrerelease
|
||||
|
||||
if (($null -eq $downloadUrl) -or ($downloadUrl -eq '')) {
|
||||
Write-Verbose "No new links were found"
|
||||
|
||||
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%"
|
||||
call "%CMDER_ROOT%\vendor\init.bat" /f
|
||||
call "%CMDER_ROOT%\vendor\init.bat" /f %*
|
||||
popd
|
||||
|
||||
14
vendor/bin/excd.cmd
vendored
14
vendor/bin/excd.cmd
vendored
@@ -1,6 +1,8 @@
|
||||
@if "%~1"=="/?" (@cd %*)
|
||||
@set excd=%*
|
||||
@set excd=%excd:"=%
|
||||
@if "%excd:~0,1%"=="~" (@set excd=%userprofile%\%excd:~1%)
|
||||
@if not "%~1"=="/d" (@set excd_param="/d") else (@set excd_param=)
|
||||
@cd %excd_param% "%excd%"
|
||||
@echo off
|
||||
set excd=%*
|
||||
set excd=%excd:"=%
|
||||
set excd_param=/d
|
||||
if /i "%excd:~0,2%"=="/d" set "excd=%excd:~2%"
|
||||
if "%excd:~0,1%"=="~" (set excd=%userprofile%\%excd:~1%)
|
||||
if "%excd:~0,1%"=="/" (set excd_param=)
|
||||
cd %excd_param% %excd%
|
||||
|
||||
208
vendor/clink.lua
vendored
208
vendor/clink.lua
vendored
@@ -7,7 +7,7 @@
|
||||
-- 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 prompt_overrideSvnStatusOptIn
|
||||
-- luacheck: globals prompt_overrideGitStatusOptIn
|
||||
-- luacheck: globals clink io.popenyield os.isdir settings.get
|
||||
|
||||
-- At first, load the original clink.lua file
|
||||
@@ -51,11 +51,37 @@ local function get_unknown_color()
|
||||
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)
|
||||
s = string.gsub(s, "%%", "%%%%")
|
||||
return s
|
||||
local function escape_gsub_find_arg(text)
|
||||
return text and text:gsub("([-+*?.%%()%[%]$^])", "%%%1") or ""
|
||||
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
|
||||
|
||||
-- Extracts only the folder name from the input Path
|
||||
@@ -153,7 +179,7 @@ local function set_prompt_filter()
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
local uah = ''
|
||||
@@ -176,14 +202,14 @@ local function set_prompt_filter()
|
||||
local version_control = prompt_includeVersionControl and "{git}{hg}{svn}" or ""
|
||||
|
||||
local prompt = "{uah}{cwd}" .. version_control .. cr .. get_lamb_color() .. "{env}{lamb}\x1b[0m "
|
||||
prompt = string.gsub(prompt, "{uah}", uah)
|
||||
prompt = string.gsub(prompt, "{cwd}", cwd)
|
||||
prompt = string.gsub(prompt, "{env}", env)
|
||||
clink.prompt.value = string.gsub(prompt, "{lamb}", prompt_lambSymbol)
|
||||
prompt = gsub_plain(prompt, "{uah}", uah)
|
||||
prompt = gsub_plain(prompt, "{cwd}", cwd)
|
||||
prompt = gsub_plain(prompt, "{env}", env)
|
||||
clink.prompt.value = gsub_plain(prompt, "{lamb}", prompt_lambSymbol)
|
||||
end
|
||||
|
||||
local function percent_prompt_filter()
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{percent}", "%%")
|
||||
clink.prompt.value = gsub_plain(clink.prompt.value, "{percent}", "%")
|
||||
end
|
||||
|
||||
---
|
||||
@@ -324,13 +350,8 @@ end
|
||||
-- @return {false|mercurial branch information}
|
||||
---
|
||||
local function get_hg_branch()
|
||||
-- Return the branch information. The default is to get just the
|
||||
-- branch name, but you could e.g. use the "hg-prompt" extension to
|
||||
-- get more information, such as any applied mq patches. Here's an
|
||||
-- example of that:
|
||||
-- local cmd = "hg prompt \"{branch}{status}{|{patch}}{update}\""
|
||||
local cmd = "hg branch 2>nul"
|
||||
local file = io.popen(cmd)
|
||||
-- Return the branch information.
|
||||
local file = io.popen("hg branch 2>nul")
|
||||
if not file then
|
||||
return false
|
||||
end
|
||||
@@ -398,12 +419,33 @@ local function get_git_status()
|
||||
return { status = is_status, conflict = conflict_found }
|
||||
end
|
||||
|
||||
---
|
||||
-- Get the status of working dir
|
||||
-- @return {bool}
|
||||
---
|
||||
local function get_hg_status()
|
||||
-- The default is to just use the branch name, but you could e.g. use the
|
||||
-- "hg-prompt" extension to get more information, such as any applied mq
|
||||
-- patches. Here's an example of that:
|
||||
-- "hg prompt \"{branch}{status}{|{patch}}{update}\""
|
||||
local pipe = io_popenyield("hg status -amrd 2>&1")
|
||||
if not pipe then
|
||||
return { error = true }
|
||||
end
|
||||
|
||||
local output = pipe:read('*all')
|
||||
pipe:close()
|
||||
|
||||
local dirty = (output ~= nil and output ~= "")
|
||||
return { clean = not dirty }
|
||||
end
|
||||
|
||||
---
|
||||
-- Get the status of working dir
|
||||
-- @return {bool}
|
||||
---
|
||||
local function get_svn_status()
|
||||
local file = io_popenyield("svn status -q")
|
||||
local file = io_popenyield("svn status -q 2>nul")
|
||||
if not file then
|
||||
return { error = true }
|
||||
end
|
||||
@@ -494,14 +536,6 @@ local function git_prompt_filter()
|
||||
return false
|
||||
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 color
|
||||
if git_dir then
|
||||
@@ -521,27 +555,40 @@ local function git_prompt_filter()
|
||||
local gitConflict = gitInfo.conflict
|
||||
|
||||
if gitStatus == nil then
|
||||
color = colors.nostatus
|
||||
color = get_unknown_color()
|
||||
elseif gitStatus then
|
||||
color = colors.clean
|
||||
color = get_clean_color()
|
||||
else
|
||||
color = colors.dirty
|
||||
color = get_dirty_color()
|
||||
end
|
||||
|
||||
if gitConflict then
|
||||
color = colors.conflict
|
||||
color = get_conflict_color()
|
||||
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
|
||||
end
|
||||
end
|
||||
|
||||
-- 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
|
||||
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()
|
||||
|
||||
-- Don't do any hg processing if the prompt doesn't want to show hg info.
|
||||
@@ -551,39 +598,48 @@ local function hg_prompt_filter()
|
||||
|
||||
local hg_dir = get_hg_dir()
|
||||
if hg_dir then
|
||||
-- Colors for mercurial status
|
||||
local colors = {
|
||||
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
|
||||
local branch = get_hg_branch()
|
||||
if branch and
|
||||
string.sub(branch,1,7) ~= "abort: " and -- not an HG working copy
|
||||
(not string.find(branch, "is not recognized")) then -- 'hg' not in path
|
||||
local color = colors.clean
|
||||
|
||||
local pipe = io.popen("hg status -amrd 2>&1")
|
||||
if pipe then
|
||||
output = pipe:read('*all')
|
||||
pipe:close()
|
||||
if output ~= nil and output ~= "" then color = colors.dirty end
|
||||
-- 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 result = color .. "(" .. branch .. ")"
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", " "..verbatim(result))
|
||||
local hgInfo = get_hg_info_table()
|
||||
|
||||
local color
|
||||
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
|
||||
|
||||
-- No hg present or not in hg repo
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", "")
|
||||
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
|
||||
|
||||
local function svn_prompt_filter()
|
||||
@@ -593,13 +649,6 @@ local function svn_prompt_filter()
|
||||
return false
|
||||
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()
|
||||
if svn_dir then
|
||||
-- if we're inside of svn repo then try to detect current branch
|
||||
@@ -611,38 +660,25 @@ local function svn_prompt_filter()
|
||||
cached_info.svn_dir = svn_dir
|
||||
cached_info.svn_branch = branch
|
||||
end
|
||||
-- Get the svn status using coroutine if available and option is enabled. Otherwise use a blocking call
|
||||
local svnStatus
|
||||
if clink.promptcoroutine and io.popenyield and settings.get("prompt.async") and prompt_overrideSvnStatusOptIn then -- luacheck: no max line length
|
||||
svnStatus = clink_promptcoroutine(function ()
|
||||
return get_svn_status()
|
||||
end)
|
||||
-- If the status result is pending, use the cached version instead, otherwise store it to the cache
|
||||
if svnStatus == nil then
|
||||
svnStatus = cached_info.svn_info
|
||||
else
|
||||
cached_info.svn_info = svnStatus
|
||||
end
|
||||
else
|
||||
svnStatus = get_svn_status()
|
||||
end
|
||||
|
||||
local svnInfo = get_svn_info_table()
|
||||
|
||||
local color
|
||||
if not svnStatus or svnStatus.error then
|
||||
color = colors.nostatus
|
||||
elseif svnStatus.clean then
|
||||
color = colors.clean
|
||||
if not svnInfo or svnInfo.error then
|
||||
color = get_unknown_color()
|
||||
elseif svnInfo.clean then
|
||||
color = get_clean_color()
|
||||
else
|
||||
color = colors.dirty
|
||||
color = get_dirty_color()
|
||||
end
|
||||
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", " "..color.."("..verbatim(branch)..")")
|
||||
clink.prompt.value = gsub_plain(clink.prompt.value, "{svn}", " "..color.."("..branch..")")
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- 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
|
||||
end
|
||||
|
||||
|
||||
4
vendor/clink_settings.default
vendored
4
vendor/clink_settings.default
vendored
@@ -1,6 +1,10 @@
|
||||
# For explanation of these and other settings see:
|
||||
# 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
|
||||
# type: enum
|
||||
# options: off,on,not_squoted,not_dquoted,not_quoted
|
||||
|
||||
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.
|
||||
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
|
||||
--
|
||||
-- Colors: https://github.com/cmderdev/cmder/wiki/Customization#list-of-colors
|
||||
-- Effects: https://github.com/cmderdev/cmder/wiki/Customization#list-of-effects
|
||||
--
|
||||
-- Green: "\x1b[1;33;49m"
|
||||
-- Yellow: "\x1b[1;32;49m"
|
||||
-- Green: "\x1b[1;32;49m"
|
||||
-- Yellow: "\x1b[1;33;49m"
|
||||
-- Light Grey: "\x1b[1;30;49m"
|
||||
|
||||
-- Prompt Element Colors
|
||||
uah_color = "\x1b[1;33;49m" -- Green = uah = [user]@[hostname]
|
||||
cwd_color = "\x1b[1;32;49m" -- Yellow cwd = Current Working Directory
|
||||
uah_color = "\x1b[1;33;49m" -- Yellow uah = [user]@[hostname]
|
||||
cwd_color = "\x1b[1;32;49m" -- Green cwd = Current Working Directory
|
||||
lamb_color = "\x1b[1;30;49m" -- Light Grey = Lambda Color
|
||||
clean_color = "\x1b[37;1m"
|
||||
dirty_color = "\x1b[33;3m" -- Yellow, Italic
|
||||
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
|
||||
|
||||
70
vendor/git-prompt.sh
vendored
70
vendor/git-prompt.sh
vendored
@@ -1,26 +1,35 @@
|
||||
# Returns 1 if git status for Cmder is disabled, otherwise returns 0
|
||||
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 for Cmder is disabled
|
||||
if [[ $gitConfig =~ (^|$'\n')cmder\.status=false($|$'\n') ]] || \
|
||||
[[ $gitConfig =~ (^|$'\n')cmder\.shstatus=false($|$'\n') ]]
|
||||
then
|
||||
echo false
|
||||
else
|
||||
echo true
|
||||
return 1 # disabled
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Prints current branch or detached HEAD short commit hash
|
||||
function getSimpleGitBranch() {
|
||||
gitDir=$(git rev-parse --git-dir 2>/dev/null)
|
||||
if [ -z "$gitDir" ]; then
|
||||
return 0
|
||||
fi
|
||||
local gitDir
|
||||
gitDir=$(git rev-parse --git-dir 2>/dev/null) || return 0
|
||||
|
||||
headContent=$(< "$gitDir/HEAD")
|
||||
if [[ "$headContent" == "ref: refs/heads/"* ]]
|
||||
local headFile="$gitDir/HEAD"
|
||||
[ -f "$headFile" ] || return 0
|
||||
|
||||
local headContent
|
||||
headContent=$(< "$headFile")
|
||||
if [[ "$headContent" =~ ^ref:\ refs/heads/(.+)$ ]]
|
||||
then
|
||||
echo " (${headContent:16})"
|
||||
echo " (${BASH_REMATCH[1]})"
|
||||
else
|
||||
echo " (HEAD detached at ${headContent:0:7})"
|
||||
echo " (HEAD detached at ${headContent:0:7})"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -33,18 +42,18 @@ fi
|
||||
|
||||
if test -f ~/.config/git/git-prompt.sh
|
||||
then
|
||||
if [[ $(getGitStatusSetting) == true ]]
|
||||
if getGitStatusSetting
|
||||
then
|
||||
. ~/.config/git/git-prompt.sh
|
||||
fi
|
||||
else
|
||||
PS1='\[\033]0;$MSYSTEM:${PWD//[^[:ascii:]]/?}\007\]' # set window title
|
||||
# PS1="$PS1"'\n' # new line
|
||||
PS1="$PS1"'\[\033[32m\]' # change to green
|
||||
# Taken parts from https://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)
|
||||
PS1="$PS1"'\[\033[32m\]' # change to green and bold
|
||||
PS1="$PS1"'\u@\h ' # user@host<space>
|
||||
# PS1="$PS1"'\[\033[35m\]' # change to purple
|
||||
# PS1="$PS1"'$MSYSTEM ' # show MSYSTEM
|
||||
PS1="$PS1"'\[\033[33m\]' # change to brownish yellow
|
||||
PS1="$PS1${MSYSTEM:+\[\033[35m\]$MSYSTEM }" # show MSYSTEM in purple (if set)
|
||||
PS1="$PS1"'\[\033[1;33m\]' # change to dark yellow in bold
|
||||
PS1="$PS1"'\w' # current working directory
|
||||
if test -z "$WINELOADERNOEXEC"
|
||||
then
|
||||
@@ -55,7 +64,7 @@ else
|
||||
if test -f "$COMPLETION_PATH/git-prompt.sh"
|
||||
then
|
||||
. "$COMPLETION_PATH/git-completion.bash"
|
||||
if [[ $(getGitStatusSetting) == true ]]
|
||||
if getGitStatusSetting
|
||||
then
|
||||
. "$COMPLETION_PATH/git-prompt.sh"
|
||||
PS1="$PS1"'\[\033[36m\]' # change color to cyan
|
||||
@@ -66,9 +75,22 @@ else
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
PS1="$PS1"'\[\033[0m\]' # change color
|
||||
PS1="$PS1"'\[\033[0m\]' # reset color
|
||||
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
|
||||
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
|
||||
|
||||
4
vendor/init.bat
vendored
4
vendor/init.bat
vendored
@@ -355,7 +355,7 @@ setlocal enabledelayedexpansion
|
||||
if defined git_locale (
|
||||
REM %print_debug% init.bat "Env Var - git_locale=!git_locale!"
|
||||
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"
|
||||
)
|
||||
)
|
||||
@@ -426,7 +426,7 @@ if "%CMDER_ALIASES%" == "1" (
|
||||
)
|
||||
|
||||
:: 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" (
|
||||
echo Migrating alias 'history' to new Clink 1.x.x...
|
||||
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" (
|
||||
%lib_base% help "%~0"
|
||||
) else if "%1" neq "" (
|
||||
) else if "%~1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
|
||||
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:
|
||||
:::.
|
||||
@@ -20,16 +19,15 @@ exit /b
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_base% show_subs "file"
|
||||
::: %lib_base% help "file"
|
||||
:::.
|
||||
:::options:
|
||||
:::.
|
||||
::: file <in> full path to file containing lib_routines to display
|
||||
:::.
|
||||
:::-------------------------------------------------------------------------------
|
||||
for /f "tokens=* delims=:" %%a in ('type "%~1" ^| %WINDIR%\System32\findstr /i /r "^:::"') do (
|
||||
rem echo a="%%a"
|
||||
|
||||
:help
|
||||
for /f "tokens=* delims=:" %%a in ('%WINDIR%\System32\findstr /i /r "^:::" "%~1"') do (
|
||||
if "%%a"=="." (
|
||||
echo.
|
||||
) else if /i "%%a" == "usage" (
|
||||
@@ -44,9 +42,13 @@ exit /b
|
||||
pause
|
||||
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:
|
||||
:::.
|
||||
@@ -55,15 +57,30 @@ exit /b
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_base% cmder_shell
|
||||
:::.
|
||||
:::options:
|
||||
:::.
|
||||
::: file <in> full path to file containing lib_routines to display
|
||||
:::.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
:cmder_shell
|
||||
call :detect_comspec %ComSpec%
|
||||
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
|
||||
set CMDER_SHELL=%~n1
|
||||
if not defined CMDER_CLINK (
|
||||
@@ -74,6 +91,27 @@ 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
|
||||
type "%user_aliases%" | %WINDIR%\System32\findstr /i ";= Add aliases below here" >nul
|
||||
if "%errorlevel%" == "1" (
|
||||
|
||||
2
vendor/lib/lib_console.cmd
vendored
2
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" (
|
||||
%lib_base% help "%~0"
|
||||
) else if "%1" neq "" (
|
||||
) else if "%~1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
|
||||
|
||||
35
vendor/lib/lib_git.cmd
vendored
35
vendor/lib/lib_git.cmd
vendored
@@ -1,18 +1,17 @@
|
||||
@echo off
|
||||
|
||||
call "%~dp0lib_base.cmd"
|
||||
call "%%~dp0lib_console.cmd"
|
||||
call "%~dp0lib_console.cmd"
|
||||
set lib_git=call "%~dp0lib_git.cmd"
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%~0"
|
||||
) else if "%1" neq "" (
|
||||
) else if "%~1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
|
||||
exit /b
|
||||
|
||||
:read_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
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
:read_version
|
||||
:: clear the variables
|
||||
set GIT_VERSION_%~1=
|
||||
|
||||
@@ -55,6 +55,7 @@ exit /b
|
||||
set "GIT_VERSION=%%C"
|
||||
) else (
|
||||
echo "'git --version' returned an improper version string!"
|
||||
%print_debug% :read_version "returned string: '%%A %%B %%C' by executable path: %git_executable%"
|
||||
pause
|
||||
exit /b
|
||||
)
|
||||
@@ -63,7 +64,6 @@ exit /b
|
||||
|
||||
exit /b
|
||||
|
||||
:parse_version
|
||||
:::===============================================================================
|
||||
:::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.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
:parse_version
|
||||
:: process a `x.x.x.xxxx.x` formatted string
|
||||
%print_debug% :parse_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
||||
|
||||
@@ -110,9 +111,8 @@ exit /b
|
||||
|
||||
: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:
|
||||
:::.
|
||||
@@ -128,6 +128,7 @@ exit /b
|
||||
::: [VERSION] <in> Semantic version String. Ex: 1.2.3.4
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
:validate_version
|
||||
:: now parse the version information into the corresponding variables
|
||||
%print_debug% :validate_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
||||
|
||||
@@ -142,9 +143,8 @@ exit /b
|
||||
)
|
||||
exit /b
|
||||
|
||||
:compare_versions
|
||||
:::===============================================================================
|
||||
:::compare_version - Compare semantic versions return latest version.
|
||||
:::compare_version - Compare semantic versions and return latest version
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
@@ -160,6 +160,7 @@ exit /b
|
||||
::: [SCOPE2] <in> Example: VENDOR
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
:compare_versions
|
||||
:: checks all major, minor, patch and build variables for the given arguments.
|
||||
:: whichever binary that has the most recent version will be used based on the return code.
|
||||
|
||||
@@ -184,7 +185,12 @@ exit /b
|
||||
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:
|
||||
:::.
|
||||
@@ -201,7 +207,7 @@ exit /b
|
||||
|
||||
:is_git_shim
|
||||
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
|
||||
if exist git.shim (
|
||||
for /F "tokens=2 delims== " %%I in (git.shim) do (
|
||||
@@ -218,7 +224,7 @@ exit /b
|
||||
exit /b
|
||||
|
||||
:::===============================================================================
|
||||
:::compare_git_versions
|
||||
:::compare_git_versions - Compare the user git version against the vendored version
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
@@ -252,7 +258,7 @@ exit /b
|
||||
:: if the user provided git executable is not found
|
||||
IF ERRORLEVEL -255 IF NOT ERRORLEVEL -254 (
|
||||
:: 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=
|
||||
)
|
||||
)
|
||||
@@ -261,7 +267,7 @@ 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:
|
||||
:::.
|
||||
@@ -277,5 +283,4 @@ exit /b
|
||||
%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%"
|
||||
%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
|
||||
|
||||
|
||||
call "%~dp0lib_base.cmd"
|
||||
call "%%~dp0lib_console"
|
||||
call "%~dp0lib_console.cmd"
|
||||
set lib_path=call "%~dp0lib_path.cmd"
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%~0"
|
||||
) else if "%1" neq "" (
|
||||
) else if "%~1" neq "" (
|
||||
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
|
||||
|
||||
:enhance_path
|
||||
@@ -32,18 +38,17 @@ exit /b
|
||||
:::options:
|
||||
:::
|
||||
::: append <in> Append to the path env variable rather than pre-pend.
|
||||
::B
|
||||
:::
|
||||
:::
|
||||
:::output:
|
||||
:::
|
||||
::: path <out> Sets the path env variable if required.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
if "%~1" neq "" (
|
||||
set "add_path=%~1"
|
||||
) else (
|
||||
%print_error% "You must specify a directory to add to the path!"
|
||||
exit 1
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
if "%~2" neq "" if /i "%~2" == "append" (
|
||||
@@ -52,7 +57,8 @@ exit /b
|
||||
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" (
|
||||
set "add_to_path=%add_path%"
|
||||
) else (
|
||||
@@ -66,7 +72,7 @@ exit /b
|
||||
set "PATH=%add_to_path%;%PATH%"
|
||||
)
|
||||
goto :end_enhance_path
|
||||
) else if "add_to_path" equ "" (
|
||||
) else if "%add_to_path%" equ "" (
|
||||
goto :end_enhance_path
|
||||
)
|
||||
|
||||
@@ -78,23 +84,23 @@ exit /b
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
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
|
||||
)
|
||||
%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 "!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
|
||||
)
|
||||
%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 (
|
||||
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
|
||||
)
|
||||
%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%
|
||||
|
||||
@@ -113,7 +119,8 @@ exit /b
|
||||
:end_enhance_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 not "%OLD_PATH:~0,3000%" == "%OLD_PATH:~0,3001%" goto :toolong
|
||||
@@ -121,21 +128,27 @@ exit /b
|
||||
exit /b
|
||||
|
||||
:toolong
|
||||
echo "%OLD_PATH%">"%temp%\cmder_lib_pathA"
|
||||
echo "%PATH%">"%temp%\cmder_lib_pathB"
|
||||
fc /b "%temp%\cmder_lib_pathA" "%temp%\cmder_lib_pathB" 2>nul 1>nul
|
||||
if errorlevel 1 ( del "%temp%\cmder_lib_pathA" & del "%temp%\cmder_lib_pathB" & goto :changed )
|
||||
del "%temp%\cmder_lib_pathA" & del "%temp%\cmder_lib_pathB"
|
||||
set "_rand=%RANDOM%"
|
||||
if exist "%temp%\%_rand%_cmder_lib_pathA" del "%temp%\%_rand%_cmder_lib_pathA" 2>nul 1>nul
|
||||
if exist "%temp%\%_rand%_cmder_lib_pathB" del "%temp%\%_rand%_cmder_lib_pathB" 2>nul 1>nul
|
||||
if exist "%temp%\%_rand%_cmder_lib_pathA" goto :toolong
|
||||
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
|
||||
|
||||
:changed
|
||||
%print_debug% :enhance_path "END Env Var - PATH=%path%"
|
||||
%print_debug% :enhance_path "Env Var %find_query% - found=%found%"
|
||||
%print_debug% :enhance_path "END Env Var - PATH=%PATH%"
|
||||
%print_debug% :enhance_path "Env Var %find_query% - found=%found%"
|
||||
exit /b
|
||||
|
||||
exit /b
|
||||
|
||||
|
||||
:set_found
|
||||
if "%ERRORLEVEL%" == "0" (
|
||||
set found=1
|
||||
@@ -174,7 +187,7 @@ exit /b
|
||||
set "add_path=%~1"
|
||||
) else (
|
||||
%print_error% "You must specify a directory to add to the path!"
|
||||
exit 1
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
set "depth=%~2"
|
||||
@@ -186,7 +199,7 @@ exit /b
|
||||
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" (
|
||||
set "add_to_path=%add_path%"
|
||||
@@ -205,10 +218,10 @@ exit /b
|
||||
exit /b
|
||||
)
|
||||
|
||||
%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 - depth=%depth%"
|
||||
%print_debug% :enhance_path_recursive "Env Var - max_depth=%max_depth%"
|
||||
%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 - depth=%depth%"
|
||||
%print_debug% :enhance_path_recursive "Env Var - max_depth=%max_depth%"
|
||||
|
||||
if %max_depth% gtr %depth% (
|
||||
if "%add_to_path%" neq "" (
|
||||
@@ -223,7 +236,7 @@ exit /b
|
||||
|
||||
exit /b
|
||||
|
||||
: set_depth
|
||||
:set_depth
|
||||
set /a "depth=%depth%+1"
|
||||
exit /b
|
||||
|
||||
@@ -233,10 +246,9 @@ exit /b
|
||||
)
|
||||
|
||||
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'"
|
||||
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
|
||||
|
||||
|
||||
23
vendor/lib/lib_profile.cmd
vendored
23
vendor/lib/lib_profile.cmd
vendored
@@ -1,37 +1,37 @@
|
||||
@echo off
|
||||
|
||||
call "%~dp0lib_base.cmd"
|
||||
call "%%~dp0lib_console"
|
||||
call "%~dp0lib_console.cmd"
|
||||
set lib_profile=call "%~dp0lib_profile.cmd"
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%~0"
|
||||
) else if "%1" neq "" (
|
||||
) else if "%~1" neq "" (
|
||||
call :%*
|
||||
)
|
||||
|
||||
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:
|
||||
:::
|
||||
:::.
|
||||
::: call "lib_profile.cmd"
|
||||
:::
|
||||
:::.
|
||||
:::usage:
|
||||
:::
|
||||
:::.
|
||||
::: %lib_profile% "[dir_path]"
|
||||
:::
|
||||
:::.
|
||||
:::required:
|
||||
:::
|
||||
:::.
|
||||
::: [dir_path] <in> Fully qualified directory path containing init *.cmd|*.bat.
|
||||
::: Example: "c:\bin"
|
||||
:::
|
||||
:::.
|
||||
::: path <out> Sets the path env variable if required.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
:run_profile_d
|
||||
if not exist "%~1" (
|
||||
mkdir "%~1"
|
||||
)
|
||||
@@ -43,4 +43,3 @@ exit /b
|
||||
)
|
||||
popd
|
||||
exit /b
|
||||
|
||||
|
||||
72
vendor/profile.ps1
vendored
72
vendor/profile.ps1
vendored
@@ -28,31 +28,34 @@ if (!$ENV:CMDER_ROOT) {
|
||||
# Remove trailing '\'
|
||||
$ENV:CMDER_ROOT = ($ENV:CMDER_ROOT).TrimEnd("\")
|
||||
|
||||
# -> 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)
|
||||
|
||||
# Add Cmder modules directory to the autoload path.
|
||||
$CmderModulePath = Join-path $PSScriptRoot "psmodules/"
|
||||
|
||||
# Import Cmder functions
|
||||
$CmderFunctions = Join-Path $CmderModulePath "Cmder.ps1"
|
||||
. $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;")
|
||||
}
|
||||
|
||||
$gitVersionVendor = (readVersion -gitPath "$ENV:CMDER_ROOT\vendor\git-for-windows\cmd")
|
||||
# Read vendored Git Version
|
||||
$gitVersionVendor = Get-GitVersion -GitPath "$ENV:CMDER_ROOT\vendor\git-for-windows\cmd"
|
||||
Write-Debug "GIT VENDOR: ${gitVersionVendor}"
|
||||
|
||||
# Get user installed Git Version[s] and Compare with vendored if found.
|
||||
# Get user installed Git version(s) if found, and compare them with vendored version.
|
||||
foreach ($git in (Get-Command -ErrorAction SilentlyContinue 'git')) {
|
||||
Write-Debug "GIT PATH: {$git.Path}"
|
||||
$gitDir = Split-Path -Path $git.Path
|
||||
$gitDir = isGitShim -gitPath $gitDir
|
||||
$gitVersionUser = (readVersion -gitPath $gitDir)
|
||||
$gitDir = Get-GitShimPath -GitPath $gitDir
|
||||
$gitVersionUser = Get-GitVersion -GitPath $gitDir
|
||||
Write-Debug "GIT USER: ${gitVersionUser}"
|
||||
|
||||
$useGitVersion = compare_git_versions -userVersion $gitVersionUser -vendorVersion $gitVersionVendor
|
||||
$useGitVersion = Compare-GitVersion -UserVersion $gitVersionUser -VendorVersion $gitVersionVendor
|
||||
Write-Debug "Using Git Version: ${useGitVersion}"
|
||||
|
||||
# Use user installed Git
|
||||
@@ -72,7 +75,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) {
|
||||
$ENV:GIT_INSTALL_ROOT = "$ENV:CMDER_ROOT\vendor\git-for-windows"
|
||||
$ENV:GIT_INSTALL_TYPE = 'VENDOR'
|
||||
@@ -82,23 +85,44 @@ Write-Debug "GIT_INSTALL_ROOT: ${ENV:GIT_INSTALL_ROOT}"
|
||||
Write-Debug "GIT_INSTALL_TYPE: ${ENV:GIT_INSTALL_TYPE}"
|
||||
|
||||
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) {
|
||||
New-Alias -name "vi" -value vim
|
||||
}
|
||||
|
||||
# PSReadline configuration
|
||||
if (Get-Module PSReadline -ErrorAction "SilentlyContinue") {
|
||||
# Display an extra prompt line between the prompt and the command input
|
||||
Set-PSReadlineOption -ExtraPromptLineCount 1
|
||||
|
||||
# Add OSC 133;C support for Windows Terminal shell integration
|
||||
# This marks the start of command output (emitted when Enter is pressed)
|
||||
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 sequence 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
|
||||
[ScriptBlock]$PrePrompt = {}
|
||||
[ScriptBlock]$PostPrompt = {}
|
||||
[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()
|
||||
$principal = [Security.Principal.WindowsPrincipal] $identity
|
||||
$adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator
|
||||
@@ -107,7 +131,7 @@ $env:gitLoaded = $null
|
||||
$Host.UI.RawUI.ForegroundColor = "White"
|
||||
Microsoft.PowerShell.Utility\Write-Host "PS " -NoNewline -ForegroundColor $color
|
||||
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"
|
||||
}
|
||||
|
||||
@@ -196,6 +220,23 @@ if ( $(Get-Command prompt).Definition -match 'PS \$\(\$executionContext.SessionS
|
||||
[ScriptBlock]$Prompt = {
|
||||
$lastSUCCESS = $?
|
||||
$realLastExitCode = $LastExitCode
|
||||
|
||||
# Emit OSC 9;9 sequence for Windows Terminal directory tracking
|
||||
# This enables "Duplicate Tab" and "Split Pane" to preserve the working directory
|
||||
# Only active in Windows Terminal ($env:WT_SESSION) or ConEmu ($env:ConEmuPID)
|
||||
$loc = $executionContext.SessionState.Path.CurrentLocation
|
||||
if (($env:WT_SESSION -or $env:ConEmuPID) -and $loc.Provider.Name -eq "FileSystem") {
|
||||
Microsoft.PowerShell.Utility\Write-Host -NoNewline "$([char]0x1B)]9;9;`"$($loc.ProviderPath)`"$([char]0x1B)\"
|
||||
}
|
||||
|
||||
# Emit OSC 133;A sequence for Windows Terminal shell integration
|
||||
# This marks the start of the prompt
|
||||
# Enables features like command navigation, selection, and visual separators
|
||||
# Only active in Windows Terminal ($env:WT_SESSION)
|
||||
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
|
||||
Microsoft.PowerShell.Utility\Write-Host -NoNewline "$([char]0x200B)`r$([char]0x1B)[K"
|
||||
if ($lastSUCCESS -or ($LastExitCode -ne 0)) {
|
||||
@@ -204,6 +245,13 @@ if ( $(Get-Command prompt).Definition -match 'PS \$\(\$executionContext.SessionS
|
||||
PrePrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
||||
CmderPrompt
|
||||
PostPrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
||||
|
||||
# Emit OSC 133;B sequence for Windows Terminal shell integration
|
||||
# This marks 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
|
||||
return " "
|
||||
}
|
||||
|
||||
295
vendor/psmodules/Cmder.ps1
vendored
295
vendor/psmodules/Cmder.ps1
vendored
@@ -1,177 +1,240 @@
|
||||
function readVersion($gitPath) {
|
||||
$gitExecutable = "${gitPath}\git.exe"
|
||||
function Get-GitVersion {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$GitPath
|
||||
)
|
||||
|
||||
if (-not (Test-Path "$gitExecutable")) {
|
||||
$gitExecutable = Join-Path $GitPath "git.exe"
|
||||
|
||||
if (-not (Test-Path $gitExecutable)) {
|
||||
return $null
|
||||
}
|
||||
|
||||
$gitVersion = (cmd /c "${gitExecutable}" --version)
|
||||
$gitVersion = & $gitExecutable --version 2>$null
|
||||
|
||||
if ($gitVersion -match 'git version') {
|
||||
($trash1, $trash2, $gitVersion) = $gitVersion.split(' ', 3)
|
||||
} else {
|
||||
pause
|
||||
return $null
|
||||
if ($gitVersion -match 'git version\s+(\S+)') {
|
||||
return $Matches[1]
|
||||
}
|
||||
|
||||
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) {
|
||||
# check if there's shim - and if yes follow the path
|
||||
function Get-GitShimPath {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$GitPath
|
||||
)
|
||||
|
||||
if (Test-Path "${gitPath}\git.shim") {
|
||||
$shim = (get-content "${gitPath}\git.shim")
|
||||
($trash, $gitPath) = $shim.replace(' ', '').split('=')
|
||||
|
||||
$gitPath = $gitPath.replace('\git.exe', '')
|
||||
$shimFile = Join-Path $GitPath "git.shim"
|
||||
if (Test-Path $shimFile) {
|
||||
$shimContent = Get-Content $shimFile -Raw
|
||||
if ($shimContent -match 'path\s*=\s*(.+)') {
|
||||
$GitPath = $Matches[1].Trim().Replace('\git.exe', '')
|
||||
}
|
||||
}
|
||||
|
||||
return $gitPath.toString()
|
||||
return $GitPath
|
||||
}
|
||||
|
||||
function compareVersions($userVersion, $vendorVersion) {
|
||||
if ($null -ne $userVersion) {
|
||||
($userMajor, $userMinor, $userPatch, $userBuild) = $userVersion.split('.', 4)
|
||||
} else {
|
||||
return -1
|
||||
function Compare-Version {
|
||||
param(
|
||||
[Parameter(Mandatory = $false)]
|
||||
[AllowNull()]
|
||||
[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
|
||||
}
|
||||
|
||||
function compare_git_versions($userVersion, $vendorVersion) {
|
||||
$result = compareVersions -userVersion $userVersion -vendorVersion $vendorVersion
|
||||
function Compare-GitVersion {
|
||||
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) {
|
||||
return $userVersion
|
||||
}
|
||||
else {
|
||||
return $vendorVersion
|
||||
return $UserVersion
|
||||
}
|
||||
return $VendorVersion
|
||||
}
|
||||
|
||||
function Configure-Git($gitRoot, $gitType, $gitPathUser) {
|
||||
# Proposed Behavior
|
||||
function Set-GitPath {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$GitRoot,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$GitType,
|
||||
[Parameter(Mandatory = $false)]
|
||||
[string]$GitPathUser
|
||||
)
|
||||
|
||||
# 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
|
||||
# in the same path positions allowing a user to configure Cmder Git path
|
||||
# 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..."
|
||||
if ($GitType -ne 'VENDOR') {
|
||||
return $env:Path
|
||||
}
|
||||
|
||||
$newPath = ($env:path -ireplace [regex]::Escape($gitPathUser), $gitRoot)
|
||||
$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
|
||||
$gitCmd = Join-Path $GitRoot "cmd"
|
||||
if (-not ($newPath -match [regex]::Escape($gitCmd))) {
|
||||
Write-Debug "Adding $gitCmd to the path"
|
||||
$newPath = "$gitCmd;$newPath"
|
||||
}
|
||||
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 mingw bin directory
|
||||
# Prefer mingw64 on 64-bit systems, mingw32 on 32-bit systems
|
||||
$is64Bit = [Environment]::Is64BitOperatingSystem
|
||||
$mingwDirs = if ($is64Bit) { @('mingw64', 'mingw32') } else { @('mingw32') }
|
||||
|
||||
# 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"
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
return $newPath
|
||||
# Add usr bin directory
|
||||
$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 $env:path
|
||||
return $newPath
|
||||
}
|
||||
|
||||
function Import-Git() {
|
||||
$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 ($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"
|
||||
function Import-Git {
|
||||
$gitModule = Get-Module -Name Posh-Git -ListAvailable
|
||||
|
||||
if (-not $gitModule) {
|
||||
Microsoft.PowerShell.Utility\Write-Host -NoNewline "`r`n"
|
||||
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
|
||||
}
|
||||
# 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
|
||||
}
|
||||
|
||||
function checkGit($Path) {
|
||||
function Show-GitStatus {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Path
|
||||
)
|
||||
|
||||
if (-not (Get-Command git -ErrorAction SilentlyContinue)) {
|
||||
return
|
||||
}
|
||||
if (-not (Test-Path -Path (Join-Path $Path '.git'))) {
|
||||
$SplitPath = Split-Path $path
|
||||
if ($SplitPath) { checkGit($SplitPath) }
|
||||
|
||||
$gitDir = Join-Path $Path '.git'
|
||||
if (-not (Test-Path $gitDir)) {
|
||||
$parentPath = Split-Path $Path
|
||||
if ($parentPath) {
|
||||
Show-GitStatus -Path $parentPath
|
||||
}
|
||||
return
|
||||
}
|
||||
if (getGitStatusSetting -eq $true) {
|
||||
|
||||
if (Get-GitStatusSetting) {
|
||||
if ($null -eq $env:gitLoaded) {
|
||||
$env:gitLoaded = Import-Git
|
||||
}
|
||||
if ($env:gitLoaded -eq $true) {
|
||||
Write-VcsStatus
|
||||
}
|
||||
}
|
||||
else {
|
||||
$headContent = Get-Content (Join-Path $Path '.git/HEAD')
|
||||
if ($headContent -like "ref: refs/heads/*") {
|
||||
$branchName = $headContent.Substring(16)
|
||||
} else {
|
||||
$headFile = Join-Path $gitDir 'HEAD'
|
||||
if (Test-Path $headFile) {
|
||||
$headContent = Get-Content $headFile -Raw
|
||||
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() {
|
||||
$gitStatus = (git --no-pager config -l) | Out-String
|
||||
function Get-GitStatusSetting {
|
||||
$gitConfig = git --no-pager config -l 2>$null | Out-String
|
||||
|
||||
foreach ($line in $($gitStatus -split "`r`n")) {
|
||||
if (($line -match 'cmder.status=false') -or ($line -match 'cmder.psstatus=false')) {
|
||||
return $false
|
||||
}
|
||||
# Check if git status display is disabled via config
|
||||
# Matches: cmder.status=false or cmder.psstatus=false (PowerShell-specific)
|
||||
if ($gitConfig -match '(?m)^cmder\.(ps)?status=false$') {
|
||||
return $false
|
||||
}
|
||||
|
||||
return $true
|
||||
|
||||
21
vendor/sources.json
vendored
21
vendor/sources.json
vendored
@@ -1,22 +1,27 @@
|
||||
[
|
||||
{
|
||||
"name": "git-for-windows",
|
||||
"version": "2.41.0.windows.3",
|
||||
"url": "https://github.com/git-for-windows/git/releases/download/v2.41.0.windows.3/PortableGit-2.41.0.3-64-bit.7z.exe"
|
||||
"version": "2.51.2.windows.1",
|
||||
"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",
|
||||
"version": "1.5.1",
|
||||
"url": "https://github.com/chrisant996/clink/releases/download/v1.5.1/clink.1.5.1.1e9e51.zip"
|
||||
"version": "1.8.8",
|
||||
"url": "https://github.com/chrisant996/clink/releases/download/v1.8.8/clink.1.8.8.a63364.zip"
|
||||
},
|
||||
{
|
||||
"name": "conemu-maximus5",
|
||||
"version": "23.07.23",
|
||||
"url": "https://github.com/Maximus5/ConEmu/releases/download/v23.07.23/ConEmuPack.230723.7z"
|
||||
"version": "23.07.24",
|
||||
"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",
|
||||
"version": "0.4.10",
|
||||
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.4.10.zip"
|
||||
"version": "0.6.6",
|
||||
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.6.zip"
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user