Compare commits

..

5 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
b254bad5de Add fallback to detect CMDER_ROOT from script location
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-11-09 01:39:20 +00:00
copilot-swe-agent[bot]
49b7eee23a Restore config README files accidentally removed during testing 2025-11-09 01:33:05 +00:00
copilot-swe-agent[bot]
f90d276657 Add shellcheck compliance and shebang to scripts
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-11-09 01:32:10 +00:00
copilot-swe-agent[bot]
e99dc4d7e6 Optimize and fix cmder.sh and cmder_exinit scripts
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-11-09 01:26:47 +00:00
copilot-swe-agent[bot]
00636cf013 Initial plan 2025-11-09 01:20:54 +00:00
11 changed files with 191 additions and 548 deletions

View File

@@ -1,10 +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:
# Enable version updates for GitHub Actions
- package-ecosystem: "github-actions"
- package-ecosystem: "github-actions" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
labels:
- "👆 Dependencies"
- "🔄️ GitHub Actions"

View File

@@ -19,25 +19,10 @@ 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@v6
- uses: actions/checkout@v5
with:
fetch-depth: 0 # fetch all history for all branches and tags
- name: Summary - Merge operation started
shell: bash
run: |
echo "## 🔀 Update Branches - Workflow Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Merge Operation" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Property | Value |" >> $GITHUB_STEP_SUMMARY
echo "| --- | --- |" >> $GITHUB_STEP_SUMMARY
echo "| Source Branch | \`master\` |" >> $GITHUB_STEP_SUMMARY
echo "| Target Branch | \`development\` |" >> $GITHUB_STEP_SUMMARY
echo "| Triggered by | @${{ github.actor }} |" >> $GITHUB_STEP_SUMMARY
echo "| Commit | \`${{ github.sha }}\` |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
# Runs a single command using the runners shell
- name: Merge master into development
run: |
@@ -46,15 +31,3 @@ jobs:
git checkout development
git merge --no-ff master
git push origin development
- name: Summary - Merge completed
if: success()
shell: bash
run: |
echo "### ✅ Merge Successful" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "The \`master\` branch has been successfully merged into \`development\`." >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Merge type:** No fast-forward merge" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "> The development branch is now synchronized with the latest changes from master." >> $GITHUB_STEP_SUMMARY

View File

