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
36 changed files with 460 additions and 2147 deletions

View File

@@ -1,15 +0,0 @@
# List of whitespace-only commits to ignore in the Git blame;
# to improve tracking changes and avoid noise
58db4e3419bf1e5cc1bb61fcd7ce2ebbca89243a
efb3338f5cf0eec21e8a75abc62ee14965cb4a7e
3859f6ffc088b2ae78748abc84986f4adcadcd41
d6569192fc91167f555c3eff58402ff01f1197ea
67de97a492c9389f95499db38f9474a1c20ec585
a0d085f93eaa69c22449d0217e8daf9eaea2b180
1cfba25beb46c74bb1debca2bcfe7ac470e96172
f6bc623284914489e891bbac923feb774c862b99
abbab3f8b477e917d0a175d0de23cce121096631
126347025f9cade241beff182738b2527da7535e
4740b836f300658b27e6ad4d79efac63c9c24c24
be44bac95670b1cbbc91bd657882d985989846f9
f67e5704eda60526d495be758572181f01a6cac8

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 version: 2
updates: updates:
# Enable version updates for GitHub Actions - package-ecosystem: "github-actions" # See documentation for possible values
- package-ecosystem: "github-actions"
directory: "/" # Location of package manifests directory: "/" # Location of package manifests
schedule: schedule:
interval: "weekly" 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 represent a sequence of tasks that will be executed as part of the job
steps: steps:
# Checks-out the repository under $GITHUB_WORKSPACE, so the job can access it # Checks-out the repository under $GITHUB_WORKSPACE, so the job can access it
- uses: actions/checkout@v6 - uses: actions/checkout@v5
with: with:
fetch-depth: 0 # fetch all history for all branches and tags 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 # Runs a single command using the runners shell
- name: Merge master into development - name: Merge master into development
run: | run: |
@@ -46,15 +31,3 @@ jobs:
git checkout development git checkout development
git merge --no-ff master git merge --no-ff master
git push origin development 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,172 +35,56 @@ jobs:
discussions: write discussions: write
steps: steps:
- name: Check out repository code (Action from GitHub) - name: Check out repository code (Action from GitHub)
uses: actions/checkout@v6 uses: actions/checkout@v5
with: with:
fetch-depth: 0 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 - name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2 uses: microsoft/setup-msbuild@v2
- name: Build Cmder Launcher - name: Build Cmder Launcher
shell: pwsh shell: pwsh
working-directory: scripts working-directory: scripts
run: .\build.ps1 -Compile -verbose -terminal all 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 - name: Pack the built files
shell: pwsh shell: pwsh
working-directory: scripts working-directory: scripts
run: .\pack.ps1 -verbose -terminal all run: .\pack.ps1 -verbose
- name: Upload artifact (cmder_win_mini.zip)
uses: actions/upload-artifact@v4
with:
path: build/cmder_win_mini.zip
name: cmder_win_mini.zip
if-no-files-found: error
- name: Upload artifact (cmder_win.7z)
uses: actions/upload-artifact@v4
with:
path: build/cmder_win.7z
name: cmder_win.7z
if-no-files-found: error
- name: Upload artifact (cmder_win.zip)
uses: actions/upload-artifact@v4
with:
path: build/cmder_win.zip
name: cmder_win.zip
if-no-files-found: error
- name: Upload artifact (cmder_wt.zip)
uses: actions/upload-artifact@v4
with:
path: build/cmder_wt.zip
name: cmder_wt.zip
if-no-files-found: error
- name: Upload artifact (cmder_wt.7z)
uses: actions/upload-artifact@v4
with:
path: build/cmder_wt.7z
name: cmder_wt.7z
- name: Upload artifact (cmder_wt_mini.zip)
uses: actions/upload-artifact@v4
with:
path: build/cmder_wt_mini.zip
name: cmder_wt_mini.zip
- 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) - name: Upload artifact (cmder.zip)
uses: actions/upload-artifact@v6 uses: actions/upload-artifact@v5
with: with:
path: build/cmder.zip path: build/cmder.zip
name: cmder.zip name: cmder.zip
if-no-files-found: error if-no-files-found: error
- name: Upload artifact (cmder.7z) - name: Upload artifact (cmder.7z)
uses: actions/upload-artifact@v6 uses: actions/upload-artifact@v5
with: with:
path: build/cmder.7z path: build/cmder.7z
name: cmder.7z name: cmder.7z
- name: Upload artifact (cmder_mini.zip) - name: Upload artifact (cmder_mini.zip)
uses: actions/upload-artifact@v6 uses: actions/upload-artifact@v5
with: with:
path: build/cmder_mini.zip path: build/cmder_mini.zip
name: cmder_mini.zip name: cmder_mini.zip
- name: Upload artifact (hashes.txt) - name: Upload artifact (hashes.txt)
uses: actions/upload-artifact@v6 uses: actions/upload-artifact@v5
with: with:
path: build/hashes.txt path: build/hashes.txt
name: 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 - name: Create Release
uses: softprops/action-gh-release@v2 uses: softprops/action-gh-release@v2
with: with:
files: | files: |
build/cmder.zip build/cmder.zip
build/cmder_wt.zip
build/cmder.7z build/cmder.7z
build/cmder_wt.7z
build/cmder_mini.zip build/cmder_mini.zip
build/cmder_wt_mini.zip
build/hashes.txt build/hashes.txt
draft: true draft: true
generate_release_notes: true generate_release_notes: true
if: startsWith(github.ref, 'refs/tags/') 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: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v6 uses: actions/checkout@v5
- 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
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
@@ -85,34 +67,7 @@ jobs:
working-directory: scripts working-directory: scripts
run: .\build.ps1 -Compile -verbose 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 - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4 uses: github/codeql-action/analyze@v4
with: with:
category: "/language:${{matrix.language}}" 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 continue-on-error: false
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v5
- 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
- name: Initialize vendors - name: Initialize vendors
shell: pwsh shell: pwsh
working-directory: scripts working-directory: scripts
run: .\build.ps1 -verbose 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 - name: Testing Clink Shell
run: | run: |
cmd /c vendor\init.bat /v /d /t 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 - name: Testing PowerShell
run: | run: |
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "$env:CMDER_DEBUG='1'; . 'vendor\profile.ps1'" 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 - name: Testing Bash
run: | run: |
bash vendor/cmder.sh 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 pull-requests: write
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v5
with: with:
fetch-depth: 0 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 - id: make-changes
name: Checking for updates name: Checking for updates
env: env:
@@ -62,31 +51,7 @@ jobs:
Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ') Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ')
echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
- name: Summary - Update check results - uses: peter-evans/create-pull-request@v7
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
if: env.COUNT_UPDATED > 0 if: env.COUNT_UPDATED > 0
with: with:
title: 'Updates to `${{ env.COUNT_UPDATED }}` vendored dependencies' title: 'Updates to `${{ env.COUNT_UPDATED }}` vendored dependencies'
@@ -98,20 +63,3 @@ jobs:
commit-message: '⬆️ Update dependencies (${{ env.LIST_UPDATED }})' commit-message: '⬆️ Update dependencies (${{ env.LIST_UPDATED }})'
branch: update-vendor branch: update-vendor
base: master 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

7
.gitignore vendored
View File