@@ -35,25 +35,10 @@ jobs:
discussions: write
steps:
- name: Check out repository code (Action from GitHub)
uses: actions/checkout@v6
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Summary - Repository checkout
shell: pwsh
run: |
echo "## 📦 Build Cmder - Workflow Summary" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "### Repository Information" >> $env:GITHUB_STEP_SUMMARY
echo "| Property | Value |" >> $env:GITHUB_STEP_SUMMARY
echo "| --- | --- |" >> $env:GITHUB_STEP_SUMMARY
echo "| Repository | \`${{ github.repository }}\` |" >> $env:GITHUB_STEP_SUMMARY
echo "| Branch | \`${{ github.ref_name }}\` |" >> $env:GITHUB_STEP_SUMMARY
echo "| Commit | \`${{ github.sha }}\` |" >> $env:GITHUB_STEP_SUMMARY
echo "| Actor | @${{ github.actor }} |" >> $env:GITHUB_STEP_SUMMARY
echo "| Workflow | \`${{ github.workflow }}\` |" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2
@@ -62,78 +47,36 @@ jobs:
working-directory: scripts
run: .\build.ps1 -Compile -verbose
- name: Summary - Build completed
if: success()
shell: pwsh
run: |
echo "### ✅ Build Status" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "Cmder launcher successfully compiled." >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
- name: Pack the built files
shell: pwsh
working-directory: scripts
run: .\pack.ps1 -verbose
- name: Summary - Package artifacts
if: success()
shell: pwsh
run: |
echo "### 📦 Artifacts Created" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "| Artifact | Size | Hash (SHA256) |" >> $env:GITHUB_STEP_SUMMARY
echo "| --- | --- | --- |" >> $env:GITHUB_STEP_SUMMARY
$artifacts = @("cmder.zip", "cmder.7z", "cmder_mini.zip")
foreach ($artifact in $artifacts) {
$path = "build/$artifact"
if (Test-Path $path) {
$size = (Get-Item $path).Length / 1MB
# Truncate hash to first 16 chars for summary readability (full hash in hashes.txt)
$hash = (Get-FileHash $path -Algorithm SHA256).Hash.Substring(0, 16)
echo "| \`$artifact\` | $([math]::Round($size, 2)) MB | \`$hash...\` |" >> $env:GITHUB_STEP_SUMMARY
}
}
echo "" >> $env:GITHUB_STEP_SUMMARY
- name: Upload artifact (cmder.zip)
uses: actions/upload-artifact@v6
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@v6
uses: actions/upload-artifact@v5
with:
path: build/cmder.7z
name: cmder.7z
- name: Upload artifact (cmder_mini.zip)
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v5
with:
path: build/cmder_mini.zip
name: cmder_mini.zip
- name: Upload artifact (hashes.txt)
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v5
with:
path: build/hashes.txt
name: hashes.txt
- name: Summary - Artifacts uploaded
if: success()
shell: pwsh
run: |
echo "### ☁️ Upload Status" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "All artifacts successfully uploaded to GitHub Actions:" >> $env:GITHUB_STEP_SUMMARY
echo '- ✅ `cmder.zip`' >> $env:GITHUB_STEP_SUMMARY
echo '- ✅ `cmder.7z`' >> $env:GITHUB_STEP_SUMMARY
echo '- ✅ `cmder_mini.zip`' >> $env:GITHUB_STEP_SUMMARY
echo '- ✅ `hashes.txt`' >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
- name: Create Release
uses: softprops/action-gh-release@v2
with:
@@ -145,19 +88,3 @@ jobs:
draft: true
generate_release_notes: true
if: startsWith(github.ref, 'refs/tags/')
- name: Summary - Release created
if: startsWith(github.ref, 'refs/tags/')
shell: pwsh
run: |
echo "### 🚀 Release Information" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "Draft release created for tag: **\`${{ github.ref_name }}\`**" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "Release includes:" >> $env:GITHUB_STEP_SUMMARY
echo "- Full version (\`cmder.zip\`, \`cmder.7z\`)" >> $env:GITHUB_STEP_SUMMARY
echo "- Mini version (\`cmder_mini.zip\`)" >> $env:GITHUB_STEP_SUMMARY
echo "- File hashes (\`hashes.txt\`)" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "> ⚠️ Release is in **draft** mode. Please review and publish manually." >> $env:GITHUB_STEP_SUMMARY

View File

@@ -45,25 +45,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Summary - CodeQL analysis started
shell: pwsh
run: |
$summary = @(
'## 🔒 CodeQL Security Analysis - Workflow Summary'
''
'### Analysis Configuration'
''
'| Property | Value |'
'| --- | --- |'
'| Repository | `${{ github.repository }}` |'
'| Branch | `${{ github.ref_name }}` |'
'| Language | `${{ matrix.language }}` |'
'| Commit | `${{ github.sha }}` |'
''
)
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY
uses: actions/checkout@v5
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
@@ -85,34 +67,7 @@ jobs:
working-directory: scripts
run: .\build.ps1 -Compile -verbose
- name: Summary - Build status
if: success()
shell: pwsh
run: |
$summary = @(
'### ✅ Build Completed'
''
'Cmder launcher built successfully for CodeQL analysis.'
''
)
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{matrix.language}}"
- name: Summary - Analysis completed
if: success()
shell: pwsh
run: |
$summary = @(
'### 🔍 CodeQL Analysis Results'
''
'✅ CodeQL security analysis completed successfully.'
''
'**Language analyzed:** `${{ matrix.language }}`'
''
'> Check the Security tab for detailed findings and recommendations.'
)
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY

View File