@@ -31,10 +31,3 @@ launcher/src/version.rc2
.vs/* .vs/*
.vscode .vscode
.idea .idea
.vagrant/
scripts/packer/iso/*.iso
!scripts/packer/floppy/*.exe
scripts/packer/packer_cache
scripts/packer/output-*
*.box

View File

@@ -1,108 +1,5 @@
# Change Log # Change Log
## Unreleased
### Changes
- Refresh vendored sources and defaults via `sources.json` updates.
- Update build/pack scripts and GitHub Actions workflows.
### Fixes
- Improve `lib_path.cmd` path enhancement handling.
- Fix launcher overwrite/backup behavior for emulator settings.
- Fixes #2940
### Adds
- Add Windows Terminal integration (defaults, packaging, and launch helpers).
- Cmder for Windows
- Uses Windows and Git for Windows Native Terminals.
- Does not contain a terminal emulator like ConEmu or Windows Terminal.
- Add Git Bash/Mintty launch helpers and user init template.
- Add `create-cmdercfg.ps1` and `timer.cmd` helpers.
- Add `.git-blame-ignore-revs` entries for whitespace-only changes.
## [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) ## [1.3.20](https://github.com/cmderdev/cmder/tree/v1.3.20) (2022-03-18)
### Changes ### Changes

View File

@@ -1,66 +1,20 @@
@echo off @echo off
SET CMDER_ROOT=%~dp0 SET CMDER_ROOT=%~dp0
set CMDER_TERMINAL=conemu
if exist "%CMDER_ROOT%\vendor\windows-terminal\windowsterminal.exe" (
SET CMDER_TERMINAL=windows-terminal
)
if NOT "%~1" == "" (
SET CMDER_TERMINAL=%~1
shift
)
:: Remove Trailing '\' :: Remove Trailing '\'
if "%CMDER_ROOT:~-1%" == "\" SET CMDER_ROOT=%CMDER_ROOT:~0,-1% @if "%CMDER_ROOT:~-1%" == "\" SET CMDER_ROOT=%CMDER_ROOT:~0,-1%
if not exist "%CMDER_ROOT%\config" md "%CMDER_ROOT%\config" 2>nul
call :%CMDER_TERMINAL%
exit /b
:conemu
if not exist "%CMDER_ROOT%\config\user_ConEmu.xml" (
copy "%CMDER_ROOT%\vendor\ConEmu.xml.default" "%CMDER_ROOT%\config\user_ConEmu.xml" 1>nul
if %errorlevel% neq 0 (
echo ERROR: CMDER Initialization has Failed
exit /b 1
)
)
if exist "%~1" (
start %cmder_root%\vendor\conemu-maximus5\ConEmu.exe /Icon "%CMDER_ROOT%\icons\cmder.ico" /Title Cmder /LoadCfgFile "%~1"
) else (
start %cmder_root%\vendor\conemu-maximus5\ConEmu.exe /Icon "%CMDER_ROOT%\icons\cmder.ico" /Title Cmder /LoadCfgFile "%CMDER_ROOT%\config\user_ConEmu.xml"
)
exit /b
:windows-terminal
if not exist "%CMDER_ROOT%\vendor\windows-terminal\settings" md "%CMDER_ROOT%\vendor\windows-terminal\settings" 2>nul
if not exist "%CMDER_ROOT%\vendor\windows-terminal\.portable" echo "This makes this installation of Windows Terminal portable" >"%CMDER_ROOT%\vendor\windows-terminal\.portable" 2>nul
if exist "%CMDER_ROOT%\config\user_windows_terminal_settings.json" (
if not exist "%CMDER_ROOT%\vendor\windows-terminal\settings\settings.json" (
echo "Copying user Windows Terminal settings to '%CMDER_ROOT%\vendor\windows-terminal\settings\settings.json'..."
copy "%CMDER_ROOT%\config\user_windows_terminal_settings.json" "%CMDER_ROOT%\vendor\windows-terminal\settings\settings.json" 1>nul
)
) else if not exist "%CMDER_ROOT%\config\user_windows_terminal_settings.json" (
if not exist "%CMDER_ROOT%\config" mkdir "%CMDER_ROOT%\config" 2>nul
echo "Copying default Windows Terminal settings to '%CMDER_ROOT%\config'..."
copy "%CMDER_ROOT%\vendor\windows_terminal_default_settings.json" "%CMDER_ROOT%\config\user_windows_terminal_settings.json" 1>nul
echo "Copying default Windows Terminal settings to '%CMDER_ROOT%\vendor\windows-terminal\settings\settings.json'..."
copy "%CMDER_ROOT%\vendor\windows_terminal_default_settings.json" "%CMDER_ROOT%\vendor\windows-terminal\settings\settings.json" 1>nul
if %errorlevel% neq 0 (
echo ERROR: CMDER Initialization has Failed
exit /b 1
)
) else if exist "%cmder_root%\vendor\windows-terminal\settings\settings.json" (
copy "%cmder_root%\vendor\windows-terminal\settings\settings.json" "%CMDER_ROOT%\config\user_windows_terminal_settings.json"
)
start %cmder_root%\vendor\windows-terminal\windowsterminal.exe
exit /b
if not exist "%CMDER_ROOT%\config\user_ConEmu.xml" (
if not exist "%CMDER_ROOT%\config" mkdir "%CMDER_ROOT%\config" 2>nul
copy "%CMDER_ROOT%\vendor\ConEmu.xml.default" "%CMDER_ROOT%\config\user_ConEmu.xml" 1>nul
if %errorlevel% neq 0 (
echo ERROR: CMDER Initialization has Failed
exit /b 1
)
)
if exist "%~1" (
start %~dp0/vendor/conemu-maximus5/ConEmu.exe /Icon "%CMDER_ROOT%\icons\cmder.ico" /Title Cmder /LoadCfgFile "%~1"
) else (
start %~dp0/vendor/conemu-maximus5/ConEmu.exe /Icon "%CMDER_ROOT%\icons\cmder.ico" /Title Cmder /LoadCfgFile "%CMDER_ROOT%\config\user_ConEmu.xml"
)

View File

@@ -60,7 +60,7 @@ The Cmder's user interface is also designed to be more eye pleasing, and you can
| `/SINGLE` | Start Cmder in single mode. | | `/SINGLE` | Start Cmder in single mode. |
| `/START [start_path]` | Folder path to start in. | | `/START [start_path]` | Folder path to start in. |
| `/TASK [task_name]` | Task to start after launch. | | `/TASK [task_name]` | Task to start after launch. |
| `-- [ConEmu extras pars]` | Forwards ALL remaining parameters to ConEmu. | | `/X [ConEmu extras pars]` | Forwards parameters to ConEmu |
## Context Menu Integration ## Context Menu Integration

View File

@@ -1,6 +1,6 @@
## Config ## Config
All config files must be in this folder. If there is no option to set this folder All config files must be in this folder. If there is no option to set this folder
directly, it has to be hardlinked. directly, it has to be hardlinked.
* `user_aliases.cmd`: aliases in cmd; called from vendor\init.bat; autocreated from * `user_aliases.cmd`: aliases in cmd; called from vendor\init.bat; autocreated from

View File

@@ -188,9 +188,6 @@
<ItemGroup> <ItemGroup>
<ClCompile Include="src\CmderLauncher.cpp" /> <ClCompile Include="src\CmderLauncher.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Image Include="..\icons\cmder.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>

View File

@@ -107,9 +107,9 @@ bool FileExists(const wchar_t * filePath)
void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstring taskName = L"", std::wstring title = L"", std::wstring iconPath = L"", std::wstring cfgRoot = L"", bool use_user_cfg = true, std::wstring conemu_args = L"") void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstring taskName = L"", std::wstring title = L"", std::wstring iconPath = L"", std::wstring cfgRoot = L"", bool use_user_cfg = true, std::wstring conemu_args = L"")
{ {
#if USE_TASKBAR_API #if USE_TASKBAR_API
wchar_t appId[MAX_PATH] = { 0 }; wchar_t appId[MAX_PATH] = { 0 };
#endif #endif
wchar_t exeDir[MAX_PATH] = { 0 }; wchar_t exeDir[MAX_PATH] = { 0 };
wchar_t icoPath[MAX_PATH] = { 0 }; wchar_t icoPath[MAX_PATH] = { 0 };
wchar_t cfgPath[MAX_PATH] = { 0 }; wchar_t cfgPath[MAX_PATH] = { 0 };
@@ -117,7 +117,7 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
wchar_t cpuCfgPath[MAX_PATH] = { 0 }; wchar_t cpuCfgPath[MAX_PATH] = { 0 };
wchar_t userCfgPath[MAX_PATH] = { 0 }; wchar_t userCfgPath[MAX_PATH] = { 0 };
wchar_t defaultCfgPath[MAX_PATH] = { 0 }; wchar_t defaultCfgPath[MAX_PATH] = { 0 };
wchar_t terminalPath[MAX_PATH] = { 0 }; wchar_t conEmuPath[MAX_PATH] = { 0 };
wchar_t configDirPath[MAX_PATH] = { 0 }; wchar_t configDirPath[MAX_PATH] = { 0 };
wchar_t userConfigDirPath[MAX_PATH] = { 0 }; wchar_t userConfigDirPath[MAX_PATH] = { 0 };
wchar_t userBinDirPath[MAX_PATH] = { 0 }; wchar_t userBinDirPath[MAX_PATH] = { 0 };
@@ -128,34 +128,21 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
wchar_t legacyUserAliasesPath[MAX_PATH] = { 0 }; wchar_t legacyUserAliasesPath[MAX_PATH] = { 0 };
wchar_t args[MAX_PATH * 2 + 256] = { 0 }; wchar_t args[MAX_PATH * 2 + 256] = { 0 };
wchar_t userConEmuCfgPath[MAX_PATH] = { 0 }; wchar_t userConEmuCfgPath[MAX_PATH] = { 0 };
wchar_t windowsTerminalDir[MAX_PATH] = { 0 };
wchar_t conEmuDir[MAX_PATH] = { 0 };
wchar_t winDir[MAX_PATH] = { 0 };
wchar_t vendorDir[MAX_PATH] = { 0 };
wchar_t initCmd[MAX_PATH] = { 0 };
wchar_t initPowerShell[MAX_PATH] = { 0 };
wchar_t initBash[MAX_PATH] = { 0 };
wchar_t initMintty[MAX_PATH] = { 0 };
wchar_t vendoredGit[MAX_PATH] = { 0 };
wchar_t amdx64Git[MAX_PATH] = { 0 };
wchar_t x86Git[MAX_PATH] = { 0 };
wchar_t programFiles[MAX_PATH] = { 0 };
wchar_t programFilesX86[MAX_PATH] = { 0 };
wchar_t minTTYPath[MAX_PATH] = { 0 };
std::wstring cmderStart = path; std::wstring cmderStart = path;
std::wstring cmderTask = taskName; std::wstring cmderTask = taskName;
std::wstring cmderTitle = title; std::wstring cmderTitle = title;
std::wstring cmderTerminalArgs = conemu_args; std::wstring cmderConEmuArgs = conemu_args;
std::copy(cfgRoot.begin(), cfgRoot.end(), userConfigDirPath); std::copy(cfgRoot.begin(), cfgRoot.end(), userConfigDirPath);
userConfigDirPath[cfgRoot.length()] = 0; userConfigDirPath[cfgRoot.length()] = 0;
GetModuleFileName(NULL, exeDir, sizeof(exeDir)); GetModuleFileName(NULL, exeDir, sizeof(exeDir));
#if USE_TASKBAR_API #if USE_TASKBAR_API
wcscpy_s(appId, exeDir); wcscpy_s(appId, exeDir);
#endif #endif
PathRemoveFileSpec(exeDir); PathRemoveFileSpec(exeDir);
@@ -179,8 +166,8 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
{ {
PathCombine(userProfilePath, configDirPath, L"user_profile.cmd"); PathCombine(userProfilePath, configDirPath, L"user_profile.cmd");
char* lPr = (char*)malloc(MAX_PATH); char *lPr = (char *)malloc(MAX_PATH);
char* pR = (char*)malloc(MAX_PATH); char *pR = (char *)malloc(MAX_PATH);
size_t i; size_t i;
wcstombs_s(&i, lPr, (size_t)MAX_PATH, wcstombs_s(&i, lPr, (size_t)MAX_PATH,
legacyUserProfilePath, (size_t)MAX_PATH); legacyUserProfilePath, (size_t)MAX_PATH);
@@ -197,8 +184,8 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
{ {
PathCombine(userAliasesPath, configDirPath, L"user_aliases.cmd"); PathCombine(userAliasesPath, configDirPath, L"user_aliases.cmd");
char* lPr = (char*)malloc(MAX_PATH); char *lPr = (char *)malloc(MAX_PATH);
char* pR = (char*)malloc(MAX_PATH); char *pR = (char *)malloc(MAX_PATH);
size_t i; size_t i;
wcstombs_s(&i, lPr, (size_t)MAX_PATH, wcstombs_s(&i, lPr, (size_t)MAX_PATH,
legacyUserAliasesPath, (size_t)MAX_PATH); legacyUserAliasesPath, (size_t)MAX_PATH);
@@ -235,8 +222,8 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
{ {
PathCombine(userProfilePath, userConfigDirPath, L"user_profile.cmd"); PathCombine(userProfilePath, userConfigDirPath, L"user_profile.cmd");
char* lPr = (char*)malloc(MAX_PATH); char *lPr = (char *)malloc(MAX_PATH);
char* pR = (char*)malloc(MAX_PATH); char *pR = (char *)malloc(MAX_PATH);
size_t i; size_t i;
wcstombs_s(&i, lPr, (size_t)MAX_PATH, wcstombs_s(&i, lPr, (size_t)MAX_PATH,
legacyUserProfilePath, (size_t)MAX_PATH); legacyUserProfilePath, (size_t)MAX_PATH);
@@ -253,8 +240,8 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
{ {
PathCombine(userAliasesPath, userConfigDirPath, L"user_aliases.cmd"); PathCombine(userAliasesPath, userConfigDirPath, L"user_aliases.cmd");
char* lPr = (char*)malloc(MAX_PATH); char *lPr = (char *)malloc(MAX_PATH);
char* pR = (char*)malloc(MAX_PATH); char *pR = (char *)malloc(MAX_PATH);
size_t i; size_t i;
wcstombs_s(&i, lPr, (size_t)MAX_PATH, wcstombs_s(&i, lPr, (size_t)MAX_PATH,
legacyUserAliasesPath, (size_t)MAX_PATH); legacyUserAliasesPath, (size_t)MAX_PATH);
@@ -264,158 +251,71 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
} }
} }
PathCombine(vendorDir, exeDir, L"vendor"); // Set path to vendored ConEmu config file
PathCombine(windowsTerminalDir, vendorDir, L"windows-terminal"); PathCombine(cfgPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.xml");
PathCombine(conEmuDir, vendorDir, L"conemu-maximus5");
GetEnvironmentVariable(L"WINDIR", winDir, MAX_PATH);
if (PathFileExists(windowsTerminalDir)) // Set path to Cmder default ConEmu config file
{ PathCombine(defaultCfgPath, exeDir, L"vendor\\ConEmu.xml.default");
// Set path to vendored ConEmu config file
PathCombine(cfgPath, windowsTerminalDir, L"settings\\settings.json");
// Set path to Cmder default ConEmu config file // Check for machine-specific then user config source file.
PathCombine(defaultCfgPath, exeDir, L"vendor\\windows_terminal_default_settings.json"); PathCombine(cpuCfgPath, userConfigDirPath, L"ConEmu-%COMPUTERNAME%.xml");
ExpandEnvironmentStrings(cpuCfgPath, cpuCfgPath, sizeof(cpuCfgPath) / sizeof(cpuCfgPath[0]));
// Check for machine-specific then user config source file. // Set path to Cmder user ConEmu config file
PathCombine(cpuCfgPath, userConfigDirPath, L"windows_terminal_%COMPUTERNAME%_settings.json"); PathCombine(userCfgPath, userConfigDirPath, L"user-ConEmu.xml");
ExpandEnvironmentStrings(cpuCfgPath, cpuCfgPath, sizeof(cpuCfgPath) / sizeof(cpuCfgPath[0]));
// Set path to Cmder user ConEmu config file if ( PathFileExists(cpuCfgPath) || use_user_cfg == false ) // config/ConEmu-%COMPUTERNAME%.xml file exists or /m was specified on command line, use machine specific config.
PathCombine(userCfgPath, userConfigDirPath, L"user_windows_terminal_settings.json");
}
else if (PathFileExists(conEmuDir))
{
// Set path to vendored ConEmu config file
PathCombine(cfgPath, conEmuDir, L"ConEmu.xml");
// Set path to Cmder default ConEmu config file
PathCombine(defaultCfgPath, exeDir, L"vendor\\ConEmu.xml.default");
// Check for machine-specific then user config source file.
PathCombine(cpuCfgPath, userConfigDirPath, L"ConEmu-%COMPUTERNAME%.xml");
ExpandEnvironmentStrings(cpuCfgPath, cpuCfgPath, sizeof(cpuCfgPath) / sizeof(cpuCfgPath[0]));
// Set path to Cmder user ConEmu config file
PathCombine(userCfgPath, userConfigDirPath, L"user-ConEmu.xml");
}
if (wcscmp(cpuCfgPath, L"") != 0 && (PathFileExists(cpuCfgPath) || use_user_cfg == false)) // config/[host specific terminal emulator config] file exists or /m was specified on command line, use machine specific config.
{ {
if (cfgRoot.length() == 0) // '/c [path]' was NOT specified if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
{ {
if (PathFileExists(cfgPath)) // [terminal emulator config] file exists, copy [terminal emulator config] to config/user_[terminal emulator config] file to backup any settings changes from previous sessions. if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml file exists, copy vendor/conemu-maximus5/ConEmu.xml to config/ConEmu-%COMPUTERNAME%.xml.
{ {
if (!CopyFile(cfgPath, cpuCfgPath, FALSE)) if (!CopyFile(cfgPath, cpuCfgPath, FALSE))
{ {
if (PathFileExists(windowsTerminalDir)) { MessageBox(NULL,
MessageBox(NULL, (GetLastError() == ERROR_ACCESS_DENIED)
(GetLastError() == ERROR_ACCESS_DENIED) ? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml! Access Denied."
? L"Failed to copy vendor/windows-terminal/settings/settings.json file to config/windows_terminal_%COMPUTERNAME%_settings.json! Access Denied." : L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml!", MB_TITLE, MB_ICONSTOP);
: L"Failed to copy vendor/windows-terminal/settings/settings.json file to config/windows_terminal_%COMPUTERNAME%_settigns.json!", MB_TITLE, MB_ICONSTOP); exit(1);
exit(1);
}
else if (PathFileExists(conEmuDir))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml! Access Denied."
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
} }
} }
else // [terminal emulator config] file does not exist, copy config/[host specific terminal emulator config] file to [terminal emulator config] file else // vendor/conemu-maximus5/ConEmu.xml config file does not exist, copy config/ConEmu-%COMPUTERNAME%.xml to vendor/conemu-maximus5/ConEmu.xml file
{ {
if (!CopyFile(cpuCfgPath, cfgPath, FALSE)) if (!CopyFile(cpuCfgPath, cfgPath, FALSE))
{ {
if (PathFileExists(windowsTerminalDir)) { MessageBox(NULL,
MessageBox(NULL, (GetLastError() == ERROR_ACCESS_DENIED)
(GetLastError() == ERROR_ACCESS_DENIED) ? L"Failed to copy config/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
? L"Failed to copy config/windows_terminal_%COMPUTERNAME%_settings.json file to vendor/windows-terminal/settings/settings.json! Access Denied." : L"Failed to copy config/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
: L"Failed to copy config/windows_terminal_%COMPUTERNAME%_settings.json file to vendor/windows-terminal/settings/settings.json!", MB_TITLE, MB_ICONSTOP); exit(1);
exit(1);
}
else if (PathFileExists(conEmuDir))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy config/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
: L"Failed to copy config/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
} }
} }
} }
} else // '/c [path]' was specified, don't copy anything and use existing conemu-%COMPUTERNAME%.xml to start comemu.
else if (wcscmp(userCfgPath, L"") != 0 && PathFileExists(userCfgPath)) // config/user[terminal emulator config] file exists, use it.
{
if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
{ {
if (PathFileExists(cfgPath)) // [terminal emulator config] file exists, copy [terminal emulator config] to config/user_[terminal emulator config] file to backup any settings changes from previous sessions. if (use_user_cfg == false && PathFileExists(cfgPath) && !PathFileExists(cpuCfgPath)) // vendor/conemu-maximus5/ConEmu.xml file exists, copy vendor/conemu-maximus5/ConEmu.xml to config/ConEmu-%COMPUTERNAME%.xml.
{ {
if (!CopyFile(cfgPath, userCfgPath, FALSE)) if (!CopyFile(cfgPath, cpuCfgPath, FALSE))
{
if (PathFileExists(windowsTerminalDir))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/windows-terminal/settings/settings.json file to config/windows_terminal_settings.json! Access Denied."
: L"Failed to copy vendor/windows-terminal/settings/settings.json file to config/windows_terminal_settigns.json!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
else if (PathFileExists(conEmuDir))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied."
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
}
else // [terminal emulator config] file does not exist, copy config/user_[terminal emulator config] file to [terminal emulator config] file
{
if (!CopyFile(userCfgPath, cfgPath, FALSE))
{
if (PathFileExists(windowsTerminalDir))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy config/user_windows_terminal_settings.json file to vendor/windows-terminal/settings/settings.json! Access Denied."
: L"Failed to copy config/user_windows_terminal_settings.json file to vendor/windows-terminal/settings/settings.json!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
else if (PathFileExists(conEmuDir))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
: L"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
}
}
else if (!PathFileExists(windowsTerminalDir)) { // '/c [path]' was specified, don't copy anything and use existing user_[terminal emulator config] file.
PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml");
}
}
else if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
{
if (PathFileExists(cfgPath)) // [terminal emulator config] file exists, copy [terminal emulator config] file to config/user_[terminal emulator config] file.
{
if (!CopyFile(cfgPath, userCfgPath, FALSE))
{
if (PathFileExists(windowsTerminalDir))
{ {
MessageBox(NULL, MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED) (GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/windows-terminal/settings/settings.json file to config/user_windows_terminal_settings.json! Access Denied." ? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml! Access Denied."
: L"Failed to copy vendor/windows-terminal/settings/settings.json file to config/user_windows_terminal_settigns.json!", MB_TITLE, MB_ICONSTOP); : L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml!", MB_TITLE, MB_ICONSTOP);
exit(1); exit(1);
} }
else if (PathFileExists(conEmuDir)) }
PathCombine(userConEmuCfgPath, userConfigDirPath, L"ConEmu-%COMPUTERNAME%.xml");
ExpandEnvironmentStrings(userConEmuCfgPath, userConEmuCfgPath, sizeof(userConEmuCfgPath) / sizeof(userConEmuCfgPath[0]));
}
}
else if (PathFileExists(userCfgPath)) // config/user_conemu.xml exists, use it.
{
if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
{
if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml.
{
if (!CopyFile(cfgPath, userCfgPath, FALSE))
{ {
MessageBox(NULL, MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED) (GetLastError() == ERROR_ACCESS_DENIED)
@@ -424,51 +324,28 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
exit(1); exit(1);
} }
} }
else // vendor/[terminal emulator config].default config exists, copy Cmder vendor/[terminal emulator config].default file to [terminal emulator config] file. else // vendor/conemu-maximus5/ConEmu.xml does not exist, copy config/user-conemu.xml to vendor/conemu-maximus5/ConEmu.xml
{ {
if (!CopyFile(defaultCfgPath, cfgPath, FALSE)) if (!CopyFile(userCfgPath, cfgPath, FALSE))
{ {
if (PathFileExists(windowsTerminalDir)) MessageBox(NULL,
{ (GetLastError() == ERROR_ACCESS_DENIED)
MessageBox(NULL, ? L"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
(GetLastError() == ERROR_ACCESS_DENIED) : L"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy vendor/windows-terminal_default_settings_settings.json file to vendor/windows-terminal/settings/settings.json! Access Denied." exit(1);
: L"Failed to copy vendor/windows-terminal_default_settings_settings.json file to vendor/windows-terminal/settings/settigns.json!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
else if (PathFileExists(conEmuDir))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
: L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
} }
} }
} }
else if (!CopyFile(defaultCfgPath, cfgPath, FALSE) && PathFileExists(conEmuDir)) else // '/c [path]' was specified, don't copy anything and use existing user_conemu.xml to start comemu.
{ {
MessageBox(NULL, PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml");
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
: L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
} }
} }
else if (wcscmp(cfgPath, L"") != 0 && PathFileExists(cfgPath)) // This is a first time Cmder.exe run and [terminal emulator config] file exists, copy [terminal emulator config] file to config/user_[terminal emulator config] file. else if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
{ {
if (!CopyFile(cfgPath, userCfgPath, FALSE)) if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml
{ {
if (PathFileExists(windowsTerminalDir)) if (!CopyFile(cfgPath, userCfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/windows-terminal/settings/settings.json file to config/user_windows_terminal_settings_settings.json! Access Denied."
: L"Failed to copy vendor/windows-terminal/settings/settings.json file to config/user_windows_terminal_settings_settigns.json!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
else
{ {
MessageBox(NULL, MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED) (GetLastError() == ERROR_ACCESS_DENIED)
@@ -476,146 +353,99 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP); : L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1); exit(1);
} }
else // vendor/ConEmu.xml.default config exists, copy Cmder vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml.
{
if (!CopyFile(defaultCfgPath, cfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
: L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
}
else {
if (!CopyFile(defaultCfgPath, cfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
: L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
}
else if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml
{
if (!CopyFile(cfgPath, userCfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied."
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
} }
PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml"); PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml");
} }
else if (wcscmp(defaultCfgPath, L"") != 0) // '/c [path]' was specified and 'vendor/[terminal emulator config].default' config exists, copy Cmder 'vendor/[terminal emulator config].default' file to '[user specified path]/config/user_[terminal emulator config]'. else // '/c [path]' was specified and 'vendor/ConEmu.xml.default' config exists, copy Cmder 'vendor/ConEmu.xml.default' file to '[user specified path]/config/user_ConEmu.xml'.
{ {
if ( ! CopyFile(defaultCfgPath, userCfgPath, FALSE)) if ( ! CopyFile(defaultCfgPath, userCfgPath, FALSE))
{ {
if (PathFileExists(windowsTerminalDir)) MessageBox(NULL,
{ (GetLastError() == ERROR_ACCESS_DENIED)
MessageBox(NULL, ? L"Failed to copy vendor/ConEmu.xml.default file to [user specified path]/config/user_ConEmu.xml! Access Denied."
(GetLastError() == ERROR_ACCESS_DENIED) : L"Failed to copy vendor/ConEmu.xml.default file to [user specified path]/config/user_ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy vendor/windows-terminal_default_settings_settings.json file to [user specified path]/config/user_windows_terminal_settings.json! Access Denied." exit(1);
: L"Failed to copy vendor/windows-terminal_default_settings_settings.json file to [user specified path]/config/user_windows_terminal_settings.json!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
else
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/ConEmu.xml.default file to [user specified path]/config/user_ConEmu.xml! Access Denied."
: L"Failed to copy vendor/ConEmu.xml.default file to [user specified path]/config/user_ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
} }
PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml"); PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml");
} }
GetEnvironmentVariable(L"ProgramFiles", programFiles, MAX_PATH);
GetEnvironmentVariable(L"ProgramFiles(x86)", programFilesX86, MAX_PATH);
PathCombine(vendoredGit, vendorDir, L"git-for-windows");
PathCombine(amdx64Git, programFiles, L"Git");
PathCombine(x86Git, programFilesX86, L"Git");
SYSTEM_INFO sysInfo; SYSTEM_INFO sysInfo;
GetNativeSystemInfo(&sysInfo); GetNativeSystemInfo(&sysInfo);
if (PathFileExists(windowsTerminalDir)) if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
{ {
PathCombine(terminalPath, exeDir, L"vendor\\windows-terminal\\WindowsTerminal.exe"); PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu64.exe");
}
else if (PathFileExists(conEmuDir))
{
swprintf_s(args, L"%s /Icon \"%s\"", args, icoPath);
swprintf_s(args, L"%s /title \"%s\"", args, cmderTitle.c_str());
PathCombine(terminalPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu64.exe");
} }
else else
{ {
PathCombine(terminalPath, winDir, L"system32\\cmd.exe"); PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.exe");
if (streqi(cmderTask.c_str(), L"powershell"))
{
PathCombine(terminalPath, winDir, L"System32\\WindowsPowerShell\\v1.0\\powershell.exe");
}
/*
else if (streqi(cmderTask.c_str(), L"mintty"))
{
if (PathFileExists(vendoredGit))
{
PathCombine(terminalPath, vendoredGit, L"git-bash.exe");
}
else if (PathFileExists(amdx64Git))
{
PathCombine(terminalPath, amdx64Git, L"git-bash.exe");
}
else if (PathFileExists(x86Git))
{
PathCombine(terminalPath, x86Git, L"git-bash.exe");
}
}
*/
} }
swprintf_s(args, L"%s /Icon \"%s\"", args, icoPath);
if (!streqi(cmderStart.c_str(), L"")) if (!streqi(cmderStart.c_str(), L""))
{ {
if (PathFileExists(windowsTerminalDir)) { swprintf_s(args, L"%s /dir \"%s\"", args, cmderStart.c_str());
swprintf_s(args, L"%s -d \"%s\"", args, cmderStart.c_str());
}
else
{
swprintf_s(args, L"%s /dir \"%s\"", args, cmderStart.c_str());
}
} }
if (is_single_mode) if (is_single_mode)
{ {
if (!PathFileExists(windowsTerminalDir)) { swprintf_s(args, L"%s /single", args);
swprintf_s(args, L"%s /single", args); }
}
if (!streqi(cmderTitle.c_str(), L""))
{
swprintf_s(args, L"%s /title \"%s\"", args, cmderTitle.c_str());
} }
if (cfgRoot.length() != 0) if (cfgRoot.length() != 0)
{ {
if (!PathFileExists(windowsTerminalDir)) { swprintf_s(args, L"%s -loadcfgfile \"%s\"", args, userConEmuCfgPath);
swprintf_s(args, L"%s -loadcfgfile \"%s\"", args, userConEmuCfgPath);
}
} }
if (!streqi(cmderTerminalArgs.c_str(), L"")) if (!streqi(cmderConEmuArgs.c_str(), L""))
{ {
swprintf_s(args, L"%s %s", args, cmderTerminalArgs.c_str()); swprintf_s(args, L"%s %s", args, cmderConEmuArgs.c_str());
} }
// The `/run` arg and its value MUST be the last arg of ConEmu // The `/run` arg and its value MUST be the last arg of ConEmu
// see : https://conemu.github.io/en/ConEmuArgs.html // see : https://conemu.github.io/en/ConEmuArgs.html
// > This must be the last used switch (excepting -new_console and -cur_console) // > This must be the last used switch (excepting -new_console and -cur_console)
PathCombine(initCmd, vendorDir, L"init.bat");
PathCombine(initPowerShell, vendorDir, L"profile.ps1");
PathCombine(initBash, vendorDir, L"start_git_bash.cmd");
PathCombine(initMintty, vendorDir, L"start_git_mintty.cmd");
if (!streqi(cmderTask.c_str(), L"")) if (!streqi(cmderTask.c_str(), L""))
{ {
if (PathFileExists(windowsTerminalDir)) { swprintf_s(args, L"%s /run {%s}", args, cmderTask.c_str());
swprintf_s(args, L"%s -p \"%s\"", args, cmderTask.c_str());
}
else if (PathFileExists(conEmuDir))
{
swprintf_s(args, L"%s /run {%s}", args, cmderTask.c_str());
}
else
{
if (streqi(cmderTask.c_str(), L"powershell"))
{
swprintf_s(args, L"%s -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command \"Invoke-Expression 'Import-Module ''%s'''\"", args, initPowerShell);
}
else if (streqi(cmderTask.c_str(), L"bash"))
{
swprintf_s(args, L"%s /c \"%s\"", args, initBash);
}
else if (streqi(cmderTask.c_str(), L"mintty"))
{
swprintf_s(args, L"%s /c \"%s\"", args, initMintty);
}
else if (streqi(cmderTask.c_str(), L"cmder"))
{
swprintf_s(args, L"%s /k \"%s\"", args, initCmd);
}
}
} }
SetEnvironmentVariable(L"CMDER_ROOT", exeDir); SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
@@ -625,52 +455,18 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
SetEnvironmentVariable(L"CMDER_USER_BIN", userBinDirPath); SetEnvironmentVariable(L"CMDER_USER_BIN", userBinDirPath);
} }
// Try to find m'intty.exe' so ConEmu can launch using %MINTTY_EXE% in external Git for Cmder Mini.
// See: https://github.com/Maximus5/ConEmu/issues/2559 for why this is commented.
/*
if (PathFileExists(vendoredGit))
{
PathCombine(minTTYPath, vendoredGit, L"usr\\bin\\mintty.exe");
SetEnvironmentVariable(L"MINTTY_EXE", minTTYPath);
}
else if (PathFileExists(amdx64Git))
{
PathCombine(minTTYPath, amdx64Git, L"usr\\bin\\mintty.exe");
SetEnvironmentVariable(L"MINTTY_EXE", minTTYPath);
}
else if (PathFileExists(x86Git))
{
PathCombine(minTTYPath, x86Git, L"usr\\bin\\mintty.exe");
SetEnvironmentVariable(L"MINTTY_EXE", minTTYPath);
}
*/
// Ensure EnvironmentVariables are propagated. // Ensure EnvironmentVariables are propagated.
STARTUPINFO si = { 0 }; STARTUPINFO si = { 0 };
si.cb = sizeof(STARTUPINFO); si.cb = sizeof(STARTUPINFO);
#if USE_TASKBAR_API #if USE_TASKBAR_API
si.lpTitle = appId; si.lpTitle = appId;
si.dwFlags = STARTF_TITLEISAPPID; si.dwFlags = STARTF_TITLEISAPPID;
#endif #endif
PROCESS_INFORMATION pi; PROCESS_INFORMATION pi;
if (!CreateProcess(conEmuPath, args, NULL, NULL, false, 0, NULL, NULL, &si, &pi)) {
if (!CreateProcess(terminalPath, args, NULL, NULL, false, 0, NULL, NULL, &si, &pi)) MessageBox(NULL, _T("Unable to create the ConEmu process!"), _T("Error"), MB_OK);
{
if (PathFileExists(windowsTerminalDir))
{
MessageBox(NULL, _T("Unable to create the Windows Terminal process!"), _T("Error"), MB_OK);
}
else if (PathFileExists(conEmuDir))
{
MessageBox(NULL, _T("Unable to create the ConEmu process!"), _T("Error"), MB_OK);
}
else
{
MessageBox(NULL, _T("Unable to create the Cmd process!"), _T("Error"), MB_OK);
}
return; return;
} }
} }
@@ -725,11 +521,11 @@ void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName, std::wstring cfgR
wchar_t commandStr[MAX_PATH + 20] = { 0 }; wchar_t commandStr[MAX_PATH + 20] = { 0 };
wchar_t baseCommandStr[MAX_PATH + 20] = { 0 }; wchar_t baseCommandStr[MAX_PATH + 20] = { 0 };
if (single) { if (!single) {
swprintf_s(baseCommandStr, L"\"%s\" /single", exePath); swprintf_s(baseCommandStr, L"\"%s\"", exePath);
} }
else { else {
swprintf_s(baseCommandStr, L"\"%s\"", exePath); swprintf_s(baseCommandStr, L"\"%s\" /single", exePath);
} }
if (cfgRoot.length() == 0) // '/c [path]' was NOT specified if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
@@ -787,7 +583,7 @@ struct cmderOptions
std::wstring cmderTitle = L"Cmder"; std::wstring cmderTitle = L"Cmder";
std::wstring cmderIcon = L""; std::wstring cmderIcon = L"";
std::wstring cmderRegScope = L"USER"; std::wstring cmderRegScope = L"USER";
std::wstring cmderTerminalArgs = L""; std::wstring cmderConEmuArgs = L"";
bool cmderSingle = false; bool cmderSingle = false;
bool cmderUserCfg = true; bool cmderUserCfg = true;
bool registerApp = false; bool registerApp = false;
@@ -801,22 +597,11 @@ cmderOptions GetOption()
LPWSTR *szArgList; LPWSTR *szArgList;
int argCount; int argCount;
wchar_t windowsTerminalDir[MAX_PATH] = { 0 };
wchar_t conEmuDir[MAX_PATH] = { 0 };
wchar_t vendorDir[MAX_PATH] = { 0 };
wchar_t exeDir[MAX_PATH] = { 0 };
GetModuleFileName(NULL, exeDir, sizeof(exeDir));
PathRemoveFileSpec(exeDir);
PathCombine(vendorDir, exeDir, L"vendor");
PathCombine(windowsTerminalDir, vendorDir, L"windows-terminal");
PathCombine(conEmuDir, vendorDir, L"ConEmu-Maximus5");
szArgList = CommandLineToArgvW(GetCommandLine(), &argCount); szArgList = CommandLineToArgvW(GetCommandLine(), &argCount);
for (int i = 1; i < argCount; i++) for (int i = 1; i < argCount; i++)
{ {
// MessageBox(NULL, szArgList[i], L"Arglist contents", MB_OK); // MessageBox(NULL, szArgList[i], L"Arglist contents", MB_OK);
if (cmderOptions.error == false) { if (cmderOptions.error == false) {
if (_wcsicmp(L"/c", szArgList[i]) == 0) if (_wcsicmp(L"/c", szArgList[i]) == 0)
@@ -853,31 +638,26 @@ cmderOptions GetOption()
MessageBox(NULL, szArgList[i + 1], L"/START - Folder does not exist!", MB_OK); MessageBox(NULL, szArgList[i + 1], L"/START - Folder does not exist!", MB_OK);
} }
} }
else if (_wcsicmp(L"/task", szArgList[i]) == 0 || PathFileExists(windowsTerminalDir) || PathFileExists(conEmuDir)) else if (_wcsicmp(L"/task", szArgList[i]) == 0)
{ {
cmderOptions.cmderTask = szArgList[i + 1]; cmderOptions.cmderTask = szArgList[i + 1];
i++; i++;
} }
else if ((_wcsicmp(L"bash", szArgList[i]) == 0 || _wcsicmp(L"powershell", szArgList[i]) == 0) || PathFileExists(windowsTerminalDir) || PathFileExists(conEmuDir)) else if (_wcsicmp(L"/title", szArgList[i]) == 0)
{
cmderOptions.cmderTask = szArgList[i];
i++;
}
else if (_wcsicmp(L"/title", szArgList[i]) == 0 && !PathFileExists(windowsTerminalDir) && PathFileExists(conEmuDir))
{ {
cmderOptions.cmderTitle = szArgList[i + 1]; cmderOptions.cmderTitle = szArgList[i + 1];
i++; i++;
} }
else if (_wcsicmp(L"/icon", szArgList[i]) == 0 && !PathFileExists(windowsTerminalDir) && PathFileExists(conEmuDir)) else if (_wcsicmp(L"/icon", szArgList[i]) == 0)
{ {
cmderOptions.cmderIcon = szArgList[i + 1]; cmderOptions.cmderIcon = szArgList[i + 1];
i++; i++;
} }
else if (_wcsicmp(L"/single", szArgList[i]) == 0 && !PathFileExists(windowsTerminalDir) && PathFileExists(conEmuDir)) else if (_wcsicmp(L"/single", szArgList[i]) == 0)
{ {
cmderOptions.cmderSingle = true; cmderOptions.cmderSingle = true;
} }
else if (_wcsicmp(L"/m", szArgList[i]) == 0 && !PathFileExists(windowsTerminalDir) && PathFileExists(conEmuDir)) else if (_wcsicmp(L"/m", szArgList[i]) == 0)
{ {
cmderOptions.cmderUserCfg = false; cmderOptions.cmderUserCfg = false;
} }
@@ -910,7 +690,7 @@ cmderOptions GetOption()
/* Used for passing arguments to conemu prog */ /* Used for passing arguments to conemu prog */
else if (_wcsicmp(L"/x", szArgList[i]) == 0) else if (_wcsicmp(L"/x", szArgList[i]) == 0)
{ {
cmderOptions.cmderTerminalArgs = szArgList[i + 1]; cmderOptions.cmderConEmuArgs = szArgList[i + 1];
i++; i++;
} }
/* Bare double dash, remaining commandline is for conemu */ /* Bare double dash, remaining commandline is for conemu */
@@ -920,7 +700,7 @@ cmderOptions GetOption()
auto doubledash = cmdline.find(L" -- "); auto doubledash = cmdline.find(L" -- ");
if (doubledash != std::string::npos) if (doubledash != std::string::npos)
{ {
cmderOptions.cmderTerminalArgs = cmdline.substr(doubledash + 4); cmderOptions.cmderConEmuArgs = cmdline.substr(doubledash + 4);
} }
break; break;
} }
@@ -947,11 +727,7 @@ cmderOptions GetOption()
cmderOptions.error = true; cmderOptions.error = true;
} }
} }
}
if (!PathFileExists(windowsTerminalDir) && !PathFileExists(conEmuDir) && streqi(cmderOptions.cmderTask.c_str(), L""))
{
cmderOptions.cmderTask = L"cmder";
} }
if (cmderOptions.error == true) if (cmderOptions.error == true)
@@ -980,29 +756,12 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
cmderOptions cmderOptions = GetOption(); cmderOptions cmderOptions = GetOption();
wchar_t windowsTerminalDir[MAX_PATH] = { 0 };
wchar_t exeDir[MAX_PATH] = { 0 };
GetModuleFileName(NULL, exeDir, sizeof(exeDir));
PathRemoveFileSpec(exeDir);
PathCombine(windowsTerminalDir, exeDir, L"vendor\\windows-terminal");
if (cmderOptions.registerApp == true) if (cmderOptions.registerApp == true)
{ {
if (PathFileExists(windowsTerminalDir)) RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);
{ RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle); RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_BACKGROUND, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle); RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_LISTITEM, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_BACKGROUND, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_LISTITEM, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);
}
else
{
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND, cmderOptions.cmderCfgRoot, false);
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM, cmderOptions.cmderCfgRoot, false);
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_BACKGROUND, cmderOptions.cmderCfgRoot, false);
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_LISTITEM, cmderOptions.cmderCfgRoot, false);
}
} }
else if (cmderOptions.unRegisterApp == true) else if (cmderOptions.unRegisterApp == true)
{ {
@@ -1017,8 +776,8 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
} }
else else
{ {
StartCmder(cmderOptions.cmderStart, cmderOptions.cmderSingle, cmderOptions.cmderTask, cmderOptions.cmderTitle, cmderOptions.cmderIcon, cmderOptions.cmderCfgRoot, cmderOptions.cmderUserCfg, cmderOptions.cmderTerminalArgs); StartCmder(cmderOptions.cmderStart, cmderOptions.cmderSingle, cmderOptions.cmderTask, cmderOptions.cmderTitle, cmderOptions.cmderIcon, cmderOptions.cmderCfgRoot, cmderOptions.cmderUserCfg, cmderOptions.cmderConEmuArgs);
} }
return 0; return 0;
} }