@@ -38,78 +38,17 @@ jobs:
continue-on-error: false
steps:
- uses: actions/checkout@v6
- name: Summary - Test execution started
shell: pwsh
run: |
echo "## 🧪 Run Tests - Workflow Summary" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "### Test Environment" >> $env:GITHUB_STEP_SUMMARY
echo "| Property | Value |" >> $env:GITHUB_STEP_SUMMARY
echo "| --- | --- |" >> $env:GITHUB_STEP_SUMMARY
echo "| Repository | \`${{ github.repository }}\` |" >> $env:GITHUB_STEP_SUMMARY
echo "| Branch | \`${{ github.ref_name }}\` |" >> $env:GITHUB_STEP_SUMMARY
echo "| Commit | \`${{ github.sha }}\` |" >> $env:GITHUB_STEP_SUMMARY
echo "| Runner OS | \`${{ runner.os }}\` |" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
- uses: actions/checkout@v5
- name: Initialize vendors
shell: pwsh
working-directory: scripts
run: .\build.ps1 -verbose
- name: Summary - Vendor initialization
if: success()
shell: pwsh
run: |
echo "### ⚙️ Vendor Initialization" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "✅ Vendor dependencies initialized successfully." >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
- name: Summary - Test results table header
if: success()
shell: pwsh
run: |
echo "### 📋 Test Results" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "| Test | Status |" >> $env:GITHUB_STEP_SUMMARY
echo "| --- | --- |" >> $env:GITHUB_STEP_SUMMARY
- name: Testing Clink Shell
run: |
cmd /c vendor\init.bat /v /d /t
- name: Summary - Clink Shell test
if: success()
shell: pwsh
run: |
echo "| Clink Shell | ✅ Passed |" >> $env:GITHUB_STEP_SUMMARY
- name: Testing PowerShell
run: |
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "$env:CMDER_DEBUG='1'; . 'vendor\profile.ps1'"
- name: Summary - PowerShell test
if: success()
shell: pwsh
run: |
echo "| PowerShell | ✅ Passed |" >> $env:GITHUB_STEP_SUMMARY
- name: Testing Bash
run: |
bash vendor/cmder.sh
- name: Summary - Bash test
if: success()
shell: pwsh
run: |
echo "| Bash | ✅ Passed |" >> $env:GITHUB_STEP_SUMMARY
- name: Summary - All tests completed
if: success()
shell: pwsh
run: |
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "### ✅ All Tests Completed" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "All shell environments tested successfully!" >> $env:GITHUB_STEP_SUMMARY

View File

@@ -24,21 +24,10 @@ jobs:
pull-requests: write
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Summary - Workflow started
shell: pwsh
run: |
$summary = @(
'## 📦 Update Vendor - Workflow Summary'
''
'Checking for vendor dependency updates...'
''
)
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY
- id: make-changes
name: Checking for updates
env:
@@ -62,31 +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
- name: Summary - Update check results
shell: pwsh
run: |
$count = [int]$env:COUNT_UPDATED
if ($count -eq 0) {
$summary = @(
'### ✅ No Updates Available'
''
'All vendor dependencies are up to date.'
)
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY
} else {
$word = if ($count -eq 1) { 'dependency' } else { 'dependencies' }
$summary = @(
'### 🔄 Updates Found'
''
"**$count** vendor $word updated:"
''
$env:UPDATE_MESSAGE
''
)
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY
}
- uses: peter-evans/create-pull-request@v8
- uses: peter-evans/create-pull-request@v7
if: env.COUNT_UPDATED > 0
with:
title: 'Updates to `${{ env.COUNT_UPDATED }}` vendored dependencies'
@@ -98,20 +63,3 @@ jobs:
commit-message: '⬆️ Update dependencies (${{ env.LIST_UPDATED }})'
branch: update-vendor
base: master
- name: Summary - Pull request created
if: env.COUNT_UPDATED > 0
shell: pwsh
run: |
$summary = @(
'### 🎉 Pull Request Created'
''
'A pull request has been created to update the vendor dependencies.'
''
'**Branch:** `update-vendor`'
''
$env:LIST_UPDATED -and "**Updated dependencies:** $env:LIST_UPDATED" -or "**Updated dependencies:** "
''
'> Please review and merge the pull request to apply the updates.'
)
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY

View File