View File

@@ -35,19 +35,19 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
1 TEXTINCLUDE 1 TEXTINCLUDE
BEGIN BEGIN
"resource.h\0" "resource.h\0"
END END
2 TEXTINCLUDE 2 TEXTINCLUDE
BEGIN BEGIN
"#include ""winres.h""\r\n" "#include ""winres.h""\r\n"
"\0" "\0"
END END
3 TEXTINCLUDE 3 TEXTINCLUDE
BEGIN BEGIN
"\r\n" "\r\n"
"\0" "\0"
END END
#endif // APSTUDIO_INVOKED #endif // APSTUDIO_INVOKED
@@ -60,7 +60,7 @@ END
// Icon with lowest ID value placed first to ensure application icon // Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems. // remains consistent on all systems.
IDI_CMDER ICON "..\\..\\icons\\cmder.ico" IDI_CMDER ICON "..\\..\\icons\\cmder.ico"
#endif // not APSTUDIO_INVOKED #endif // English (United States) resources
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View File

@@ -6,7 +6,7 @@ STRINGTABLE
{ {
IDS_TITLE "Cmder Launcher" IDS_TITLE "Cmder Launcher"
IDS_SWITCHES L"Valid options:\n\n /c [CMDER User Root Path]\n /task [Windows Terminal Profile/ConEmu Task Name]\n /icon [CMDER Icon Path] - ConEmu ONLY!\n [/start [Start in Path] | [Start in Path]]\n /single - ConEmu ONLY!\n /m\n -- [ConEmu/Windows Terminal extra arguments]\n\nNote: '-- [...]' must be the last argument!\n\nor, either:\n /register [USER | ALL]\n /unregister [USER | ALL]" IDS_SWITCHES L"Valid options:\n\n /c [CMDER User Root Path]\n /task [ConEmu Task Name]\n /icon [CMDER Icon Path]\n [/start [Start in Path] | [Start in Path]]\n /single\n /m\n /x [ConEmu extra arguments]\n\nor, either:\n /register [USER | ALL]\n /unregister [USER | ALL]"
} }
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View File