@@ -1,84 +1,5 @@
# Change Log
## [1.3.25](https://github.com/cmderdev/cmder/tree/v1.3.25) (2024-05-31)
### Changes
- Component Updates
- Update Git for Windows to 2.45.1.windows.1.
- Update ConEmu to 24.05.31.
- Clink 1.6.14.
- clink-completions 0.5.2.
- Add `SECURITY.md` and refresh CI workflows and actions.
- Enable `match.expand_envvars` and improve git diagnostics for improper versions.
### Fixes
- Fix #2944.
- Fix script error when the working directory contains `%`.
- Remove environment refresh race condition.
## [1.3.24](https://github.com/cmderdev/cmder/tree/v1.3.24) (2023-07-24)
### Changes
- Update `build.yml` workflow.
## [1.3.23](https://github.com/cmderdev/cmder/tree/v1.3.23) (2023-07-24)
### Changes
- Update ConEmu (conemu-maximus5) to 23.07.24.
## [1.3.22](https://github.com/cmderdev/cmder/tree/v1.3.22) (2023-07-24)
### Changes
- Handle Clink injction differently in `init.bat`.
- Changes to `clink_settings.lua.default`.
- Do not add commands to Clink Command Line History that begin with whitespace as a default.
- This can be changed to the old behavior by setting `history_ignore_space` to `0` in `config\clink_settings.lua`.
- `history.max_lines` is now defaults to `25000` instead of `10000`.
- This can be changed back to the old behavior by setting `history_max_lines` to `10000` in `config\clink_settings.lua`.
- `history.shared` now defaults to `False` instead of `True`.
- The previous default of `True` was causing issues with some users when using Cmder in multiple sessions.
- This can be changed back to the old behavior by setting `history_shared` to `1` in `config\clink_settings.lua`.
- Component Updates
- Git for Windows to 2.41.0.windows.3
- Clink to 1.5.1
- ConEmu to 23.07.23
- clink-completions to 0.4.10
- Remove AppVeyor configuration and add CodeQL scanning and Dependabot updates.
### Fixes
- Fix `/task "<taskName>"` handling.
- Skip clink injection when initialization fails fatally.
- Fix errors when git/svn/hg are not installed and in profile.d PowerShell scripts.
## [1.3.21](https://github.com/cmderdev/cmder/tree/v1.3.21) (2022-12-19)
### Fixes
- Fix #2789.
- Fix Git Bash `GIT_INSTALL_ROOT` handling.
### Changes
- Refactor `clink.lua` to speed up the prompt.
- Refactor and Cleanup `init.bat` and related scripts.
- Refactor and Cleanup `profile.ps1` and related scripts.
- Remove handling of `clink` and `tcc` incompatibility.
- Update ConEmu to mitigate CVE-2022-46387.
- Update Git for Windows to 2.39.0.windows.1 and Clink to 1.4.4.
### Adds
- Add `show_warning` function to `vendor\lib\lib_console.cmd` for showing warning messages in yellow.
## [1.3.20](https://github.com/cmderdev/cmder/tree/v1.3.20) (2022-03-18)
### Changes

116
vendor/clink.lua vendored
View File

@@ -324,7 +324,7 @@ end
-- Find out current branch
-- @return {nil|git branch name}
---
local function get_git_branch(git_dir, fast)
local function get_git_branch(git_dir)
git_dir = git_dir or get_git_dir()
-- If git directory not found then we're probably outside of repo
@@ -341,90 +341,8 @@ local function get_git_branch(git_dir, fast)
-- if HEAD matches branch expression, then we're on named branch
-- otherwise it is a detached commit
local branch_name = HEAD:match('ref: refs/heads/(.+)')
if os.getenv("CLINK_DEBUG_GIT_REFTABLE") then
branch_name = '.invalid'
end
-- If the branch name is ".invalid" and the fast method wasn't requested,
-- then invoke git.exe to get accurate current branch info (slow method).
if branch_name == ".invalid" and not fast then
local file
branch_name = nil
-- Handle the most common case first.
if not branch_name then
file = io_popenyield("git --no-optional-locks branch 2>nul")
if file then
for line in file:lines() do
local b = line:match("^%*%s+(.*)")
if b then
b = b:match("^%((HEAD detached at .*)%)") or b
branch_name = b
break
end
end
file:close()
end
end
-- Handle the cases where "git branch" output is empty, but "git
-- branch --show-current" shows the branch name (e.g. a new repo).
if not branch_name then
file = io_popenyield("git --no-optional-locks branch --show-current 2>nul")
if file then
for line in file:lines() do -- luacheck: ignore 512
branch_name = line
break
end
file:close()
end
end
else
branch_name = branch_name or 'HEAD detached at '..HEAD:sub(1, 7)
end
return branch_name
end
local function get_git_remote(git_dir, branch)
if not git_dir then return nil end
if not branch then return nil end
local file = io.open(git_dir.."/config", 'r')
if not file then return nil end
local git_config = {}
local function get_git_config_value(section, param)
return git_config[section] and git_config[section][param] or nil
end
local section
for line in file:lines() do
if (line:sub(1,1) == "[" and line:sub(-1) == "]") then
if (line:sub(2,5) == "lfs ") then
section = nil -- skip LFS entries as there can be many and we never use them
else
section = line:sub(2,-2)
git_config[section] = git_config[section] or {}
end
elseif section then
local param, value = line:match('^%s-([%w|_]+)%s-=%s+(.+)$')
if (param and value ~= nil) then
git_config[section][param] = value
end
end
end
file:close()
local remote_to_push = get_git_config_value('branch "'..branch..'"', 'remote') or ''
local remote_ref = get_git_config_value('remote "'..remote_to_push..'"', 'push') or
get_git_config_value('push', 'default')
local text = remote_to_push
if remote_ref then text = text..'/'..remote_ref end
return text ~= '' and text or nil
return branch_name or 'HEAD detached at '..HEAD:sub(1, 7)
end
---
@@ -476,7 +394,7 @@ end
-- Get the status and conflict status of working dir
-- @return {bool <status>, bool <is_conflict>}
---
local function get_git_status(git_dir)
local function get_git_status()
local file = io_popenyield("git --no-optional-locks status --porcelain 2>nul")
if not file then
return {}
@@ -498,10 +416,7 @@ local function get_git_status(git_dir)
end
file:close()
local branch = get_git_branch(git_dir, false--[[fast]])
local remote = get_git_remote(git_dir, branch)
return { status = is_status, branch = branch, remote = remote, conflict = conflict_found }
return { status = is_status, conflict = conflict_found }
end
---
@@ -600,11 +515,11 @@ end
-- Use a prompt coroutine to get git status in the background.
-- Cache the info so we can reuse it next time to reduce flicker.
---
local function get_git_info_table(git_dir)
local function get_git_info_table()
local info = clink_promptcoroutine(function ()
-- Use git status if allowed.
local cmderGitStatusOptIn = get_git_status_setting()
return cmderGitStatusOptIn and get_git_status(git_dir) or {}
return cmderGitStatusOptIn and get_git_status() or {}
end)
if not info then
info = cached_info.git_info or {}
@@ -624,11 +539,10 @@ local function git_prompt_filter()
local git_dir = get_git_dir()
local color
if git_dir then
local branch = get_git_branch(git_dir, true--[[fast]])
local branch = get_git_branch(git_dir)
if branch then
-- If in a different repo or branch than last time, discard cached info.
if cached_info.git_dir ~= git_dir or
(branch ~= ".invalid" and cached_info.git_branch ~= branch) then
if cached_info.git_dir ~= git_dir or cached_info.git_branch ~= branch then
cached_info.git_info = nil
cached_info.git_dir = git_dir
cached_info.git_branch = branch
@@ -636,22 +550,10 @@ local function git_prompt_filter()
-- If we're inside of git repo then try to detect current branch
-- Has branch => therefore it is a git folder, now figure out status
local gitInfo = get_git_info_table(git_dir)
local gitInfo = get_git_info_table()
local gitStatus = gitInfo.status
local gitConflict = gitInfo.conflict
-- Compensate for git reftables.
branch = gitInfo.branch or branch
if branch == ".invalid" then
branch = "Loading..."
elseif gitInfo.remote then
branch = branch.." -> "..gitInfo.remote
end
-- Prevent an older clink-completions git_prompt.lua scripts from
-- modifying the prompt.
branch = "\x1b[10m"..branch
if gitStatus == nil then
color = get_unknown_color()
elseif gitStatus then

116
vendor/cmder.sh vendored
View File