@@ -23,6 +23,5 @@ appveyor.yml
vendor\cmder.sh vendor\cmder.sh
vendor\git-prompt.sh vendor\git-prompt.sh
config\user-* config\user-*
config\user_*
clink_history* clink_history*
*.log *.log

View File

@@ -56,14 +56,11 @@ Param(
# Using this option will skip all downloads, if you only need to build launcher # Using this option will skip all downloads, if you only need to build launcher
[switch]$noVendor, [switch]$noVendor,
# Using this option will specify the emulator to use [none, all, conemu-maximus5, or windows-terminal]
[string]$terminal = 'all',
# Build launcher if you have MSBuild tools installed # Build launcher if you have MSBuild tools installed
[switch]$Compile [switch]$Compile
) )
# Get the scripts and cmder root dirs we are building in. # Get the scripts and Cmder root dirs we are building in.
$cmder_root = Resolve-Path "$PSScriptRoot\.." $cmder_root = Resolve-Path "$PSScriptRoot\.."
# Dot source util functions into this scope # Dot source util functions into this scope
@@ -116,36 +113,15 @@ if (-not $noVendor) {
} }
else { $ConEmuXml = "" } else { $ConEmuXml = "" }
# Preserve modified (by user) Windows Terminal setting file
if ($config -ne "") {
$WinTermSettingsJson = Join-Path $saveTo "windows-terminal\settings\settings.json"
if (Test-Path $WinTermSettingsJson -pathType leaf) {
$WinTermSettingsJsonSave = Join-Path $config "windows_terminal_settings.json"
Write-Verbose "Backup '$WinTermSettingsJson' to '$WinTermSettingsJsonSave'"
Copy-Item $WinTermSettingsJson $WinTermSettingsJsonSave
}
else { $WinTermSettingsJson = "" }
}
else { $WinTermSettingsJson = "" }
# Kill ssh-agent.exe if it is running from the $env:cmder_root we are building # Kill ssh-agent.exe if it is running from the $env:cmder_root we are building
$cmder_folder = $cmder_root.toString()
foreach ($ssh_agent in $(Get-Process ssh-agent -ErrorAction SilentlyContinue)) { foreach ($ssh_agent in $(Get-Process ssh-agent -ErrorAction SilentlyContinue)) {
if ([string]$($ssh_agent.path) -Match $cmder_folder.Replace('\', '\\')) { if ([string]$($ssh_agent.path) -Match [string]$cmder_root.replace('\', '\\')) {
Write-Verbose $("Stopping " + $ssh_agent.path + "!") Write-Verbose $("Stopping " + $ssh_agent.path + "!")
Stop-Process $ssh_agent.id Stop-Process $ssh_agent.id
} }
} }
foreach ($s in $sources) { foreach ($s in $sources) {
if ($terminal -eq "none") {
continue
} elseif ($s.name -eq "conemu-maximus5" -and $terminal -eq "windows-terminal") {
continue
} elseif ($s.name -eq "windows-terminal" -and $terminal -eq "conemu-maximus5") {
continue
}
Write-Verbose "Getting vendored $($s.name) $($s.version)..." Write-Verbose "Getting vendored $($s.name) $($s.version)..."
# We do not care about the extensions/type of archive # We do not care about the extensions/type of archive
@@ -156,16 +132,6 @@ if (-not $noVendor) {
Download-File -Url $s.url -File $vend\$tempArchive -ErrorAction Stop Download-File -Url $s.url -File $vend\$tempArchive -ErrorAction Stop
Extract-Archive $tempArchive $s.name Extract-Archive $tempArchive $s.name
# Make Embedded Windows Terminal Portable
if ($s.name -eq "windows-terminal") {
$windowTerminalFiles = resolve-path ($saveTo + "\" + $s.name + "\terminal*")
Move-Item -ErrorAction SilentlyContinue $windowTerminalFiles\* $s.name >$null
Remove-Item -ErrorAction SilentlyContinue $windowTerminalFiles >$null
Write-Verbose "Making Windows Terminal Portable..."
New-Item -Type Directory -Path (Join-Path $saveTo "/windows-terminal/settings") -ErrorAction SilentlyContinue >$null
New-Item -Type File -Path (Join-Path $saveTo "/windows-terminal/.portable") -ErrorAction SilentlyContinue >$null
}
if ((Get-ChildItem $s.name).Count -eq 1) { if ((Get-ChildItem $s.name).Count -eq 1) {
Flatten-Directory($s.name) Flatten-Directory($s.name)
} }
@@ -180,12 +146,6 @@ if (-not $noVendor) {
Copy-Item $ConEmuXmlSave $ConEmuXml Copy-Item $ConEmuXmlSave $ConEmuXml
} }
# Restore Windows Terminal user configuration
if ($WinTermSettingsJson -ne "") {
Write-Verbose "Restore '$WinTermSettingsJsonSave' to '$WinTermSettingsJson'"
Copy-Item $WinTermSettingsJsonSave $WinTermSettingsJson
}
# Put vendor\cmder.sh in /etc/profile.d so it runs when we start bash or mintty # Put vendor\cmder.sh in /etc/profile.d so it runs when we start bash or mintty
if ( (Test-Path $($saveTo + "git-for-windows/etc/profile.d") ) ) { if ( (Test-Path $($saveTo + "git-for-windows/etc/profile.d") ) ) {
Write-Verbose "Adding cmder.sh /etc/profile.d" Write-Verbose "Adding cmder.sh /etc/profile.d"

View File

@@ -31,9 +31,6 @@ Param(
# Path to the vendor configuration source file # Path to the vendor configuration source file
[string]$cmderRoot = "$PSScriptRoot\..", [string]$cmderRoot = "$PSScriptRoot\..",
# Using this option will pack artifacts for a specific included terminal emulator [none, all, conemu-maximus5, or windows-terminal]
[string]$terminal = 'all',
# Vendor folder locaton # Vendor folder locaton
[string]$saveTo = "$PSScriptRoot\..\build" [string]$saveTo = "$PSScriptRoot\..\build"
) )
@@ -44,36 +41,10 @@ $cmderRoot = Resolve-Path $cmderRoot
$ErrorActionPreference = "Stop" $ErrorActionPreference = "Stop"
Ensure-Executable "7z" Ensure-Executable "7z"
if ($terminal -eq "none") { $targets = @{
$targets = @{ "cmder.7z" = "-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -myx=7 -mqs=on";
"cmder_win.7z" = "-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -myx=7 -mqs=on -xr!`"vendor\conemu-maximus5`" -xr!`"vendor\windows-terminal`""; "cmder.zip" = "-mm=Deflate -mfb=128 -mpass=3";
"cmder_win.zip" = "-mm=Deflate -mfb=128 -mpass=3 -xr!`"vendor\conemu-maximus5`" -xr!`"vendor\windows-terminal`""; "cmder_mini.zip" = "-xr!`"vendor\git-for-windows`"";
"cmder_win.mini.zip" = "-xr!`"vendor\git-for-windows`" -xr!`"vendor\conemu-maximus5`" -xr!`"vendor\windows-terminal`"";
}
} elseif ($terminal -eq "windows-terminal") {
$targets = @{
"cmder_wt.7z" = "-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -myx=7 -mqs=on -xr!`"vendor\conemu-maximus5`"";
"cmder_wt.zip" = "-mm=Deflate -mfb=128 -mpass=3 -xr!`"vendor\conemu-maximus5`"";
"cmder_wt_mini.zip" = "-xr!`"vendor\git-for-windows`" -xr!`"vendor\conemu-maximus5`"";
}
} elseif ($terminal -eq "windows-terminal") {
$targets = @{
"cmder.7z" = "-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -myx=7 -mqs=on -xr!`"vendor\windows-terminal`"";
"cmder.zip" = "-mm=Deflate -mfb=128 -mpass=3 -xr!`"vendor\windows-terminal`"";
"cmder_mini.zip" = "-xr!`"vendor\git-for-windows`" -xr!`"vendor\windows-terminal`"";
}
} else {
$targets = @{
"cmder_win.7z" = "-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -myx=7 -mqs=on -xr!`"vendor\conemu-maximus5`" -xr!`"vendor\windows-terminal`"";
"cmder_win.zip" = "-mm=Deflate -mfb=128 -mpass=3 -xr!`"vendor\conemu-maximus5`" -xr!`"vendor\windows-terminal`"";
"cmder_win_mini.zip" = "-xr!`"vendor\git-for-windows`" -xr!`"vendor\conemu-maximus5`" -xr!`"vendor\windows-terminal`"";
"cmder_wt.7z" = "-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -myx=7 -mqs=on -xr!`"vendor\conemu-maximus5`"";
"cmder_wt.zip" = "-mm=Deflate -mfb=128 -mpass=3 -xr!`"vendor\conemu-maximus5`"";
"cmder_wt_mini.zip" = "-xr!`"vendor\git-for-windows`" -xr!`"vendor\conemu-maximus5`"";
"cmder.7z" = "-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -myx=7 -mqs=on -xr!`"vendor\windows-terminal`"";
"cmder.zip" = "-mm=Deflate -mfb=128 -mpass=3 -xr!`"vendor\windows-terminal`"";
"cmder_mini.zip" = "-xr!`"vendor\git-for-windows`" -xr!`"vendor\windows-terminal`"";
}
} }
Push-Location -Path $cmderRoot Push-Location -Path $cmderRoot

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<key name="Software"> <key name="Software">
<key name="ConEmu"> <key name="ConEmu">
<key name=".Vanilla" modified="2023-06-05 13:14:44" build="221218"> <key name=".Vanilla" modified="2018-02-22 06:02:11" build="171109">
<value name="ColorTable00" type="dword" data="00222827"/> <value name="ColorTable00" type="dword" data="00222827"/>
<value name="ColorTable01" type="dword" data="009e5401"/> <value name="ColorTable01" type="dword" data="009e5401"/>
<value name="ColorTable02" type="dword" data="0004aa74"/> <value name="ColorTable02" type="dword" data="0004aa74"/>
@@ -42,8 +42,8 @@
<value name="PopBackColorIdx" type="hex" data="10"/> <value name="PopBackColorIdx" type="hex" data="10"/>
<value name="ExtendFonts" type="hex" data="00"/> <value name="ExtendFonts" type="hex" data="00"/>
<value name="ExtendFontNormalIdx" type="hex" data="01"/> <value name="ExtendFontNormalIdx" type="hex" data="01"/>
<value name="ExtendFontBoldIdx" type="hex" data="0C"/> <value name="ExtendFontBoldIdx" type="hex" data="0c"/>
<value name="ExtendFontItalicIdx" type="hex" data="0D"/> <value name="ExtendFontItalicIdx" type="hex" data="0d"/>
<value name="CursorTypeActive" type="dword" data="000232c1"/> <value name="CursorTypeActive" type="dword" data="000232c1"/>
<value name="CursorTypeInactive" type="dword" data="00823282"/> <value name="CursorTypeInactive" type="dword" data="00823282"/>
<value name="ClipboardDetectLineEnd" type="hex" data="01"/> <value name="ClipboardDetectLineEnd" type="hex" data="01"/>
@@ -58,7 +58,7 @@
<value name="TrueColorerSupport" type="hex" data="01"/> <value name="TrueColorerSupport" type="hex" data="01"/>
<value name="FadeInactive" type="hex" data="01"/> <value name="FadeInactive" type="hex" data="01"/>
<value name="FadeInactiveLow" type="hex" data="00"/> <value name="FadeInactiveLow" type="hex" data="00"/>
<value name="FadeInactiveHigh" type="hex" data="C8"/> <value name="FadeInactiveHigh" type="hex" data="c8"/>
<value name="ComSpec.UncPaths" type="hex" data="01"/> <value name="ComSpec.UncPaths" type="hex" data="01"/>
<value name="ConVisible" type="hex" data="00"/> <value name="ConVisible" type="hex" data="00"/>
<value name="ConInMode" type="dword" data="ffffffff"/> <value name="ConInMode" type="dword" data="ffffffff"/>
@@ -78,6 +78,7 @@
<value name="StartFarEditors" type="hex" data="00"/> <value name="StartFarEditors" type="hex" data="00"/>
<value name="StoreTaskbarkTasks" type="hex" data="00"/> <value name="StoreTaskbarkTasks" type="hex" data="00"/>
<value name="StoreTaskbarCommands" type="hex" data="00"/> <value name="StoreTaskbarCommands" type="hex" data="00"/>
<value name="CmdLineHistory" type="multi"></value>
<value name="SingleInstance" type="hex" data="00"/> <value name="SingleInstance" type="hex" data="00"/>
<value name="ShowHelpTooltips" type="hex" data="01"/> <value name="ShowHelpTooltips" type="hex" data="01"/>
<value name="Multi" type="hex" data="01"/> <value name="Multi" type="hex" data="01"/>
@@ -112,13 +113,13 @@
<value name="Monospace" type="hex" data="01"/> <value name="Monospace" type="hex" data="01"/>
<value name="BackGround Image show" type="hex" data="00"/> <value name="BackGround Image show" type="hex" data="00"/>
<value name="BackGround Image" type="string" data="c:\back.bmp"/> <value name="BackGround Image" type="string" data="c:\back.bmp"/>
<value name="bgImageDarker" type="hex" data="FF"/> <value name="bgImageDarker" type="hex" data="ff"/>
<value name="bgImageColors" type="dword" data="ffffffff"/> <value name="bgImageColors" type="dword" data="ffffffff"/>
<value name="bgOperation" type="hex" data="00"/> <value name="bgOperation" type="hex" data="00"/>
<value name="bgPluginAllowed" type="hex" data="01"/> <value name="bgPluginAllowed" type="hex" data="01"/>
<value name="AlphaValue" type="hex" data="F8"/> <value name="AlphaValue" type="hex" data="f8"/>
<value name="AlphaValueSeparate" type="hex" data="01"/> <value name="AlphaValueSeparate" type="hex" data="01"/>
<value name="AlphaValueInactive" type="hex" data="EE"/> <value name="AlphaValueInactive" type="hex" data="ee"/>
<value name="UserScreenTransparent" type="hex" data="00"/> <value name="UserScreenTransparent" type="hex" data="00"/>
<value name="ColorKeyTransparent" type="hex" data="00"/> <value name="ColorKeyTransparent" type="hex" data="00"/>
<value name="ColorKeyValue" type="dword" data="00010101"/> <value name="ColorKeyValue" type="dword" data="00010101"/>
@@ -127,8 +128,8 @@
<value name="ConWnd Width" type="dword" data="00000078"/> <value name="ConWnd Width" type="dword" data="00000078"/>
<value name="ConWnd Height" type="dword" data="0000001e"/> <value name="ConWnd Height" type="dword" data="0000001e"/>
<value name="Cascaded" type="hex" data="01"/> <value name="Cascaded" type="hex" data="01"/>
<value name="ConWnd X" type="long" data="2194"/> <value name="ConWnd X" type="long" data="500"/>
<value name="ConWnd Y" type="long" data="95"/> <value name="ConWnd Y" type="long" data="500"/>
<value name="16bit Height" type="ulong" data="0"/> <value name="16bit Height" type="ulong" data="0"/>
<value name="AutoSaveSizePos" type="hex" data="01"/> <value name="AutoSaveSizePos" type="hex" data="01"/>
<value name="IntegralSize" type="hex" data="00"/> <value name="IntegralSize" type="hex" data="00"/>
@@ -165,19 +166,19 @@
<value name="CTS.ActMode" type="hex" data="02"/> <value name="CTS.ActMode" type="hex" data="02"/>
<value name="CTS.RBtnAction" type="hex" data="03"/> <value name="CTS.RBtnAction" type="hex" data="03"/>
<value name="CTS.MBtnAction" type="hex" data="00"/> <value name="CTS.MBtnAction" type="hex" data="00"/>
<value name="CTS.ColorIndex" type="hex" data="E0"/> <value name="CTS.ColorIndex" type="hex" data="e0"/>
<value name="ClipboardConfirmEnter" type="hex" data="01"/> <value name="ClipboardConfirmEnter" type="hex" data="01"/>
<value name="ClipboardConfirmLonger" type="ulong" data="200"/> <value name="ClipboardConfirmLonger" type="ulong" data="200"/>
<value name="FarGotoEditorOpt" type="hex" data="01"/> <value name="FarGotoEditorOpt" type="hex" data="01"/>
<value name="FarGotoEditorPath" type="string" data='far.exe /e%1:%2 "%3"'/> <value name="FarGotoEditorPath" type="string" data="far.exe /e%1:%2 &quot;%3&quot;"/>
<value name="FixFarBorders" type="hex" data="01"/> <value name="FixFarBorders" type="hex" data="01"/>
<value name="FixFarBordersRanges" type="string" data="2013-25C4;"/> <value name="FixFarBordersRanges" type="string" data="2013-25C4;"/>
<value name="ExtendUCharMap" type="hex" data="01"/> <value name="ExtendUCharMap" type="hex" data="01"/>
<value name="EnhanceGraphics" type="hex" data="01"/> <value name="EnhanceGraphics" type="hex" data="01"/>
<value name="EnhanceButtons" type="hex" data="00"/> <value name="EnhanceButtons" type="hex" data="00"/>
<value name="PartBrush75" type="hex" data="C8"/> <value name="PartBrush75" type="hex" data="c8"/>
<value name="PartBrush50" type="hex" data="96"/> <value name="PartBrush50" type="hex" data="96"/>
<value name="PartBrush25" type="hex" data="5A"/> <value name="PartBrush25" type="hex" data="5a"/>
<value name="PartBrushBlack" type="hex" data="20"/> <value name="PartBrushBlack" type="hex" data="20"/>
<value name="RightClick opens context menu" type="hex" data="02"/> <value name="RightClick opens context menu" type="hex" data="02"/>
<value name="RightClickMacro2" type="string" data=""/> <value name="RightClickMacro2" type="string" data=""/>
@@ -412,15 +413,15 @@
<value name="Key.TileToLeft" type="dword" data="80808000"/> <value name="Key.TileToLeft" type="dword" data="80808000"/>
<value name="Key.TileToRIght" type="dword" data="80808000"/> <value name="Key.TileToRIght" type="dword" data="80808000"/>
<value name="KeyMacro01" type="dword" data="0012a031"/> <value name="KeyMacro01" type="dword" data="0012a031"/>
<value name="KeyMacro01.Text" type="string" data='Task("cmd")'/> <value name="KeyMacro01.Text" type="string" data="Task(&quot;cmd&quot;)"/>
<value name="KeyMacro02" type="dword" data="0012a032"/> <value name="KeyMacro02" type="dword" data="0012a032"/>
<value name="KeyMacro02.Text" type="string" data='Task("PowerShell")'/> <value name="KeyMacro02.Text" type="string" data="Task(&quot;PowerShell&quot;)"/>
<value name="KeyMacro03" type="dword" data="000011d0"/> <value name="KeyMacro03" type="dword" data="000011d0"/>
<value name="KeyMacro03.Text" type="string" data="FontSetSize(1,2)"/> <value name="KeyMacro03.Text" type="string" data="FontSetSize(1,2)"/>
<value name="KeyMacro04" type="dword" data="000011d1"/> <value name="KeyMacro04" type="dword" data="000011d1"/>
<value name="KeyMacro04.Text" type="string" data="FontSetSize(1,-2)"/> <value name="KeyMacro04.Text" type="string" data="FontSetSize(1,-2)"/>
<value name="KeyMacro05" type="dword" data="0012a033"/> <value name="KeyMacro05" type="dword" data="0012a033"/>
<value name="KeyMacro05.Text" type="string" data='Task("PowerShell as Admin")'/> <value name="KeyMacro05.Text" type="string" data="Task(&quot;PowerShell as Admin&quot;)"/>
<value name="KeyMacro06" type="dword" data="00000000"/> <value name="KeyMacro06" type="dword" data="00000000"/>
<value name="KeyMacro06.Text" type="string" data=""/> <value name="KeyMacro06.Text" type="string" data=""/>
<value name="KeyMacro07" type="dword" data="00000000"/> <value name="KeyMacro07" type="dword" data="00000000"/>
@@ -483,12 +484,12 @@
<value name="DndLKey" type="hex" data="00"/> <value name="DndLKey" type="hex" data="00"/>
<value name="DndRKey" type="hex" data="a2"/> <value name="DndRKey" type="hex" data="a2"/>
<value name="WndDragKey" type="dword" data="00121101"/> <value name="WndDragKey" type="dword" data="00121101"/>
<key name="Tasks" modified="2023-06-05 13:14:44" build="221218"> <key name="Tasks" modified="2018-02-22 06:02:12" build="171109">
<value name="Count" type="long" data="11"/> <value name="Count" type="long" data="9"/>
<key name="Task1" modified="2018-02-22 06:02:12" build="171109"> <key name="Task1" modified="2018-02-22 06:02:12" build="171109">
<value name="Name" type="string" data="{cmd::Cmder as Admin}"/> <value name="Name" type="string" data="{cmd::Cmder as Admin}"/>
<value name="GuiArgs" type="string" data=' /icon "%CMDER_ROOT%\icons\cmder.ico"'/> <value name="GuiArgs" type="string" data=" /icon &quot;%CMDER_ROOT%\icons\cmder.ico&quot;"/>
<value name="Cmd1" type="string" data='*cmd /k ""%ConEmuDir%\..\init.bat" "'/> <value name="Cmd1" type="string" data="*cmd /k &quot;&quot;%ConEmuDir%\..\init.bat&quot; &quot;"/>
<value name="Active" type="long" data="0"/> <value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/> <value name="Count" type="long" data="1"/>
<value name="Hotkey" type="dword" data="00000000"/> <value name="Hotkey" type="dword" data="00000000"/>
@@ -496,8 +497,8 @@
</key> </key>
<key name="Task2" modified="2018-02-22 06:05:13" build="171109"> <key name="Task2" modified="2018-02-22 06:05:13" build="171109">
<value name="Name" type="string" data="{cmd::Cmder}"/> <value name="Name" type="string" data="{cmd::Cmder}"/>
<value name="GuiArgs" type="string" data=' /icon "%CMDER_ROOT%\icons\cmder.ico"'/> <value name="GuiArgs" type="string" data=" /icon &quot;%CMDER_ROOT%\icons\cmder.ico&quot;"/>
<value name="Cmd1" type="string" data='cmd /k ""%ConEmuDir%\..\init.bat" "'/> <value name="Cmd1" type="string" data="cmd /k &quot;&quot;%ConEmuDir%\..\init.bat&quot; &quot;"/>
<value name="Active" type="long" data="0"/> <value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/> <value name="Count" type="long" data="1"/>
<value name="Hotkey" type="dword" data="00000000"/> <value name="Hotkey" type="dword" data="00000000"/>
@@ -506,8 +507,8 @@
<key name="Task3" modified="2018-02-22 06:05:13" build="171109"> <key name="Task3" modified="2018-02-22 06:05:13" build="171109">
<value name="Name" type="string" data="{PowerShell::PowerShell as Admin}"/> <value name="Name" type="string" data="{PowerShell::PowerShell as Admin}"/>
<value name="Hotkey" type="dword" data="00000000"/> <value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data=' /icon "%CMDER_ROOT%\icons\cmder.ico"'/> <value name="GuiArgs" type="string" data=" /icon &quot;%CMDER_ROOT%\icons\cmder.ico&quot;"/>
<value name="Cmd1" type="string" data='*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression &apos;Import-Module &apos;&apos;%ConEmuDir%\..\profile.ps1&apos;&apos;&apos;"'/> <value name="Cmd1" type="string" data="*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command &quot;Invoke-Expression 'Import-Module ''%ConEmuDir%\..\profile.ps1'''&quot;"/>
<value name="Active" type="long" data="0"/> <value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/> <value name="Count" type="long" data="1"/>
<value name="Flags" type="dword" data="00000000"/> <value name="Flags" type="dword" data="00000000"/>
@@ -515,78 +516,61 @@
<key name="Task4" modified="2018-02-22 06:05:13" build="171109"> <key name="Task4" modified="2018-02-22 06:05:13" build="171109">
<value name="Name" type="string" data="{PowerShell::PowerShell}"/> <value name="Name" type="string" data="{PowerShell::PowerShell}"/>
<value name="Hotkey" type="dword" data="00000000"/> <value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data=' /icon "%CMDER_ROOT%\icons\cmder.ico"'/> <value name="GuiArgs" type="string" data=" /icon &quot;%CMDER_ROOT%\icons\cmder.ico&quot;"/>
<value name="Cmd1" type="string" data='PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression &apos;Import-Module &apos;&apos;%ConEmuDir%\..\profile.ps1&apos;&apos;&apos;"'/> <value name="Cmd1" type="string" data="PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command &quot;Invoke-Expression 'Import-Module ''%ConEmuDir%\..\profile.ps1'''&quot;"/>
<value name="Cmd2" type="string" data='"%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe"'/> <value name="Cmd2" type="string" data="&quot;%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe&quot;"/>
<value name="Active" type="long" data="0"/> <value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/> <value name="Count" type="long" data="1"/>
<value name="Flags" type="dword" data="00000000"/> <value name="Flags" type="dword" data="00000000"/>
</key> </key>
<key name="Task5" modified="2023-06-05 13:15:18" build="221218"> <key name="Task5" modified="2018-02-22 06:05:13" build="171109">
<value name="Name" type="string" data="{bash::mintty as Admin - External}"/>
<value name="Flags" type="dword" data="00000004"/>
<value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data='/icon "%ProgramFiles%\git\usr\share\git\git-for-windows.ico"'/>
<value name="Cmd1" type="string" data='*"%ProgramFiles%\git\usr\bin\mintty.exe" /bin/bash -l'/>
<value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/>
</key>
<key name="Task6" modified="2023-06-05 13:15:38" build="221218">
<value name="Name" type="string" data="{bash::mintty - External}"/>
<value name="Flags" type="dword" data="00000004"/>
<value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data='/icon "%ProgramFiles%\git\usr\share\git\git-for-windows.ico"'/>
<value name="Cmd1" type="string" data='"%ProgramFiles%\git\usr\bin\mintty.exe" /bin/bash -l'/>
<value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/>
<value name="Cmd2" type="string" data='"%CMDER_ROOT%vendor\git-for-windows\usr\bin\mintty.exe" /bin/bash -l'/>
</key>
<key name="Task7" modified="2023-06-05 13:15:38" build="221218">
<value name="Name" type="string" data="{bash::mintty as Admin}"/> <value name="Name" type="string" data="{bash::mintty as Admin}"/>
<value name="Flags" type="dword" data="00000000"/> <value name="Flags" type="dword" data="00000000"/>
<value name="Hotkey" type="dword" data="00000000"/> <value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data='/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico"'/> <value name="GuiArgs" type="string" data="/icon &quot;%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico&quot;"/>
<value name="Cmd1" type="string" data="*&quot;%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe&quot; /bin/bash -l"/>
<value name="Active" type="long" data="0"/> <value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/> <value name="Count" type="long" data="1"/>
<value name="Cmd1" type="string" data='*"%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe" /bin/bash -l'/>
</key> </key>
<key name="Task8" modified="2023-06-05 13:15:18" build="221218"> <key name="Task6" modified="2018-02-22 06:05:13" build="171109">
<value name="Name" type="string" data="{bash::mintty}"/> <value name="Name" type="string" data="{bash::mintty}"/>
<value name="Flags" type="dword" data="00000000"/> <value name="Flags" type="dword" data="00000000"/>
<value name="Hotkey" type="dword" data="00000000"/> <value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data='/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico"'/> <value name="GuiArgs" type="string" data="/icon &quot;%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico&quot;"/>
<value name="Cmd1" type="string" data='"%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe" /bin/bash -l'/> <value name="Cmd1" type="string" data="&quot;%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe&quot; /bin/bash -l"/>
<value name="Active" type="long" data="0"/> <value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/> <value name="Count" type="long" data="1"/>
<value name="Cmd2" type="string" data="&quot;%CMDER_ROOT%vendor\git-for-windows\usr\bin\mintty.exe&quot; /bin/bash -l"/>
</key> </key>
<key name="Task9" modified="2023-06-05 13:14:44" build="221218"> <key name="Task7" modified="2018-02-22 06:05:13" build="171109">
<value name="Name" type="string" data="{bash::bash as Admin}"/> <value name="Name" type="string" data="{bash::bash as Admin}"/>
<value name="Flags" type="dword" data="00000000"/> <value name="Flags" type="dword" data="00000000"/>
<value name="Hotkey" type="dword" data="00000000"/> <value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data=' /icon "%CMDER_ROOT%\icons\cmder.ico"'/> <value name="GuiArgs" type="string" data=" /icon &quot;%CMDER_ROOT%\icons\cmder.ico&quot;"/>
<value name="Cmd1" type="string" data='*cmd /c "%ConEmuDir%\..\start_git_bash.cmd"'/>
<value name="Active" type="long" data="0"/> <value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/> <value name="Count" type="long" data="1"/>
<value name="Cmd1" type="string" data="*set &quot;PATH=%ConEmuDir%\..\git-for-windows\usr\bin;%PATH%&quot; &amp; %ConEmuDir%\..\git-for-windows\git-cmd.exe --no-cd --command=%ConEmuBaseDirShort%\conemu-msys2-64.exe &quot;%ConEmuDir%\..\git-for-windows\usr\bin\bash.exe&quot; --login -i"/>
</key> </key>
<key name="Task10" modified="2023-06-05 13:14:44" build="221218"> <key name="Task8" modified="2018-02-22 06:05:13" build="171109">
<value name="Name" type="string" data="{bash::bash}"/> <value name="Name" type="string" data="{bash::bash}"/>
<value name="Flags" type="dword" data="00000000"/> <value name="Flags" type="dword" data="00000000"/>
<value name="Hotkey" type="dword" data="00000000"/> <value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data=' /icon "%CMDER_ROOT%\icons\cmder.ico"'/> <value name="GuiArgs" type="string" data=" /icon &quot;%CMDER_ROOT%\icons\cmder.ico&quot;"/>
<value name="Cmd1" type="string" data="set &quot;PATH=%ConEmuDir%\..\git-for-windows\usr\bin;%PATH%&quot; &amp; %ConEmuDir%\..\git-for-windows\git-cmd.exe --no-cd --command=%ConEmuBaseDirShort%\conemu-msys2-64.exe &quot;%ConEmuDir%\..\git-for-windows\usr\bin\bash.exe&quot; --login -i"/>
<value name="Active" type="long" data="0"/> <value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/> <value name="Count" type="long" data="1"/>
<value name="Cmd1" type="string" data='cmd /c "%ConEmuDir%\..\start_git_bash.cmd"'/>
</key> </key>
<key name="Task11" modified="2023-06-05 13:14:44" build="221218"> <key name="Task9" modified="2018-03-23 23:26:53" build="180318">
<value name="Name" type="string" data="{WSL::bash}"/> <value name="Name" type="string" data="{WSL::bash}"/>
<value name="Flags" type="dword" data="00000000"/> <value name="Flags" type="dword" data="00000000"/>
<value name="Hotkey" type="dword" data="00000000"/> <value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data='-icon "%USERPROFILE%\AppData\Local\lxss\bash.ico"'/> <value name="GuiArgs" type="string" data='-icon "%USERPROFILE%\AppData\Local\lxss\bash.ico"'/>
<value name="Cmd1" type="string" data='set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" &amp; %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -cur_console:pm:/mnt'/>
<value name="Active" type="long" data="0"/> <value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/> <value name="Count" type="long" data="1"/>
<value name="Cmd1" type="string" data='set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" &amp; %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -cur_console:pm:/mnt'/>
</key> </key>
</key> </key>
<key name="Apps" modified="2018-02-22 06:05:13" build="171109"> <key name="Apps" modified="2018-02-22 06:05:13" build="171109">
<value name="Count" type="long" data="0"/> <value name="Count" type="long" data="0"/>
</key> </key>
@@ -692,7 +676,7 @@
<value name="StatusBar.Hide.Dpi" type="hex" data="01"/> <value name="StatusBar.Hide.Dpi" type="hex" data="01"/>
<value name="TabFlashChanged" type="long" data="8"/> <value name="TabFlashChanged" type="long" data="8"/>
<value name="TabModifiedSuffix" type="string" data="[*]"/> <value name="TabModifiedSuffix" type="string" data="[*]"/>
<key name="HotKeys" modified="2023-06-05 13:14:44" build="221218"> <key name="HotKeys" modified="2018-02-22 06:02:12" build="171109">
<value name="KeyMacroVersion" type="hex" data="02"/> <value name="KeyMacroVersion" type="hex" data="02"/>
<value name="Multi.Modifier" type="dword" data="00000011"/> <value name="Multi.Modifier" type="dword" data="00000011"/>
<value name="Multi.ArrowsModifier" type="dword" data="0000005b"/> <value name="Multi.ArrowsModifier" type="dword" data="0000005b"/>
@@ -861,13 +845,13 @@
<value name="KeyMacro31.Text" type="string" data=""/> <value name="KeyMacro31.Text" type="string" data=""/>
<value name="KeyMacro32" type="dword" data="00000000"/> <value name="KeyMacro32" type="dword" data="00000000"/>
<value name="KeyMacro32.Text" type="string" data=""/> <value name="KeyMacro32.Text" type="string" data=""/>
<value name="CTS.VkBlock" type="hex" data="A4"/> <value name="CTS.VkBlock" type="hex" data="a4"/>
<value name="CTS.VkText" type="hex" data="A0"/> <value name="CTS.VkText" type="hex" data="a0"/>
<value name="CTS.VkAct" type="hex" data="00"/> <value name="CTS.VkAct" type="hex" data="00"/>
<value name="CTS.VkPrompt" type="hex" data="00"/> <value name="CTS.VkPrompt" type="hex" data="00"/>
<value name="FarGotoEditorVk" type="hex" data="A2"/> <value name="FarGotoEditorVk" type="hex" data="a2"/>
<value name="DndLKey" type="hex" data="00"/> <value name="DndLKey" type="hex" data="00"/>
<value name="DndRKey" type="hex" data="A2"/> <value name="DndRKey" type="hex" data="a2"/>
<value name="WndDragKey" type="dword" data="00121101"/> <value name="WndDragKey" type="dword" data="00121101"/>
<value name="Multi.Unfasten" type="dword" data="00000000"/> <value name="Multi.Unfasten" type="dword" data="00000000"/>
<value name="Key.DebugProcess" type="dword" data="00105b44"/> <value name="Key.DebugProcess" type="dword" data="00105b44"/>
@@ -885,16 +869,10 @@
<value name="Key.BufPrUp" type="dword" data="00121121"/> <value name="Key.BufPrUp" type="dword" data="00121121"/>
<value name="Key.BufPrDn" type="dword" data="00121122"/> <value name="Key.BufPrDn" type="dword" data="00121122"/>
<value name="Key.ResetTerm" type="dword" data="00000000"/> <value name="Key.ResetTerm" type="dword" data="00000000"/>
<value name="SetFocusParent" type="dword" data="0000a01b"/>
<value name="CheckUpdates" type="dword" data="00105b55"/>
<value name="Multi.NewWndConfirm" type="dword" data="00000000"/>
<value name="CloseToRightKey" type="dword" data="00000000"/>
<value name="Key.EditMenu" type="dword" data="00000000"/>
<value name="Key.EditMenu2" type="dword" data="00000000"/>
</key> </key>
<value name="StartCreateDelay" type="ulong" data="100"/> <value name="StartCreateDelay" type="ulong" data="100"/>
<value name="DefaultTerminalDebugLog" type="hex" data="00"/> <value name="DefaultTerminalDebugLog" type="hex" data="00"/>
<value name="LastMonitor" type="string" data="1680,0,3600,1050"/> <value name="LastMonitor" type="string" data="0,0,1440,1050"/>
<value name="Restore2ActiveMon" type="hex" data="00"/> <value name="Restore2ActiveMon" type="hex" data="00"/>
<value name="DownShowExOnTopMessage" type="hex" data="00"/> <value name="DownShowExOnTopMessage" type="hex" data="00"/>
<value name="EnvironmentSet" type="multi"> <value name="EnvironmentSet" type="multi">
@@ -924,15 +902,6 @@
<value name="StatusBar.Hide.TMode" type="hex" data="01"/> <value name="StatusBar.Hide.TMode" type="hex" data="01"/>
<value name="StatusBar.Hide.RMode" type="hex" data="01"/> <value name="StatusBar.Hide.RMode" type="hex" data="01"/>
<value name="StatusBar.Hide.CellI" type="hex" data="01"/> <value name="StatusBar.Hide.CellI" type="hex" data="01"/>
<value name="Language" type="string" data="en"/>
<value name="AnsiLogCodes" type="hex" data="00"/>
<value name="ResetTerminalConfirm" type="hex" data="01"/>
<value name="RestoreInactive" type="hex" data="00"/>
<value name="AutoReloadEnvironment" type="hex" data="01"/>
<value name="AutoTrimSingleLine" type="hex" data="00"/>
<value name="StatusBar.Hide.InputGrouping" type="hex" data="00"/>
<value name="StatusBar.Hide.WMode" type="hex" data="01"/>
</key> </key>
</key> </key>
</key> </key>

View File

@@ -2,9 +2,9 @@
(echo. (echo.
echo ------------------------------------ echo ------------------------------------
echo Get Cmder env variables... echo set
echo ------------------------------------ echo ------------------------------------
set | findstr -i -r "^aliases= architecture_bits ccall= cexec= ^clink_ ^cmder ^debug_output= fast_init= ^GIT_INSTALL_ROOT= ^git_locale= ^HOME= ^max_depth= ^nix_tools= ^path_position= ^path= ^PLINK_PROTOCOL= ^print_ ^SVN_SSH= ^time_init= ^user_aliases= ^verbose_output=" set
echo. echo.
echo ------------------------------------ echo ------------------------------------

View File

@@ -1,3 +0,0 @@
@echo off
powershell -executionpolicy bypass -f "%cmder_root%\vendor\bin\create-cmdercfg.ps1" -shell cmd -outfile "%CMDER_CONFIG_DIR%\user_init.cmd"

View File

@@ -1,30 +0,0 @@
[CmdletBinding()]
param(
[Parameter()]
[string]$shell = 'cmd',
[string]$outfile = "$env:cmder_config_dir\user_init.cmd"
)
if ($shell -match 'powershell') {
write-host "'$shell' is not supported at this time!"
exit 0
} elseif ($shell -match 'bash') {
write-host "'$shell' is not supported at this time!"
exit 0
} elseif ($shell -notMatch 'cmd') {
exit 0
}
$CmderModulePath = Join-path $env:cmder_root "vendor/psmodules/"
$CmderFunctions = Join-Path $CmderModulePath "Cmder.ps1"
. $CmderFunctions
if ($shell -match 'cmd') {
write-host "Generating Cmder Config for '$shell' shell in '$outfile'..."
templateExpand "$env:cmder_root\vendor\user_init.cmd.template" "$outfile"
} elseif ($shell -match 'powershell') {
write-host "'$shell' is not supported at this time!"
} elseif ($shell -match 'bash') {
write-host "'$shell' is not supported at this time!"
}

24
vendor/bin/timer.cmd vendored
View File

@@ -11,7 +11,6 @@ set /a hours=%end_h%-%start_h%
set /a mins=%end_m%-%start_m% set /a mins=%end_m%-%start_m%
set /a secs=%end_s%-%start_s% set /a secs=%end_s%-%start_s%
set /a ms=%end_ms%-%start_ms% set /a ms=%end_ms%-%start_ms%
if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms% if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms%
if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs% if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs%
if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins% if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins%
@@ -21,26 +20,3 @@ if 1%ms% lss 100 set ms=0%ms%
:: Mission accomplished :: Mission accomplished
set /a totalsecs = %hours%*3600 + %mins%*60 + %secs% set /a totalsecs = %hours%*3600 + %mins%*60 + %secs%
echo Elapsed Time: %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total) echo Elapsed Time: %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)
:: cleanup
set start=
set end=
set options=
set start_h=
set start_m=
set start_s=
set start_ms=
set end_h=
set end_m=
set end_s=
set end_ms=
set hours=
set mins=
set secs=
set ms=
set totalsecs=

120
vendor/clink.lua vendored
View File

@@ -324,7 +324,7 @@ end
-- Find out current branch -- Find out current branch
-- @return {nil|git branch name} -- @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() git_dir = git_dir or get_git_dir()
-- If git directory not found then we're probably outside of repo -- If git directory not found then we're probably outside of repo
@@ -341,90 +341,8 @@ local function get_git_branch(git_dir, fast)
-- if HEAD matches branch expression, then we're on named branch -- if HEAD matches branch expression, then we're on named branch
-- otherwise it is a detached commit -- otherwise it is a detached commit
local branch_name = HEAD:match('ref: refs/heads/(.+)') local branch_name = HEAD:match('ref: refs/heads/(.+)')
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, return branch_name or 'HEAD detached at '..HEAD:sub(1, 7)
-- 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
end end
--- ---
@@ -476,7 +394,7 @@ end
-- Get the status and conflict status of working dir -- Get the status and conflict status of working dir
-- @return {bool <status>, bool <is_conflict>} -- @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") local file = io_popenyield("git --no-optional-locks status --porcelain 2>nul")
if not file then if not file then
return {} return {}
@@ -498,10 +416,7 @@ local function get_git_status(git_dir)
end end
file:close() file:close()
local branch = get_git_branch(git_dir, false--[[fast]]) return { status = is_status, conflict = conflict_found }
local remote = get_git_remote(git_dir, branch)
return { status = is_status, branch = branch, remote = remote, conflict = conflict_found }
end end
--- ---
@@ -600,11 +515,11 @@ end
-- Use a prompt coroutine to get git status in the background. -- Use a prompt coroutine to get git status in the background.
-- Cache the info so we can reuse it next time to reduce flicker. -- 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 () local info = clink_promptcoroutine(function ()
-- Use git status if allowed. -- Use git status if allowed.
local cmderGitStatusOptIn = get_git_status_setting() local cmderGitStatusOptIn = get_git_status_setting()
return cmderGitStatusOptIn and get_git_status(git_dir) or {} return cmderGitStatusOptIn and get_git_status() or {}
end) end)
if not info then if not info then
info = cached_info.git_info or {} info = cached_info.git_info or {}
@@ -624,11 +539,10 @@ local function git_prompt_filter()
local git_dir = get_git_dir() local git_dir = get_git_dir()
local color local color
if git_dir then if git_dir then
local branch = get_git_branch(git_dir, true--[[fast]]) local branch = get_git_branch(git_dir)
if branch then if branch then
-- If in a different repo or branch than last time, discard cached info. -- If in a different repo or branch than last time, discard cached info.
if cached_info.git_dir ~= git_dir or if cached_info.git_dir ~= git_dir or cached_info.git_branch ~= branch then
(branch ~= ".invalid" and cached_info.git_branch ~= branch) then
cached_info.git_info = nil cached_info.git_info = nil
cached_info.git_dir = git_dir cached_info.git_dir = git_dir
cached_info.git_branch = branch 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 -- 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 -- 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 gitStatus = gitInfo.status
local gitConflict = gitInfo.conflict 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 if gitStatus == nil then
color = get_unknown_color() color = get_unknown_color()
elseif gitStatus then elseif gitStatus then
@@ -800,10 +702,6 @@ for _,lua_module in ipairs(clink.find_files(completions_dir..'*.lua')) do
end end
end end
-- If Cmder is launched with '/c [folderPath]', indicating Cmder is installed globally and
-- each user has a private '[folderPath]\config' folder, Clink won't know about the global
-- '%cmder_root%\config dir, so we need to load scripts from there before . Clink loads lua
-- scripts from the profile directory given to it when it was injected.
if clink.get_env('CMDER_USER_CONFIG') then if clink.get_env('CMDER_USER_CONFIG') then
local cmder_config_dir = clink.get_env('CMDER_ROOT')..'/config/' local cmder_config_dir = clink.get_env('CMDER_ROOT')..'/config/'
for _,lua_module in ipairs(clink.find_files(cmder_config_dir..'*.lua')) do for _,lua_module in ipairs(clink.find_files(cmder_config_dir..'*.lua')) do

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

128
vendor/cmder_exinit vendored
View File

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

112
vendor/init.bat vendored
View File

@@ -166,24 +166,9 @@ if "%PROCESSOR_ARCHITECTURE%"=="x86" (
set CMDER_CLINK=0 set CMDER_CLINK=0
) )
if defined CMDER_USER_CONFIG (
if exist "%CMDER_ROOT%\config\user_init.cmd" (
call "%CMDER_ROOT%\config\user_init.cmd"
exit /b
) else if exist "%CMDER_USER_CONFIG%\config\user_init.cmd" (
call "%CMDER_USER_CONFIG%\config\user_init.cmd"
exit /b
)
) else if exist "%CMDER_ROOT%\config\user_init.cmd" (
call "%CMDER_ROOT%\config\user_init.cmd"
exit /b
)
if "%CMDER_CLINK%" == "1" ( if "%CMDER_CLINK%" == "1" (
REM TODO: Detect if clink is already injected, if so goto :CLINK_FINISH REM TODO: Detect if clink is already injected, if so goto :CLINK_FINISH
goto :INJECT_CLINK goto :INJECT_CLINK
) else if "%CMDER_CLINK%" == "2" (
goto :CLINK_FINISH
) )
goto :SKIP_CLINK goto :SKIP_CLINK
@@ -220,7 +205,6 @@ goto :SKIP_CLINK
) )
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_CONFIG_DIR%" --scripts "%CMDER_ROOT%\vendor" "%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_CONFIG_DIR%" --scripts "%CMDER_ROOT%\vendor"
set CMDER_CLINK=2
:: Check if a fatal error occurred when trying to inject Clink :: Check if a fatal error occurred when trying to inject Clink
if errorlevel 2 ( if errorlevel 2 (
@@ -318,7 +302,7 @@ if exist "%CMDER_ROOT%\vendor\git-for-windows" (
) )
:SPECIFIED_GIT :SPECIFIED_GIT
%print_debug% init.bat "Using specified GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%...." %print_debug% init.bat "Using /GIT_INSTALL_ROOT..."
goto :CONFIGURE_GIT goto :CONFIGURE_GIT
:FOUND_GIT :FOUND_GIT
@@ -327,13 +311,8 @@ goto :CONFIGURE_GIT
:CONFIGURE_GIT :CONFIGURE_GIT
%print_debug% init.bat "Using Git from '%GIT_INSTALL_ROOT%..." %print_debug% init.bat "Using Git from '%GIT_INSTALL_ROOT%..."
:: Add git to the path :: Add git to the path
%print_debug% init.bat "START - git.exe(prepend): Env Var - PATH=%path%" if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" %lib_path% enhance_path "%GIT_INSTALL_ROOT%\cmd" ""
if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" (
set "path=%GIT_INSTALL_ROOT%\cmd;%path%"
)
%print_debug% init.bat "END - git.exe(prepend): Env Var - PATH=%path%"
:: Add the unix commands at the end to not shadow windows commands like `more` and `find` :: Add the unix commands at the end to not shadow windows commands like `more` and `find`
if %nix_tools% equ 1 ( if %nix_tools% equ 1 (
@@ -344,30 +323,16 @@ if %nix_tools% equ 1 (
set "path_position=" set "path_position="
) )
%print_debug% init.bat "START - nix_tools(%path_position%): Env Var - PATH=%path%"
if %nix_tools% geq 1 ( if %nix_tools% geq 1 (
if exist "%GIT_INSTALL_ROOT%\mingw32" ( if exist "%GIT_INSTALL_ROOT%\mingw32" (
if "%path_position%" == "append" ( %lib_path% enhance_path "%GIT_INSTALL_ROOT%\mingw32\bin" %path_position%
set "path=%path%;%GIT_INSTALL_ROOT%\mingw32\bin"
) else (
set "path=%GIT_INSTALL_ROOT%\mingw32\bin;%path%"
)
) else if exist "%GIT_INSTALL_ROOT%\mingw64" ( ) else if exist "%GIT_INSTALL_ROOT%\mingw64" (
if "%path_position%" == "append" ( %lib_path% enhance_path "%GIT_INSTALL_ROOT%\mingw64\bin" %path_position%
set "path=%path%;%GIT_INSTALL_ROOT%\mingw64\bin"
) else (
set "path=%GIT_INSTALL_ROOT%\mingw64\bin;%path%"
)
) )
if exist "%GIT_INSTALL_ROOT%\usr\bin" ( if exist "%GIT_INSTALL_ROOT%\usr\bin" (
if "%path_position%" == "append" ( %lib_path% enhance_path "%GIT_INSTALL_ROOT%\usr\bin" %path_position%
set "path=%path%;%GIT_INSTALL_ROOT%\usr\bin"
) else (
set "path=%GIT_INSTALL_ROOT%\usr\bin;%path%"
)
) )
) )
%print_debug% init.bat "END - nix_tools(%path_position%): Env Var - PATH=%path%"
:SET_ENV :SET_ENV
@@ -400,7 +365,8 @@ if defined git_locale (
) )
endlocal && set LANG=%LANG% endlocal && set LANG=%LANG%
%print_debug% init.bat "Found Git in: 'GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%'" %print_debug% init.bat "Env Var - GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
%print_debug% init.bat "Found Git in: '%GIT_INSTALL_ROOT%'"
goto :PATH_ENHANCE goto :PATH_ENHANCE
:NO_GIT :NO_GIT
@@ -408,32 +374,14 @@ goto :PATH_ENHANCE
endlocal endlocal
:PATH_ENHANCE :PATH_ENHANCE
%print_debug% init.bat "START - vendor/bin(prepend): Env Var - PATH=%path%" %lib_path% enhance_path "%CMDER_ROOT%\vendor\bin"
set "path=%CMDER_ROOT%\vendor\bin;%path%"
%print_debug% init.bat "END - vendor/bin(prepend): Env Var - PATH=%path%"
:USER_CONFIG_START :USER_CONFIG_START
%print_debug% init.bat "START - bin(prepend): Env Var - PATH=%path%" %lib_path% enhance_path_recursive "%CMDER_ROOT%\bin" 0 %max_depth%
if %max_depth% gtr 1 ( if defined CMDER_USER_BIN (
%lib_path% enhance_path_recursive "%CMDER_ROOT%\bin" 0 %max_depth%
) else (
set "path=%CMDER_ROOT%\bin;%path%"
)
%print_debug% init.bat "END - bin(prepend): Env Var - PATH=%path%"
if defined CMDER_USER_BIN if defined CMDER_USER_ROOT (
%print_debug% init.bat "START - user_bin(prepend): Env Var - PATH=%path%"
if %max_depth% gtr 1 (
%lib_path% enhance_path_recursive "%CMDER_USER_BIN%" 0 %max_depth% %lib_path% enhance_path_recursive "%CMDER_USER_BIN%" 0 %max_depth%
) else (
set "path=%CMDER_USER_ROOT%\bin;%path%"
)
%print_debug% init.bat "END - user_bin(prepend): Env Var - PATH=!path!"
) )
%lib_path% enhance_path "%CMDER_ROOT%" append
%print_debug% init.bat "START - cmder_root(append): Env Var - PATH=%path%"
set "path=%path%;%CMDER_ROOT%"
%print_debug% init.bat "END - cmder_root(append): Env Var - PATH=%path%"
:: Drop *.bat and *.cmd files into "%CMDER_ROOT%\config\profile.d" :: Drop *.bat and *.cmd files into "%CMDER_ROOT%\config\profile.d"
:: to run them at startup. :: to run them at startup.
@@ -542,40 +490,12 @@ if "%CMDER_ALIASES%" == "1" if exist "%CMDER_ROOT%\bin\alias.bat" if exist "%CMD
set initialConfig= set initialConfig=
if not exist "%CMDER_CONFIG_DIR%\user_init.cmd" (
powershell -executionpolicy bypass -f "%cmder_root%\vendor\bin\create-cmdercfg.ps1" -shell cmd -outfile "%CMDER_CONFIG_DIR%\user_init.cmd"
if not exist "%CMDER_ROOT%\config\user_init.cmd" (
%print_error% "Failed to generate Cmder config"
)
)
:CMDER_CONFIGURED :CMDER_CONFIGURED
if not defined CMDER_CONFIGURED set CMDER_CONFIGURED=1 if not defined CMDER_CONFIGURED set CMDER_CONFIGURED=1
set CMDER_INIT_END=%time%
if "%time_init%" == "1" if "%CMDER_INIT_END%" neq "" if "%CMDER_INIT_START%" neq "" ( set CMDER_INIT_END=%time%
call "%cmder_root%\vendor\bin\timer.cmd" "%CMDER_INIT_START%" "%CMDER_INIT_END%"
)
:CLEANUP
set architecture_bits=
set CMDER_ALIASES=
set CMDER_INIT_END=
set CMDER_INIT_START=
set CMDER_USER_FLAGS=
set CMDER_CLINK=
set debug_output=
set fast_init=
set max_depth=
set nix_tools=
set path_position=
set print_debug=
set print_error=
set print_verbose=
set print_warning=
set time_init=
set verbose_output=
set user_aliases=
if %time_init% gtr 0 (
"%cmder_root%\vendor\bin\timer.cmd" "%CMDER_INIT_START%" "%CMDER_INIT_END%"
)
exit /b exit /b