@@ -1,3 +1,4 @@
#!/usr/bin/env bash
# DO NOT EDIT THIS FILE IT WILL BE OVERWRITTEN ON UPDATE
#
# Add portable user customizations ${CMDER_ROOT}/config/user_profile.sh,
@@ -7,93 +8,130 @@
# Add system specific users customizations to $HOME/.bashrc, these
# customizations will not follow Cmder to another machine.
function runProfiled {
unset profile_d_scripts
pushd "${1}" >/dev/null
# Source all .sh scripts in a given directory
# Args: $1 - directory path containing .sh scripts to source
run_profile_d() {
local profile_d_scripts
pushd "${1}" >/dev/null || return
# shellcheck disable=SC2035
profile_d_scripts=$(ls *.sh 2>/dev/null)
if [ ! "x${profile_d_scripts}" = "x" ] ; then
for x in ${profile_d_scripts} ; do
# echo Sourcing "${1}/${x}"...
. "${1}/${x}"
if [ -n "${profile_d_scripts}" ]; then
for script in ${profile_d_scripts}; do
# echo Sourcing "${1}/${script}"...
# shellcheck disable=SC1090
. "${1}/${script}"
done
fi
popd >/dev/null
popd >/dev/null || return
}
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
if [ "$CMDER_ROOT" == "" ] ; then
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
# Detect and set CMDER_ROOT for bash admin sessions
# Converts Windows paths to Unix paths if needed
# 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
case "$CMDER_ROOT" in *\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";; esac
case "$CMDER_ROOT" in
*\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";;
esac
fi
# Remove any trailing '/'
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
# Remove any trailing '/' from CMDER_ROOT
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
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"
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"
elif [ -f "${CMDER_ROOT}/vendor/git-for-windows/cmd/git.exe" ] ; then
GIT_INSTALL_ROOT=${CMDER_ROOT}/vendor/git-for-windows
elif [ -f "${CMDER_ROOT}/vendor/git-for-windows/cmd/git.exe" ]; then
GIT_INSTALL_ROOT="${CMDER_ROOT}/vendor/git-for-windows"
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"
fi
# Add Cmder directories to PATH
PATH="${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}"
export PATH
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
# to source them at startup.
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
# Create profile.d directory if it doesn't exist
if [ ! -d "${CMDER_ROOT}/config/profile.d" ]; then
mkdir -p "${CMDER_ROOT}/config/profile.d"
fi
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
runProfiled "${CMDER_ROOT}/config/profile.d"
# Source all .sh scripts in profile.d directories
if [ -d "${CMDER_ROOT}/config/profile.d" ]; then
run_profile_d "${CMDER_ROOT}/config/profile.d"
fi
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
runProfiled "${CMDER_USER_CONFIG}/profile.d"
if [ -d "${CMDER_USER_CONFIG}/profile.d" ]; then
run_profile_d "${CMDER_USER_CONFIG}/profile.d"
fi
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
# Rename legacy user-profile.sh to user_profile.sh for consistency
if [ -f "$CMDER_ROOT/config/user-profile.sh" ]; then
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
fi
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
# Source user profile from CMDER_ROOT config
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ]; then
. "${CMDER_ROOT}/config/user_profile.sh"
fi
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
# Handle CMDER_USER_CONFIG if set
if [ -n "${CMDER_USER_CONFIG}" ]; 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"
fi
export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
# Source user profile from CMDER_USER_CONFIG
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ]; then
# shellcheck disable=SC1091
. "${CMDER_USER_CONFIG}/user_profile.sh"
fi
fi
if [ ! -f "${CmderUserProfilePath}" ] ; then
echo Creating user startup file: "${CmderUserProfilePath}"
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
# Determine the user profile path for creation if needed
if [ -n "${CMDER_USER_CONFIG}" ]; then
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
# Source the users .bashrc file if it exists
if [ -f "${HOME}/.bashrc" ] ; then
if [ -f "${HOME}/.bashrc" ]; then
# shellcheck disable=SC1091
. "${HOME}/.bashrc"
fi

123
vendor/cmder_exinit vendored
View File