View File

@@ -91,13 +91,13 @@ exit /b
if /i "!position!" == "append" ( if /i "!position!" == "append" (
if "!found!" == "0" ( if "!found!" == "0" (
echo "!PATH!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!$" echo "!PATH!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!\"$"
call :set_found call :set_found
) )
%print_debug% :enhance_path "Env Var END PATH !find_query! - found=!found!" %print_debug% :enhance_path "Env Var END PATH !find_query! - found=!found!"
) else ( ) else (
if "!found!" == "0" ( if "!found!" == "0" (
echo "!PATH!"|!WINDIR!\System32\findstr >nul /I /R /C:"^!find_query!;" echo "!PATH!"|!WINDIR!\System32\findstr >nul /I /R /C:"^\"!find_query!;"
call :set_found call :set_found
) )
%print_debug% :enhance_path "Env Var BEGIN PATH !find_query! - found=!found!" %print_debug% :enhance_path "Env Var BEGIN PATH !find_query! - found=!found!"
@@ -157,12 +157,8 @@ exit /b
exit /b exit /b
:enhance_path_recursive :enhance_path_recursive
call :set_path_recursive "%~1" "%~2" "%~3"
exit /b
:set_path_recursive
:::=============================================================================== :::===============================================================================
:::set_path_recursive - Add a directory and subs to the path env variable if :::enhance_path_recursive - Add a directory and subs to the path env variable if
::: required. ::: required.
:::. :::.
:::include: :::include:
@@ -171,7 +167,7 @@ exit /b
:::. :::.
:::usage: :::usage:
:::. :::.
::: call "%~DP0lib_path" set_path_recursive "[dir_path]" [max_depth] [append] ::: call "%~DP0lib_path" enhance_path_recursive "[dir_path]" [max_depth] [append]
:::. :::.
:::required: :::required:
:::. :::.
@@ -194,28 +190,13 @@ exit /b
exit /b 1 exit /b 1
) )
rem Parse arguments robustly:
rem Accept either public form: "[dir_path]" [max_depth] [append]
rem or internal recursive form: "[dir_path]" [depth] [max_depth] [append]
set "depth=%~2" set "depth=%~2"
set "max_depth=%~3" set "max_depth=%~3"
set "position="
if /i "%~4" == "append" set "position=append" if "%~4" neq "" if /i "%~4" == "append" (
if /i "%~3" == "append" ( set "position=%~4"
set "position=append" ) else (
set "max_depth=" set "position="
)
if not defined depth set "depth=0"
if not defined max_depth (
if defined depth (
rem If only one numeric argument provided, treat it as max_depth
set "max_depth=%depth%"
set "depth=0"
) else (
set "max_depth=1"
)
) )
dir "%add_path%" 2>NUL | findstr -i -e "%find_pathext%" >NUL dir "%add_path%" 2>NUL | findstr -i -e "%find_pathext%" >NUL
@@ -228,11 +209,7 @@ exit /b
if "%fast_init%" == "1" ( if "%fast_init%" == "1" (
if "%add_to_path%" neq "" ( if "%add_to_path%" neq "" (
if "%position%" == "append" ( call :enhance_path "%add_to_path%" %position%
set "path=%path%;%add_to_path%"
) else (
set "path=%add_to_path%;%path%"
)
) )
) )
@@ -241,24 +218,22 @@ exit /b
exit /b exit /b
) )
%print_debug% :set_path_recursive "Env Var - add_path=%add_to_path%" %print_debug% :enhance_path_recursive "Env Var - add_path=%add_to_path%"
%print_debug% :set_path_recursive "Env Var - position=%position%" %print_debug% :enhance_path_recursive "Env Var - position=%position%"
%print_debug% :set_path_recursive "Env Var - depth=%depth%" %print_debug% :enhance_path_recursive "Env Var - depth=%depth%"
%print_debug% :set_path_recursive "Env Var - max_depth=%max_depth%" %print_debug% :enhance_path_recursive "Env Var - max_depth=%max_depth%"
if %max_depth% gtr %depth% ( if %max_depth% gtr %depth% (
if "%add_to_path%" neq "" ( if "%add_to_path%" neq "" (
%print_debug% :set_path_recursive "Adding parent directory - '%add_to_path%'" %print_debug% :enhance_path_recursive "Adding parent directory - '%add_to_path%'"
if "%position%" == "append" ( call :enhance_path "%add_to_path%" %position%
set "path=%path%;%add_to_path%"
) else (
set "path=%add_to_path%;%path%"
)
) )
call :set_depth call :set_depth
call :loop_depth call :loop_depth
) )
set "PATH=%PATH%"
exit /b exit /b
:set_depth :set_depth
@@ -271,9 +246,9 @@ exit /b
) )
for /d %%i in ("%add_path%\*") do ( for /d %%i in ("%add_path%\*") do (
%print_debug% :set_path_recursive "Env Var BEFORE - depth=%depth%" %print_debug% :enhance_path_recursive "Env Var BEFORE - depth=%depth%"
%print_debug% :set_path_recursive "Found Subdirectory - '%%~fi'" %print_debug% :enhance_path_recursive "Found Subdirectory - '%%~fi'"
call :set_path_recursive "%%~fi" %depth% %max_depth% %position% call :enhance_path_recursive "%%~fi" %depth% %max_depth% %position%
%print_debug% :set_path_recursive "Env Var AFTER- depth=%depth%" %print_debug% :enhance_path_recursive "Env Var AFTER- depth=%depth%"
) )
exit /b exit /b

2
vendor/profile.ps1 vendored
View File

@@ -104,7 +104,7 @@ if ($null -ne $ENV:GIT_INSTALL_ROOT) {
# Create 'vi' alias for 'vim' if vim is available # Create 'vi' alias for 'vim' if vim is available
if (Get-Command -Name "vim" -ErrorAction SilentlyContinue) { if (Get-Command -Name "vim" -ErrorAction SilentlyContinue) {
New-Alias -name "vi" -value vim -errorAction SilentlyContinue New-Alias -name "vi" -value vim
} }
# PSReadline configuration # PSReadline configuration

View File

@@ -249,29 +249,3 @@ function Get-GitStatusSetting {
return $true return $true
} }
function yOrn( $question ) {
Do {
$Answer = Read-Host -Prompt "`n${question}? (y/n) "
}
Until ($Answer -eq 'y' -or $Answer -eq 'n' -or $Answer -eq 'yes' -or $Answer -eq 'no')
return $Answer
}
function templateExpand($template_filename, $outfile) {
$template = Get-Content "$template_filename" -Raw
$expanded = Invoke-Expression "@`"`r`n$template`r`n`"@"
$overwrite = 'y'
if ((test-path "$outfile")) {
$overwrite = yOrn "'$outfile' already exists do you want to overwrite it"
}
if ($overwrite -match 'y') {
$expanded | out-file -ErrorAction silentlycontinue -encoding ascii "$outfile"
} else {
write-host "Skipping Cmder '$shell' config generation at user request!"
}
}

12
vendor/sources.json vendored
View File

@@ -1,13 +1,13 @@
[ [
{ {
"name": "git-for-windows", "name": "git-for-windows",
"version": "2.52.0.windows.1", "version": "2.51.2.windows.1",
"url": "https://github.com/git-for-windows/git/releases/download/v2.52.0.windows.1/PortableGit-2.52.0-64-bit.7z.exe" "url": "https://github.com/git-for-windows/git/releases/download/v2.51.2.windows.1/PortableGit-2.51.2-64-bit.7z.exe"
}, },
{ {
"name": "clink", "name": "clink",
"version": "1.9.5", "version": "1.8.8",
"url": "https://github.com/chrisant996/clink/releases/download/v1.9.5/clink.1.9.5.ee6b4f.zip" "url": "https://github.com/chrisant996/clink/releases/download/v1.8.8/clink.1.8.8.a63364.zip"
}, },
{ {
"name": "conemu-maximus5", "name": "conemu-maximus5",
@@ -21,7 +21,7 @@
}, },
{ {
"name": "clink-completions", "name": "clink-completions",
"version": "0.6.7", "version": "0.6.6",
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.7.zip" "url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.6.zip"
} }
] ]

View File

@@ -1,51 +0,0 @@
@echo off
if not defined CMDER_ROOT (
if defined ConEmuDir (
for /f "delims=" %%i in ("%ConEmuDir%\..\..") do (
set "CMDER_ROOT=%%~fi"
)
) else (
for /f "delims=" %%i in ("%~dp0\..") do (
set "CMDER_ROOT=%%~fi"
)
)
)
if defined ConEmuDir (
set "gitCommand=--command=%ConEmuBaseDirShort%\conemu-msys2-64.exe"
)
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
set "PATH=%CMDER_ROOT%\vendor\git-for-windows\usr\bin;%PATH%"
set "gitCmd=%CMDER_ROOT%\vendor\git-for-windows\git-cmd.exe"
set "bashCmd=%CMDER_ROOT%\vendor\git-for-windows\usr\bin\bash.exe"
) else if exist "%ProgramFiles%\git" (
set "PATH=%ProgramFiles%\git\usr\bin;%PATH%"
set "gitCmd=%ProgramFiles%\git\git-cmd.exe"
set "bashCmd=%ProgramFiles%\git\usr\bin\bash.exe"
if not exist "%ProgramFiles%\git\etc\profile.d\cmder_exinit.sh" (
echo Run 'mklink "%ProgramFiles%\git\etc\profile.d\cmder_exinit.sh" "%CMDER_ROOT%\vendor\cmder_exinit"' in 'cmd::Cmder as Admin' to use Cmder with external Git Bash
echo.
echo or
echo.
echo Run 'echo "" ^> "%ProgramFiles%\git\etc\profile.d\cmder_exinit.sh"' in 'cmd::Cmder as Admin' to disable this message.
)
) else if exist "%ProgramFiles(x86)%\git" (
set "PATH=%ProgramFiles(x86)%\git\usr\bin;%PATH%"
set "gitCmd=%ProgramFiles(x86)%\git\git-cmd.exe"
set "bashCmd=%ProgramFiles(x86)%\git\usr\bin\bash.exe"
if not exist "%ProgramFiles(x86)%\git\etc\profile.d\cmder_exinit.sh" (
echo Run 'mklink "%ProgramFiles^(x86^)%\git\etc\profile.d\cmder_exinit.sh" "%CMDER_ROOT%\vendor\cmder_exinit"' in 'cmd::Cmder as Admin' to use Cmder with external Git Bash
echo.
echo or
echo.
echo Run 'echo "" ^> "%ProgramFiles^(x86^)%\git\etc\profile.d\cmder_exinit.sh"' in 'cmd::Cmder as Admin' to disable this message.
)
)
if defined ConEmuDir (
"%gitCmd%" --no-cd %gitCommand% "%bashCmd%" --login -i
) else (
"%bashCmd%" --login -i
)

View File

@@ -1,40 +0,0 @@
@echo off
if not defined CMDER_ROOT (
if defined ConEmuDir (
for /f "delims=" %%i in ("%ConEmuDir%\..\..") do (
set "CMDER_ROOT=%%~fi"
)
) else (
for /f "delims=" %%i in ("%~dp0\..") do (
set "CMDER_ROOT=%%~fi"
)
)
)
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
set "PATH=%CMDER_ROOT%\vendor\git-for-windows\usr\bin;%PATH%"
set "gitCmd=%CMDER_ROOT%\vendor\git-for-windows\usr\bin\mintty.exe"
) else if exist "%ProgramFiles%\git" (
set "PATH=%ProgramFiles%\git\usr\bin;%PATH%"
set "gitCmd=%ProgramFiles%\git\usr\bin\mintty.exe"
if not exist "%ProgramFiles%\git\etc\profile.d\cmder_exinit.sh" (
echo Run 'mklink "%ProgramFiles%\git\etc\profile.d\cmder_exinit.sh" "%CMDER_ROOT%\vendor\cmder_exinit"' in 'cmd::Cmder as Admin' to use Cmder with external Git Bash
echo.
echo or
echo.
echo Run 'echo "" ^> "%ProgramFiles%\git\etc\profile.d\cmder_exinit.sh"' in 'cmd::Cmder as Admin' to disable this message.
)
) else if exist "%ProgramFiles(x86)%\git" (
set "PATH=%ProgramFiles(x86)%\git\usr\bin;%PATH%"
set "gitCmd=%ProgramFiles(x86)%\git\usr\bin\mintty.exe"
if not exist "%ProgramFiles(x86)%\git\etc\profile.d\cmder_exinit.sh" (
echo Run 'mklink "%ProgramFiles^(x86^)%\git\etc\profile.d\cmder_exinit.sh" "%CMDER_ROOT%\vendor\cmder_exinit"' in 'cmd::Cmder as Admin' to use Cmder with external Git Bash
echo.
echo or
echo.
echo Run 'echo "" ^> "%ProgramFiles^(x86^)%\git\etc\profile.d\cmder_exinit.sh"' in 'cmd::Cmder as Admin' to disable this message.
)
)
"%gitCmd%" /bin/bash -l

View File

@@ -1,174 +0,0 @@
@echo off
:: This file was autogenerated by Cmder init.bat
::
:: It is yours to edit and will not be touched again by Cmder.
::
:: If you wish to recreate this file simply rename it and Cmder will re-create it the next time it is run
:: or run the followin command from a Cmder shell:
::
:: powershell -f %cmder_root%\vendor\bin\create-cmdercfg.ps1 -shell cmd [-outfile "[filename]"]
::
if "%CMDER_CLINK%" == "1" (
goto :INJECT_CLINK
) else if "%CMDER_CLINK%" == "2" if defined WT_PROFILE_ID (
goto :INJECT_CLINK
) else if "%CMDER_CLINK%" == "2" (
goto :CLINK_FINISH
)
goto :SKIP_CLINK
:INJECT_CLINK
%print_verbose% "Injecting Clink!"
:: Check if Clink is not present
if not exist "%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" (
goto :SKIP_CLINK
)
:: Run Clink
if not exist "%CMDER_CONFIG_DIR%\settings" if not exist "%CMDER_CONFIG_DIR%\clink_settings" (
echo Generating Clink initial settings in "%CMDER_CONFIG_DIR%\clink_settings"
copy "%CMDER_ROOT%\vendor\clink_settings.default" "%CMDER_CONFIG_DIR%\clink_settings"
echo Additional *.lua files in "%CMDER_CONFIG_DIR%" are loaded on startup.
)
if not exist "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua" (
echo Creating Cmder prompt config file: "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua"
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua"
)
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_CONFIG_DIR%" --scripts "%CMDER_ROOT%\vendor"
if errorlevel 1 (
%print_error% "Clink initialization has failed with error code: %errorlevel%"
goto :CLINK_FINISH
)
set CMDER_CLINK=2
goto :CLINK_FINISH
:SKIP_CLINK
%print_warning% "Skipping Clink Injection!"
for /f "tokens=2 delims=:." %%x in ('chcp') do set cp=%%x
chcp 65001>nul
:: Revert back to plain cmd.exe prompt without clink
prompt `$E[1;32;49m`$P`$S`$_`$E[1;30;49mλ`$S`$E[0m
chcp %cp%>nul
:CLINK_FINISH
if not defined GIT_INSTALL_ROOT set "GIT_INSTALL_ROOT=$env:GIT_INSTALL_ROOT"
if not defined SVN_SSH set "SVN_SSH=$env:SVN_SSH"
if not defined git_locale set git_locale=$env:git_locale
if not defined LANG set LANG=$env:lang
if not defined user_aliases set "user_aliases=$env:user_aliases"
if not defined aliases set "aliases=%user_aliases%"
if not defined HOME set "HOME=%USERPROFILE%"
set PLINK_PROTOCOL=$env:PLINK_PROTOCOL
set "path=%GIT_INSTALL_ROOT%\cmd;%path%"
set path_position=append
if %nix_tools% equ 1 (
set "path_position=append"
) else (
set "path_position="
)
if %nix_tools% geq 1 (
if exist "%GIT_INSTALL_ROOT%\mingw32" (
if "%path_position%" == "append" (
set "path=%path%;%GIT_INSTALL_ROOT%\mingw32\bin"
) else (
set "path=%GIT_INSTALL_ROOT%\mingw32\bin;%path%"
)
) else if exist "%GIT_INSTALL_ROOT%\mingw64" (
if "%path_position%" == "append" (
set "path=%path%;%GIT_INSTALL_ROOT%\mingw64\bin"
) else (
set "path=%GIT_INSTALL_ROOT%\mingw64\bin;%path%"
)
)
if exist "%GIT_INSTALL_ROOT%\usr\bin" (
if "%path_position%" == "append" (
set "path=%path%;%GIT_INSTALL_ROOT%\usr\bin"
) else (
set "path=%GIT_INSTALL_ROOT%\usr\bin;%path%"
)
)
)
set "path=%CMDER_ROOT%\vendor\bin;%path%"
:USER_CONFIG_START
if %max_depth% gtr 1 (
%lib_path% enhance_path_recursive "%CMDER_ROOT%\bin" 0 %max_depth%
) else (
set "path=%CMDER_ROOT%\bin;%path%"
)
setlocal enabledelayedexpansion
if defined CMDER_USER_BIN (
if %max_depth% gtr 1 (
%lib_path% enhance_path_recursive "%CMDER_USER_BIN%" 0 %max_depth%
) else (
set "path=%CMDER_USER_ROOT%\bin;%path%"
)
)
endlocal && set "path=%path%"
set "path=%path%;%CMDER_ROOT%"
call "%user_aliases%"
%lib_profile% run_profile_d "%CMDER_ROOT%\config\profile.d"
if defined CMDER_USER_CONFIG (
%lib_profile% run_profile_d "%CMDER_USER_CONFIG%\profile.d"
)
call "%CMDER_ROOT%\config\user_profile.cmd"
if defined CMDER_USER_CONFIG (
if exist "%CMDER_USER_CONFIG%\user_profile.cmd" (
call "%CMDER_USER_CONFIG%\user_profile.cmd"
)
)
set "path=%path:;;=;%
:CMDER_CONFIGURED
if not defined CMDER_CONFIGURED set CMDER_CONFIGURED=1
set CMDER_INIT_END=%time%
if "%time_init%" == "1" if "%CMDER_INIT_END%" neq "" if "%CMDER_INIT_START%" neq "" (
call "%cmder_root%\vendor\bin\timer.cmd" "%CMDER_INIT_START%" "%CMDER_INIT_END%"
)
:CLEANUP
set architecture_bits=
set CMDER_ALIASES=
set CMDER_INIT_END=
set CMDER_INIT_START=
set CMDER_USER_FLAGS=
set debug_output=
set fast_init=
set max_depth=
set nix_tools=
set path_position=
set print_debug=
set print_error=
set print_verbose=
set print_warning=
set time_init=
set verbose_output=
set user_aliases=
exit /b

View File

@@ -1,390 +0,0 @@
{
"$help": "https://aka.ms/terminal-documentation",
"$schema": "https://aka.ms/terminal-profiles-schema",
"actions": [
{
"command": {
"action": "copy",
"singleLine": false
},
"keys": "ctrl+shift+c"
},
{
"command": "unbound",
"keys": "ctrl+v"
},
{
"command": "unbound",
"keys": "ctrl+c"
},
{
"command": "paste"
},
{
"command": "find",
"keys": "ctrl+shift+f"
},
{
"command": {
"action": "splitPane",
"split": "auto",
"splitMode": "duplicate"
},
"keys": "alt+shift+d"
}
],
"copyFormatting": "none",
"copyOnSelect": true,
"defaultProfile": "{48946353-ebe8-4571-a591-7d609f31327a}",
"newTabMenu": [
{
"type": "remainingProfiles"
}
],
"profiles": {
"defaults": {
"colorScheme": "One Half Dark",
"font": {
"face": "Cascadia Code"
}
},
"list": [
{
"colorScheme": "One Half Dark",
"commandline": "cmd /k \"%WT_SETTINGS_DIR%\\..\\..\\init.bat\"",
"guid": "{48946353-ebe8-4571-a591-7d609f31327a}",
"hidden": false,
"icon": "%WT_SETTINGS_DIR%\\..\\..\\..\\icons\\cmder.ico",
"name": "Cmder",
"startingDirectory": null,
"tabTitle": "Cmder",
"useAtlasEngine": false
},
{
"colorScheme": "One Half Dark",
"commandline": "%SystemRoot%\\System32\\cmd.exe /k \"%WT_SETTINGS_DIR%\\..\\..\\init.bat\"",
"elevate": true,
"guid": "{bdd957d0-c15a-49e6-9816-14b02351a071}",
"hidden": false,
"icon": "%WT_SETTINGS_DIR%\\..\\..\\..\\icons\\cmder_red.ico",
"name": "Cmder as Admin",
"startingDirectory": null,
"tabTitle": "Cmder as Admin"
},
{
"colorScheme": "One Half Dark",
"commandline": "PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command \"Invoke-Expression 'Import-Module ''%WT_SETTINGS_DIR%\\..\\..\\profile.ps1'''\"",
"guid": "{eb1f6578-ce9d-47a9-a8c7-9b3fdd22302d}",
"hidden": false,
"icon": "%WT_SETTINGS_DIR%\\..\\..\\..\\icons\\cmder_orange.ico",
"name": "Cmder - PowerShell",
"startingDirectory": null,
"tabTitle": "Cmder",
"useAtlasEngine": false
},
{
"colorScheme": "One Half Dark",
"commandline": "PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command \"Invoke-Expression 'Import-Module ''%WT_SETTINGS_DIR%\\..\\..\\profile.ps1'''\"",
"elevate": true,
"guid": "{c5225c3e-8619-4145-8182-2800814eeb17}",
"hidden": false,
"icon": "%WT_SETTINGS_DIR%\\..\\..\\..\\icons\\cmder_purple.ico",
"name": "Cmder - PowerShell as Admin",
"startingDirectory": null,
"tabTitle": "Cmder - PowerShell as Admin",
"useAtlasEngine": false
},
{
"colorScheme": "One Half Dark",
"commandline": "%WT_SETTINGS_DIR%\\..\\..\\start_git_bash.cmd",
"guid": "{c5c298e9-010e-4b8c-bc55-e3df81846b4c}",
"hidden": false,
"icon": "%WT_SETTINGS_DIR%\\..\\..\\..\\icons\\cmder_blue.ico",
"name": "Cmder - Bash",
"startingDirectory": null,
"tabTitle": "Cmder - Bash"
},
{
"colorScheme": "One Half Dark",
"commandline": "%WT_SETTINGS_DIR%\\..\\..\\start_git_bash.cmd",
"elevate": true,
"guid": "{545eb9ed-4c1c-49b3-8cc6-7eb41bd280ff}",
"hidden": false,
"icon": "%WT_SETTINGS_DIR%\\..\\..\\..\\icons\\cmder_yellow.ico",
"name": "Cmder - Bash as Admin",
"startingDirectory": null,
"tabTitle": "Cmder - Bash as Admin"
},
{
"commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"hidden": false,
"name": "Windows PowerShell"
},
{
"commandline": "%SystemRoot%\\System32\\cmd.exe",
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"hidden": false,
"name": "Command Prompt"
}
]
},
"schemes": [
{
"background": "#0C0C0C",
"black": "#0C0C0C",
"blue": "#0037DA",
"brightBlack": "#767676",
"brightBlue": "#3B78FF",
"brightCyan": "#61D6D6",
"brightGreen": "#16C60C",
"brightPurple": "#B4009E",
"brightRed": "#E74856",
"brightWhite": "#F2F2F2",
"brightYellow": "#F9F1A5",
"cursorColor": "#FFFFFF",
"cyan": "#3A96DD",
"foreground": "#CCCCCC",
"green": "#13A10E",
"name": "Campbell",
"purple": "#881798",
"red": "#C50F1F",
"selectionBackground": "#FFFFFF",
"white": "#CCCCCC",
"yellow": "#C19C00"
},
{
"background": "#012456",
"black": "#0C0C0C",
"blue": "#0037DA",
"brightBlack": "#767676",
"brightBlue": "#3B78FF",
"brightCyan": "#61D6D6",
"brightGreen": "#16C60C",
"brightPurple": "#B4009E",
"brightRed": "#E74856",
"brightWhite": "#F2F2F2",
"brightYellow": "#F9F1A5",
"cursorColor": "#FFFFFF",
"cyan": "#3A96DD",
"foreground": "#CCCCCC",
"green": "#13A10E",
"name": "Campbell Powershell",
"purple": "#881798",
"red": "#C50F1F",
"selectionBackground": "#FFFFFF",
"white": "#CCCCCC",
"yellow": "#C19C00"
},
{
"background": "#282828",
"black": "#282828",
"blue": "#458588",
"brightBlack": "#928374",
"brightBlue": "#83A598",
"brightCyan": "#8EC07C",
"brightGreen": "#B8BB26",
"brightPurple": "#D3869B",
"brightRed": "#FB4934",
"brightWhite": "#EBDBB2",
"brightYellow": "#FABD2F",
"cursorColor": "#FFFFFF",
"cyan": "#689D6A",
"foreground": "#EBDBB2",
"green": "#98971A",
"name": "Gruvbox Dark",
"purple": "#B16286",
"red": "#CC241D",
"selectionBackground": "#FFFFFF",
"white": "#A89984",
"yellow": "#D79921"
},
{
"background": "#272822",
"black": "#3E3D32",
"blue": "#03395C",
"brightBlack": "#272822",
"brightBlue": "#66D9EF",
"brightCyan": "#66D9EF",
"brightGreen": "#A6E22E",
"brightPurple": "#AE81FF",
"brightRed": "#F92672",
"brightWhite": "#F8F8F2",
"brightYellow": "#FD971F",
"cursorColor": "#FFFFFF",
"cyan": "#66D9EF",
"foreground": "#F8F8F2",
"green": "#A6E22E",
"name": "Monokai",
"purple": "#AE81FF",
"red": "#F92672",
"selectionBackground": "#FFFFFF",
"white": "#F8F8F2",
"yellow": "#FFE792"
},
{
"background": "#282C34",
"black": "#282C34",
"blue": "#61AFEF",
"brightBlack": "#5A6374",
"brightBlue": "#61AFEF",
"brightCyan": "#56B6C2",
"brightGreen": "#98C379",
"brightPurple": "#C678DD",
"brightRed": "#E06C75",
"brightWhite": "#DCDFE4",
"brightYellow": "#E5C07B",
"cursorColor": "#FFFFFF",
"cyan": "#56B6C2",
"foreground": "#DCDFE4",
"green": "#98C379",
"name": "One Half Dark",
"purple": "#C678DD",
"red": "#E06C75",
"selectionBackground": "#FFFFFF",
"white": "#DCDFE4",
"yellow": "#E5C07B"
},
{
"background": "#FAFAFA",
"black": "#383A42",
"blue": "#0184BC",
"brightBlack": "#4F525D",
"brightBlue": "#61AFEF",
"brightCyan": "#56B5C1",
"brightGreen": "#98C379",
"brightPurple": "#C577DD",
"brightRed": "#DF6C75",
"brightWhite": "#FFFFFF",
"brightYellow": "#E4C07A",
"cursorColor": "#4F525D",
"cyan": "#0997B3",
"foreground": "#383A42",
"green": "#50A14F",
"name": "One Half Light",
"purple": "#A626A4",
"red": "#E45649",
"selectionBackground": "#FFFFFF",
"white": "#FAFAFA",
"yellow": "#C18301"
},
{
"background": "#002B36",
"black": "#002B36",
"blue": "#268BD2",
"brightBlack": "#073642",
"brightBlue": "#839496",
"brightCyan": "#93A1A1",
"brightGreen": "#586E75",
"brightPurple": "#6C71C4",
"brightRed": "#CB4B16",
"brightWhite": "#FDF6E3",
"brightYellow": "#657B83",
"cursorColor": "#FFFFFF",
"cyan": "#2AA198",
"foreground": "#839496",
"green": "#859900",
"name": "Solarized Dark",
"purple": "#D33682",
"red": "#DC322F",
"selectionBackground": "#FFFFFF",
"white": "#EEE8D5",
"yellow": "#B58900"
},
{
"background": "#FDF6E3",
"black": "#002B36",
"blue": "#268BD2",
"brightBlack": "#073642",
"brightBlue": "#839496",
"brightCyan": "#93A1A1",
"brightGreen": "#586E75",
"brightPurple": "#6C71C4",
"brightRed": "#CB4B16",
"brightWhite": "#FDF6E3",
"brightYellow": "#657B83",
"cursorColor": "#002B36",
"cyan": "#2AA198",
"foreground": "#657B83",
"green": "#859900",
"name": "Solarized Light",
"purple": "#D33682",
"red": "#DC322F",
"selectionBackground": "#FFFFFF",
"white": "#EEE8D5",
"yellow": "#B58900"
},
{
"background": "#000000",
"black": "#000000",
"blue": "#3465A4",
"brightBlack": "#555753",
"brightBlue": "#729FCF",
"brightCyan": "#34E2E2",
"brightGreen": "#8AE234",
"brightPurple": "#AD7FA8",
"brightRed": "#EF2929",
"brightWhite": "#EEEEEC",
"brightYellow": "#FCE94F",
"cursorColor": "#FFFFFF",
"cyan": "#06989A",
"foreground": "#D3D7CF",
"green": "#4E9A06",
"name": "Tango Dark",
"purple": "#75507B",
"red": "#CC0000",
"selectionBackground": "#FFFFFF",
"white": "#D3D7CF",
"yellow": "#C4A000"
},
{
"background": "#FFFFFF",
"black": "#000000",
"blue": "#3465A4",
"brightBlack": "#555753",
"brightBlue": "#729FCF",
"brightCyan": "#34E2E2",
"brightGreen": "#8AE234",
"brightPurple": "#AD7FA8",
"brightRed": "#EF2929",
"brightWhite": "#EEEEEC",
"brightYellow": "#FCE94F",
"cursorColor": "#000000",
"cyan": "#06989A",
"foreground": "#555753",
"green": "#4E9A06",
"name": "Tango Light",
"purple": "#75507B",
"red": "#CC0000",
"selectionBackground": "#FFFFFF",
"white": "#D3D7CF",
"yellow": "#C4A000"
},
{
"background": "#000000",
"black": "#000000",
"blue": "#000080",
"brightBlack": "#808080",
"brightBlue": "#0000FF",
"brightCyan": "#00FFFF",
"brightGreen": "#00FF00",
"brightPurple": "#FF00FF",
"brightRed": "#FF0000",
"brightWhite": "#FFFFFF",
"brightYellow": "#FFFF00",
"cursorColor": "#FFFFFF",
"cyan": "#008080",
"foreground": "#C0C0C0",
"green": "#008000",
"name": "Vintage",
"purple": "#800080",
"red": "#800000",
"selectionBackground": "#FFFFFF",
"white": "#C0C0C0",
"yellow": "#808000"
}
],
"themes": [],
"useAcrylicInTabRow": true,
"wordDelimiters": " ()\"',;<>!@#$%^&*|+=[]{}~?\u2502"
}