@@ -1,3 +1,4 @@
#!/usr/bin/env bash
# Copy this file to your non integrated *nix-like environment,
# Cygwin/MSys2/Git for Windows SDK, installs '/etc/profile.d/'
# folder to integrate the externally installed Unix like environment
@@ -22,92 +23,130 @@
# # from outside Cmder.
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
function runProfiled {
unset profile_d_scripts
pushd "${1}" >/dev/null
# Source all .sh or .zsh scripts in a given directory based on shell type
# Args: $1 - directory path containing shell scripts to source
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)
elif [ ! "x${BASH_VERSION}" = "x" ]; then
elif [ -n "${BASH_VERSION}" ]; then
# shellcheck disable=SC2035
profile_d_scripts=$(ls *.sh 2>/dev/null)
fi
if [ ! "x${profile_d_scripts}" = "x" ] ; then
for x in ${profile_d_scripts} ; do
echo Sourcing "${1}/${x}"...
. "${1}/${x}"
if [ -n "${profile_d_scripts}" ]; then
for script in ${profile_d_scripts}; do
echo "Sourcing ${1}/${script}..."
# shellcheck disable=SC1090
. "${1}/${script}"
done
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
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
if [ "$CMDER_ROOT" = "" -a "$ConEmuDir" != "" ] ; then
if [ -d "${ConEmuDir}../../vendor" ] ; then
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
# Detect and set CMDER_ROOT for bash admin sessions
# Converts Windows paths to Unix paths if needed
# ConEmuDir is set by ConEmu/Cmder environment
if [ -z "$CMDER_ROOT" ] && [ -n "$ConEmuDir" ]; then
if [ -d "${ConEmuDir}../../vendor" ]; then
case "$ConEmuDir" in
*\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." && pwd );;
esac
else
echo "Running in ConEmu without Cmder, skipping Cmder integration."
fi
elif [ "$CMDER_ROOT" != "" ] ; then
case "$CMDER_ROOT" in *\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";; esac
elif [ -n "$CMDER_ROOT" ]; then
case "$CMDER_ROOT" in
*\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";;
esac
fi
if [ ! "$CMDER_ROOT" = "" ] ; then
# Remove any trailing '/'
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
# If CMDER_ROOT is still not set, try to derive from script location
# Note: This only works if cmder_exinit is in its original location (vendor/)
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
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
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
# to source them at startup.
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
# Create profile.d directory if it doesn't exist
if [ ! -d "${CMDER_ROOT}/config/profile.d" ]; then
mkdir -p "${CMDER_ROOT}/config/profile.d"
fi
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
runProfiled "${CMDER_ROOT}/config/profile.d"
# Source all shell scripts in profile.d directories
if [ -d "${CMDER_ROOT}/config/profile.d" ]; then
run_profile_d "${CMDER_ROOT}/config/profile.d"
fi
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
runProfiled "${CMDER_USER_CONFIG}/profile.d"
if [ -d "${CMDER_USER_CONFIG}/profile.d" ]; then
run_profile_d "${CMDER_USER_CONFIG}/profile.d"
fi
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
# Rename legacy user-profile.sh to user_profile.sh for consistency
if [ -f "$CMDER_ROOT/config/user-profile.sh" ]; then
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
fi
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
# Source user profile from CMDER_ROOT config
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ]; then
# shellcheck disable=SC1091
. "${CMDER_ROOT}/config/user_profile.sh"
fi
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
# Handle CMDER_USER_CONFIG if set
if [ -n "${CMDER_USER_CONFIG}" ]; 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"
fi
export PATH=${CMDER_USER_CONFIG}/bin:$PATH
export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
# Source user profile from CMDER_USER_CONFIG
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ]; then
# shellcheck disable=SC1091
. "${CMDER_USER_CONFIG}/user_profile.sh"
fi
fi
if [ ! -f "${CmderUserProfilePath}" ] ; then
echo Creating user startup file: "${CmderUserProfilePath}"
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
# Determine the user profile path for creation if needed
if [ -n "${CMDER_USER_CONFIG}" ]; then
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

16
vendor/sources.json vendored
View File

@@ -1,13 +1,13 @@
[
{
"name": "git-for-windows",
"version": "2.53.0.windows.1",
"url": "https://github.com/git-for-windows/git/releases/download/v2.53.0.windows.1/PortableGit-2.53.0-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.9.17",
"url": "https://github.com/chrisant996/clink/releases/download/v1.9.17/clink.1.9.17.36e2ca.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",
@@ -16,12 +16,12 @@
},
{
"name": "windows-terminal",
"version": "1.23.20211.0",
"url": "https://github.com/microsoft/terminal/releases/download/v1.23.20211.0/Microsoft.WindowsTerminal_1.23.20211.0_x64.zip"
"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.6.7",
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.7.zip"
"version": "0.6.6",
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.6.zip"
}
]