Compare commits

..

86 Commits

Author SHA1 Message Date
4daff054eb Fix #2944 2024-05-31 18:36:31 +03:30
45fd0c2666 ⬆️ Update dependencies (git-for-windows v2.45.1.windows.1, clink v1.6.14, clink-completions v0.5.2) 2024-05-29 13:40:37 +00:00
5145a15139 display git improper version string as debug 2024-05-28 17:19:47 +03:30
92419a48fc log the executable path for improper git 2024-05-23 21:59:16 +03:30
c9b77f618a enable match.expand_envvars
This is part of the "Enhanced default settings" by Clink and a very useful feature
2024-05-20 10:57:51 +03:30
a2e4884ea1 Merge pull request #2926 from cmderdev/dependabot/github_actions/softprops/action-gh-release-2
Bump softprops/action-gh-release from 1 to 2
2024-04-26 17:09:24 +03:30
62a46140eb Merge pull request #2932 from loselarry/master
fix: fix some typos in comments
2024-04-10 08:01:16 -04:00
ae518cded8 fix: fix some typos in comments
Signed-off-by: loselarry <bikangning@yeah.net>
2024-04-10 16:39:46 +08:00
4ad76d8274 Bump softprops/action-gh-release from 1 to 2
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 1 to 2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v1...v2)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-11 15:59:16 +00:00
8a199bf47b Bump microsoft/setup-msbuild from 1 to 2 (#2917)
Bumps [microsoft/setup-msbuild](https://github.com/microsoft/setup-msbuild) from 1 to 2.
- [Release notes](https://github.com/microsoft/setup-msbuild/releases)
- [Changelog](https://github.com/microsoft/setup-msbuild/blob/main/building-release.md)
- [Commits](https://github.com/microsoft/setup-msbuild/compare/v1...v2)

---
updated-dependencies:
- dependency-name: microsoft/setup-msbuild
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-06 19:43:29 +00:00
457d99da0b Bump peter-evans/create-pull-request from 5 to 6 (#2918)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 5 to 6.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v5...v6)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-06 19:43:13 +00:00
52762636dc Bump actions/upload-artifact from 3 to 4 (#2905) 2024-01-03 00:54:57 +00:00
ed6c9b2bc9 Merge pull request #2907 from daxgames/development_ci
Do CI on development PRs
2024-01-02 14:14:15 -05:00
7753622897 Do CI on development PRs 2024-01-02 12:04:31 -05:00
18950135ef Bump github/codeql-action from 2 to 3 (#2906)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-20 10:31:41 +00:00
b59647b570 Merge pull request #2892 from daxgames/revert_git_update
Revert Git update so not to include a release Candidate
2023-11-11 09:18:48 -08:00
2135fce19f revert git update to not include a release candidate 2023-11-11 09:12:30 -08:00
219c879582 Merge remote-tracking branch 'upstream/master' 2023-11-10 17:00:16 -08:00
289bcf03a5 Merge remote-tracking branch 'upstream/development' 2023-11-10 16:59:35 -08:00
50bc05fee7 Merge pull request #2891 from daxgames/rem_race
Remove Cmder.exe race condition
2023-11-09 17:11:42 +03:30
8d916a4446 remove env refresh race condition 2023-11-09 04:58:26 -08:00
5e22496aca Merge branch 'master' into development 2023-11-05 18:55:47 +00:00
8b6add75cf Merge pull request #2882 from cmderdev/update-vendor
Updates to `2` vendored dependencies
2023-11-05 13:55:36 -05:00
8498447878 ⬆️ Update dependencies (git-for-windows v2.43.0-rc0.windows.1, clink v1.5.12) 2023-11-03 13:40:42 +00:00
0874f4be44 Merge branch 'master' into development 2023-10-25 09:02:45 +00:00
ffb93b1804 call init.bat with the same arguments 2023-10-25 12:32:31 +03:30
092dc4d323 Merge branch 'master' into development 2023-10-14 18:20:25 +00:00
39afad1743 Merge pull request #2879 from cmderdev/update-vendor
Updates to `2` vendored dependencies
2023-10-14 11:20:13 -07:00
d0cb6b5c23 ⬆️ Update dependencies (clink v1.5.9, clink-completions v0.4.11) 2023-10-10 13:40:41 +00:00
9ee2bef7cd Merge branch 'master' into development 2023-09-25 18:41:04 +00:00
a409a1cce8 Merge pull request #2867 from cmderdev/update-vendor
Updates to `2` vendored dependencies
2023-09-25 14:40:50 -04:00
3b8e87de84 Merge branch 'master' of https://github.com/cmderdev/cmder 2023-09-25 11:45:19 -04:00
faf66542b4 ⬆️ Update dependencies (git-for-windows v2.42.0.windows.2, clink v1.5.6) 2023-09-22 13:40:52 +00:00
d3497f5eb0 Merge branch 'master' into development 2023-09-21 17:28:35 +00:00
98a1e9621e Bump actions/checkout from 3 to 4 2023-09-21 20:58:21 +03:30
4f32d23c30 Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-04 15:47:52 +00:00
ad5c80bcd2 Merge remote-tracking branch 'upstream/master' 2023-08-11 09:31:24 -04:00
9a135947af Merge branch 'master' into development 2023-07-27 21:28:50 +00:00
1b9a1e5b6f improve markdown (SECURITY.md)
use bullet points to render the list correctly; improve sentences
2023-07-28 00:58:39 +03:30
1adaab963b Merge branch 'master' into development 2023-07-27 18:32:18 +00:00
29650960aa Create SECURITY.md (#2866) 2023-07-27 19:32:04 +01:00
41f0454b05 Merge branch 'master' into development 2023-07-25 13:48:37 +00:00
3ea9728ffd Merge pull request #2861 from chrisant996/chrisant_fix_2859
Fix #2859; script error when cwd name contains `%`
2023-07-25 17:18:22 +03:30
a01fb4c444 Merge branch 'master' into development 2023-07-25 10:17:37 +00:00
4b0344172a ignore github-related and markdown for tests and codeql 2023-07-25 13:47:22 +03:30
4104a5612f Merge branch 'master' into development 2023-07-24 14:04:30 +00:00
5e219fe34e Update build.yml 2023-07-24 15:04:16 +01:00
ff7621c1da Merge branch 'master' into development 2023-07-24 13:56:12 +00:00
9be28807cb ⬆️ Update dependencies (conemu-maximus5 v23.07.24) (#2863)
Co-authored-by: DRSDavidSoft <DRSDavidSoft@users.noreply.github.com>
2023-07-24 14:55:59 +01:00
5d4c45d099 Merge branch 'master' into development 2023-07-24 08:30:03 +00:00
e2168a361c ⬆️ Update dependencies (git-for-windows v2.41.0.windows.3, clink v1.5.1, conemu-maximus5 v23.07.23, clink-completions v0.4.10) (#2850)
Co-authored-by: DRSDavidSoft <DRSDavidSoft@users.noreply.github.com>
2023-07-24 09:29:50 +01:00
f517494dc4 Merge branch 'master' into development 2023-07-20 12:57:05 +00:00
7542376213 Remove appveyor config (#2805)
This should be merged after #2804

Signed-off-by: Martin Kemp <me@martinke.mp>
2023-07-20 13:56:52 +01:00
84ee96c64f Fix #2859; script error when cwd name contains %
The `string.gsub()` function in Lua always uses Lua patterns (which are
similar to regular expressions).  Cmder's custom prompt wants to perform
simple plain text find/replace operations on strings.  `string.gsub()`
is the right Lua function for that, but since it always uses Lua
patterns it's necessary to apply escaping to the input strings otherwise
they can get misinterpreted and cause runtime errors.

For example, if the current working directory name contains a percent
sign, such as literally "My%20Home".

This change fixes that.  It introduces a helper function `gsub_plain()`
which behaves like `string.gsub()` but applies appropriate escaping to
convert the plain text input strings into the corresponding Lua
patterns so that it can achieve plain text find/replace operations.

It also introduces separate helper functions for escaping the `find` and
`replace` parameters for `string.gsub()`, since they have different
escaping rules.
2023-07-10 18:07:53 -07:00
ad804eda44 Merge remote-tracking branch 'upstream/master' 2023-07-04 13:01:27 -04:00
15addb87ee Merge branch 'master' into development 2023-07-04 08:40:45 +00:00
e9750ab73d avoid erroneous messages, skip clink if injection fails fatally 2023-07-04 12:10:32 +03:30
47258fbd2b Merge branch 'master' of https://github.com/cmderdev/cmder 2023-06-05 16:01:37 -04:00
37c41e80df Merge branch 'master' into development 2023-05-23 10:57:06 +00:00
59e14a1783 Remove deprecated PsGet module in favor of Install-Module 2023-05-23 14:26:50 +03:30
34f2aabb8e Remove PSGet Entirely
Fixes #2841

Signed-off-by: Martin Kemp <me@martinke.mp>
2023-05-23 11:11:39 +01:00
5a90558714 Merge branch 'master' into development 2023-05-17 08:00:29 +00:00
845720e25a Merge pull request #2847 from chrisant996/fix_2846
Fix 2846
2023-05-17 11:30:13 +03:30
c1f8dfdb27 Merge branch 'master' into development 2023-05-16 20:22:11 +00:00
55676399d5 Merge pull request #2849 from cmderdev/update-vendor
Updates to `1` vendored dependencies
2023-05-16 23:51:54 +03:30
48e4dff882 ⬆️ Update dependencies (clink-completions v0.4.8) 2023-05-16 13:40:42 +00:00
a605ec520d Clean luacheck warnings. 2023-05-15 09:18:59 -07:00
5fab87f4d6 Remove unused function.
The `get_hg_status()` function has been unused since commit
35eab7a51a in 2018.
2023-05-15 09:18:47 -07:00
c9153c96bf Fix global Lua namespace pollution.
Some variables were global when the intent was to be local variables.
2023-05-15 09:17:01 -07:00
74381ecd19 Fix #2846; errors when git/svn/hg not installed.
Also fixes error when HEAD is not available in a git repo, e.g. due to a
corrupt repo.
2023-05-15 09:15:36 -07:00
50c3ea4ab3 Merge branch 'master' into development 2023-05-11 15:07:20 +00:00
8d39f79a90 Merge pull request #2844 from cmderdev/update-vendor
Updates to `1` vendored dependencies
2023-05-11 18:37:01 +03:30
7b880efda4 ⬆️ Update dependencies (git-for-windows v2.40.1.windows.1) 2023-04-26 13:40:36 +00:00
3f53d1b927 Merge branch 'master' into development 2023-04-24 14:05:13 +00:00
4aefd0bb71 Merge pull request #2843 from cmderdev/update-vendor
Updates to `1` vendored dependencies
2023-04-24 17:34:59 +03:30
7daeb465e8 ⬆️ Update dependencies (clink v1.4.24) 2023-04-24 13:41:39 +00:00
6180aa53b3 Merge branch 'master' into development 2023-04-23 20:17:40 +00:00
23488fcbb2 fetch all history for all branches and tags 2023-04-23 23:47:28 +03:30
d838f861af checkout development 2023-04-23 23:43:26 +03:30
d80202c791 add task to auto push to development 2023-04-23 23:39:35 +03:30
5e3b70338d Merge pull request #12 from daxgames/update-vendor
Updates to `3` vendored dependencies
2023-04-21 16:06:26 -04:00
a4ea326a62 ⬆️ Update dependencies (git-for-windows v2.40.0.windows.1, clink v1.4.24, clink-completions v0.4.7) 2023-04-19 13:44:11 +00:00
73034f9e31 Merge pull request #2833 from cmderdev/update-vendor
Updates to `2` vendored dependencies
2023-04-11 02:15:18 +03:30
8875f77573 Merge pull request #2840 from cmderdev/dependabot/github_actions/peter-evans/create-pull-request-5
Bump peter-evans/create-pull-request from 4 to 5
2023-04-11 02:14:22 +03:30
1d1e815c91 Bump peter-evans/create-pull-request from 4 to 5
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 4 to 5.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v4...v5)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-10 16:02:00 +00:00
36ad85c7b7 ⬆️ Update dependencies (git-for-windows v2.40.0.windows.1, clink v1.4.23) 2023-03-16 13:43:09 +00:00
28 changed files with 234 additions and 2890 deletions

33
.github/workflows/branches.yml vendored Normal file
View File

@ -0,0 +1,33 @@
name: Update branches
# Controls when the action will run.
on:
# Triggers the workflow on push events for the development branch
push:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This job updates the development branch with the master branch
update-development:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out the repository under $GITHUB_WORKSPACE, so the job can access it
- uses: actions/checkout@v4
with:
fetch-depth: 0 # fetch all history for all branches and tags
# Runs a single command using the runners shell
- name: Merge master into development
run: |
git config user.name "${{ github.actor }}"
git config user.email "${{ github.actor }}@users.noreply.github.com"
git checkout development
git merge --no-ff master
git push origin development

View File

@ -11,7 +11,7 @@ on:
tags: tags:
- "v*" - "v*"
pull_request: pull_request:
branches: [ "master" ] branches: [ "master", "development" ]
#---------------------------------# #---------------------------------#
# environment configuration # # environment configuration #
@ -30,15 +30,17 @@ jobs:
build: build:
name: Build Project name: Build Project
runs-on: windows-latest runs-on: windows-latest
permissions:
contents: write
discussions: write
steps: steps:
- name: Check out repository code (Action from GitHub) - name: Check out repository code (Action from GitHub)
uses: actions/checkout@v3 uses: actions/checkout@v4
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Add MSBuild to PATH - name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v1 uses: microsoft/setup-msbuild@v2
- name: Build Cmder Launcher - name: Build Cmder Launcher
shell: pwsh shell: pwsh
@ -51,32 +53,32 @@ jobs:
run: .\pack.ps1 -verbose run: .\pack.ps1 -verbose
- name: Upload artifact (cmder.zip) - name: Upload artifact (cmder.zip)
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v4
with: with:
path: build/cmder.zip path: build/cmder.zip
name: cmder.zip name: cmder.zip
if-no-files-found: error if-no-files-found: error
- name: Upload artifact (cmder.7z) - name: Upload artifact (cmder.7z)
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v4
with: with:
path: build/cmder.7z path: build/cmder.7z
name: cmder.7z name: cmder.7z
- name: Upload artifact (cmder_mini.zip) - name: Upload artifact (cmder_mini.zip)
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v4
with: with:
path: build/cmder_mini.zip path: build/cmder_mini.zip
name: cmder_mini.zip name: cmder_mini.zip
- name: Upload artifact (hashes.txt) - name: Upload artifact (hashes.txt)
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v4
with: with:
path: build/hashes.txt path: build/hashes.txt
name: hashes.txt name: hashes.txt
- name: Create Release - name: Create Release
uses: softprops/action-gh-release@v1 uses: softprops/action-gh-release@v2
with: with:
files: | files: |
build/cmder.zip build/cmder.zip

View File

@ -3,20 +3,25 @@
# #
# You may wish to alter this file to override the set of languages analyzed, # You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic. # or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL" name: "CodeQL"
on: on:
push: push:
branches: [ "master" ] branches: [ "master", "development" ]
paths-ignore:
- '**/*.md'
- '**/*.txt'
- '.github/**'
- '**/.gitignore'
pull_request: pull_request:
# The branches below must be a subset of the branches above # The branches below must be a subset of the branches above
branches: [ "master" ] branches: [ "master", "development" ]
paths-ignore:
- '**/*.md'
- '**/*.txt'
- '.github/**'
- '**/.gitignore'
schedule: schedule:
- cron: '30 19 * * 0' - cron: '30 19 * * 0'
@ -40,11 +45,11 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v3 uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v2 uses: github/codeql-action/init@v3
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # If you wish to specify custom queries, you can do so here or in a config file.
@ -55,7 +60,7 @@ jobs:
# queries: security-extended,security-and-quality # queries: security-extended,security-and-quality
- name: Add MSBuild to PATH - name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v1 uses: microsoft/setup-msbuild@v2
- name: Build Cmder Launcher - name: Build Cmder Launcher
shell: pwsh shell: pwsh
@ -63,6 +68,6 @@ jobs:
run: .\build.ps1 -Compile -verbose run: .\build.ps1 -Compile -verbose
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2 uses: github/codeql-action/analyze@v3
with: with:
category: "/language:${{matrix.language}}" category: "/language:${{matrix.language}}"

View File

@ -4,9 +4,21 @@ on:
push: push:
branches: branches:
- master - master
- development
paths-ignore:
- '**/*.md'
- '**/*.txt'
- '.github/**'
- '**/.gitignore'
pull_request: pull_request:
branches: branches:
- master - master
- development
paths-ignore:
- '**/*.md'
- '**/*.txt'
- '.github/**'
- '**/.gitignore'
defaults: defaults:
run: run:
@ -26,7 +38,7 @@ jobs:
continue-on-error: false continue-on-error: false
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Initialize vendors - name: Initialize vendors
shell: pwsh shell: pwsh
working-directory: scripts working-directory: scripts

View File

@ -24,7 +24,7 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
with: with:
fetch-depth: 0 fetch-depth: 0
@ -51,7 +51,7 @@ jobs:
Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ') Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ')
echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
- uses: peter-evans/create-pull-request@v4 - uses: peter-evans/create-pull-request@v6
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'

1
.gitignore vendored
View File

@ -31,4 +31,3 @@ launcher/src/version.rc2
.vs/* .vs/*
.vscode .vscode
.idea .idea
.vagrant/

24
SECURITY.md Normal file
View File

@ -0,0 +1,24 @@
# Security Policy
## Supported Versions
| Version | Supported |
| ------- | ------------------ |
| 1.3.x | :white_check_mark: |
| < 1.3 | |
## Reporting a Vulnerability
If you discover a security issue in our project, please report it to [MartiUK](https://github.com/MartiUK). We will acknowledge your email within 24 hours and provide a more detailed response within 48 hours. We will try to fix the issue as soon as possible and inform you when a new version is released.
Please include as much of the information listed below as you can to help us better understand and resolve the issue:
- The nature of the issue
- The affected source file(s) with full paths
- The location of the vulnerable code (tag/branch/commit or direct URL)
- Any special configuration needed to reproduce the issue
- Detailed steps to reproduce the issue
- Proof-of-concept or exploit code (if possible)
- The impact of the issue, including how an attacker could exploit it
Please do not disclose the vulnerability publicly until we have resolved it.

64
Vagrantfile vendored
View File

@ -1,64 +0,0 @@
Vagrant.configure("2") do |config|
required_plugins = %w( vagrant-vbguest )
required_plugins.each do |plugin|
system "vagrant plugin install #{plugin}" unless Vagrant.has_plugin? plugin
end
# config.vbguest.iso_path = "../../../../usr/share/virtualbox/VBoxGuestAdditions.iso"
config.vbguest.allow_downgrade = true
config.vm.define "cmderdev-10" do |win10|
win10.vm.hostname = "cmderdev-10"
win10.vm.box = "cmderdev-10"
# win10.vm.network :private_network, ip: "192.168.56.101"
win10.vm.provider :virtualbox do |v|
# v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--name", "cmderdev-10"]
v.customize ["modifyvm", :id, "--ostype", "Windows10_64"]
v.customize ["modifyvm", :id, "--graphicscontroller", "vboxsvga"]
v.customize ["modifyvm", :id, "--memory", 8192]
v.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
#v.customize ["setextradata", :id, "GUI/ScaleFactor", "1.75"]
end
end
config.vm.define "cmderdev-11" do |win11|
win11.vm.hostname = "cmderdev-11"
win11.vm.box = "cmderdev-11"
# win11.vm.network :private_network, ip: "192.168.56.111"
win11.vm.provider :virtualbox do |v|
# v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--name", "cmderdev-11"]
v.customize ["modifyvm", :id, "--ostype", "Windows11_64"]
v.customize ["modifyvm", :id, "--graphicscontroller", "vboxvga"]
v.customize ["modifyvm", :id, "--memory", 8192]
v.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
#v.customize ["setextradata", :id, "GUI/ScaleFactor", "1.75"]
end
end
config.vm.define "cmderdev-10-pro-scaled" do |cmderdev|
cmderdev.vm.hostname = 'cmderdev-10-pro'
cmderdev.vm.box = "cmderdev-10"
cmderdev.vm.provider :virtualbox do |v|
# v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--name", "cmderdev-pro"]
v.customize ["modifyvm", :id, "--graphicscontroller", "vboxsvga"]
v.customize ["modifyvm", :id, "--memory", 8192]
v.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
v.customize ["setextradata", :id, "GUI/ScaleFactor", "1.75"]
end
end
config.vm.provision "file", source: "./scripts/vagrant/windows_terminal_settings.json.default", destination: "windows_terminal_settings.json.default"
config.vm.provision "file", source: "./scripts/vagrant/windows_terminal_state.json.default", destination: "windows_terminal_state.json.default"
config.vm.provision "shell", path: './scripts/vagrant/add-cmder.ps1'
config.vm.provision "shell", path: './vendor/bin/add-vscodeprofile.ps1'
config.vm.provision "shell", path: './vendor/bin/add-windowsterminalprofiles.ps1'
config.vm.provision "shell", path: './vendor/bin/add-cmdertodesktop.ps1'
end

View File

@ -1,60 +0,0 @@
#---------------------------------#
# general configuration #
#---------------------------------#
version: 1.0.{build}-{branch}
# branches to build
branches:
# blacklist
except:
- gh-pages
#---------------------------------#
# environment configuration #
#---------------------------------#
# Operating system (build VM template)
os: Visual Studio 2022
#---------------------------------#
# build configuration #
#---------------------------------#
build_script:
- ps: cd scripts; .\build.ps1 -Compile -verbose
after_build:
- ps: .\pack.ps1 -verbose
# Disable test search, since we don't have any.
test: off
#---------------------------------#
# artifacts #
#---------------------------------#
artifacts:
- path: build\cmder.zip
name: cmderzip
- path: build\cmder.7z
name: cmder7z
- path: build\cmder_mini.zip
name: cmdermini
- path: build\hashes.txt
name: hashes
#---------------------------------#
# notifications #
#---------------------------------#
notifications:
# Webhook
- provider: Webhook
url: https://webhooks.gitter.im/e/d673abb1b2e659dcd625
on_build_success: true
on_build_failure: true
on_build_status_changed: true

View File

@ -469,9 +469,6 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
MessageBox(NULL, _T("Unable to create the ConEmu process!"), _T("Error"), MB_OK); MessageBox(NULL, _T("Unable to create the ConEmu process!"), _T("Error"), MB_OK);
return; return;
} }
LRESULT lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL);
lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)L"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL); // For Windows >= 8
} }
bool IsUserOnly(std::wstring opt) bool IsUserOnly(std::wstring opt)

View File

@ -1,7 +1,7 @@
/** /**
* WARNING: do NOT modify this file! the content of this file should be * WARNING: do NOT modify this file! the content of this file should be
* automatically genereted before AppVeyor builds using the * automatically generated before AppVeyor builds using the
* respective .ps1 Powershell scripts. * respective .ps1 Powershell scripts.
* *
*/ */

View File

@ -79,7 +79,7 @@ if ($Compile) {
Write-Verbose "Building the launcher..." Write-Verbose "Building the launcher..."
# Referene: https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference # Reference: https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
msbuild CmderLauncher.vcxproj /t:Clean,Build /p:configuration=Release /m msbuild CmderLauncher.vcxproj /t:Clean,Build /p:configuration=Release /m
if ($LastExitCode -ne 0) { if ($LastExitCode -ne 0) {

View File

@ -1,40 +0,0 @@
choco install -y --force 7zip 7zip.install
choco install -y --force cmder
$env:path = "$env:path;c:/tools/cmder/vendor/git-for-windows/cmd"
c:
cd $env:userprofile
git clone https://github.com/cmderdev/cmder cmderdev
write-host "USERNAME: $env:USERNAME"
if ("$env:USERNAME" -eq "vagrant" -and -not (test-path "$env:userprofile/cmderdev/vendor/git-for-windows")) {
invoke-expression -command "TAKEOWN /F `"$env:userprofile/cmderdev`" /R /D y /s localhost /u vagrant /p vagrant"
}
cd cmderdev
git checkout vagrant
git pull origin vagrant
git remote add upstream https://github.com/cmderdev/cmder
git pull upstream master
# cmd.exe "/K" '"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvars64.bat" && powershell -command "& ''$env:userprofile/cmderdev/scripts/build.ps1'' -verbose -compile" && exit'
# copy $env:userprofile/cmderdev/launcher/x64/release/cmder.exe $env:userprofile/cmderdev
# cmd.exe "/K" '"C:/Program Files (x86)/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvars64.bat" && powershell -noexit -command "& ''build.ps1 -verbose -compile''"'
cd scripts
./build.ps1 -verbose
copy C:/Tools/Cmder/Cmder.exe $env:userprofile/cmderdev
# tabby
setx cmder_root "${env:userprofile}\cmderdev"
# C:\Users\vagrant\AppData\Roaming\Hyper
# // shell: '',
# shell: 'cmd.exe',
# // for setting shell arguments (i.e. for using interactive shellArgs: `['-i']`)
# // by default `['--login']` will be used
# // shellArgs: ['--login'],
# shellArgs: ['/k', 'C:\\users\\vagrant\\cmderdev\\vendor\\init.bat'],

View File

@ -1,283 +0,0 @@
{
"$help": "https://aka.ms/terminal-documentation",
"$schema": "https://aka.ms/terminal-profiles-schema",
"actions":
[
{
"command":
{
"action": "copy",
"singleLine": false
},
"keys": "ctrl+c"
},
{
"command": "paste",
"keys": "ctrl+v"
},
{
"command": "find",
"keys": "ctrl+shift+f"
},
{
"command":
{
"action": "splitPane",
"split": "auto",
"splitMode": "duplicate"
},
"keys": "alt+shift+d"
}
],
"copyFormatting": "none",
"copyOnSelect": false,
"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"profiles":
{
"defaults": {},
"list":
[
{
"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"
},
{
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
"hidden": false,
"name": "Azure Cloud Shell",
"source": "Windows.Terminal.Azure"
},
{
"guid": "{3b26d644-1d3b-5a0c-ab09-39d4dd9ae00e}",
"hidden": false,
"name": "Developer Command Prompt for VS 2022",
"source": "Windows.Terminal.VisualStudio"
},
{
"guid": "{589cd367-e65f-5e6a-a1c7-2b8d6f250da8}",
"hidden": false,
"name": "Developer PowerShell for VS 2022",
"source": "Windows.Terminal.VisualStudio"
}
]
},
"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": "#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": []
}

View File

@ -1,9 +0,0 @@
{
"generatedProfiles" :
[
"{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
"{589cd367-e65f-5e6a-a1c7-2b8d6f250da8}",
"{3b26d644-1d3b-5a0c-ab09-39d4dd9ae00e}"
],
"settingsHash" : "6e0f2330b78337f3-01d95614596b3f65"
}

View File

@ -1 +0,0 @@
setx cmder_root "${env:cmder_root}"

View File

@ -1,30 +0,0 @@
if (test-path "${env:USERPROFILE}\cmderdev") {
$env:cmder_root = "${env:USERPROFILE}\cmderdev"
write-host "Creating '${env:USERPROFILE}\Desktop\Cmderdev.lnk'..."
$setShortcut = "$env:cmder_root\vendor\bin\set-shortcut.ps1"
start-process -NoNewWindow -filePath "powershell.exe" -ArgumentList "-file `"${setShortcut}`" -sourceexe `"${env:cmder_root}\Cmder.exe`" -DestinationPath `"${env:USERPROFILE}\Desktop\Cmderdev.lnk`" -WorkingDirectory `"${env:cmder_root}`""
}
if (test-path "${env:USERPROFILE}\cmder") {
$env:cmder_root = "${env:USERPROFILE}\cmder"
if (test-path "${cmder_root}\vendor\bin\set-shortcut.ps1") {
$setShortcut = "$env:cmder_root\vendor\bin\set-shortcut.ps1"
}
write-host "Creating '${env:USERPROFILE}\Desktop\Cmder.lnk'..."
start-process -NoNewWindow -filePath "powershell.exe" -ArgumentList "-file `"${setShortcut}`" -sourceexe `"$env:cmder_root\Cmder.exe`" -DestinationPath `"${env:USERPROFILE}\Desktop\Cmder.lnk`" -WorkingDirectory `"${env:USERPROFILE}`""
} elseif (test-path "C:\tools\cmder") {
$env:cmder_root = "C:\tools\cmder"
if (test-path "${cmder_root}\vendor\bin\set-shortcut.ps1") {
$setShortcut = "$env:cmder_root\vendor\bin\set-shortcut.ps1"
}
write-host "Creating '${env:USERPROFILE}\Desktop\Cmder.lnk'..."
start-process -NoNewWindow -filePath "powershell.exe" -ArgumentList "-file `"${setShortcut}`" -sourceexe `"$env:cmder_root\Cmder.exe`" -DestinationPath `"${env:USERPROFILE}\Desktop\Cmder.lnk`" -WorkingDirectory `"${env:USERPROFILE}`""
}

View File

@ -1,39 +0,0 @@
# VSCode
$VSCodeUserSettings = "$env:APPDATA/Code/User"
$VSCodeSettings = "$VSCodeUserSettings/settings.json";
$VSCodeSettingsNew = $VSCodeSettings.replace('.json', '-new.json')
if (test-path $VSCodeSettings) {
$data = get-content -path $VSCodeSettings -ErrorAction silentlycontinue | out-string | ConvertFrom-Json
}
else {
New-Item -ItemType directory $VSCodeUserSettings -force
$data = @{}
}
write-host $data
$data | Add-Member -force -Name 'terminal.integrated.defaultProfile.windows' -MemberType NoteProperty -Value "Cmder"
if ($null -eq $data.'terminal.integrated.profiles.windows') {
write-host "Adding 'terminal.integrated.profiles.windows'..."
$data | Add-Member -force -Name 'terminal.integrated.profiles.windows' -MemberType NoteProperty -Value @{}
}
write-host "Adding 'terminal.integrated.profiles.windows.Cmder' profile..."
$data.'terminal.integrated.profiles.windows'.'Cmder' = @{
"name" = "Cmder";
"path" = @(
"`${env:windir}/Sysnative/cmd.exe";
"`${env:windir}/System32/cmd.exe";
);
"args" = @(
"/k";
"`${env:USERPROFILE}/cmderdev/vendor/bin/vscode_init.cmd");
"icon" = "terminal-cmd";
"color" = "terminal.ansiGreen";
};
$data | ConvertTo-Json -depth 100 | set-content $VSCodeSettings

View File

@ -1,74 +0,0 @@
# Windows Terminal
$windowsTerminalFolder = (dir "$env:userprofile/AppData/Local/Packages/Microsoft.WindowsTerminal_*").name
$windowsTerminalPath = "$env:userprofile/AppData/Local/Packages/$windowsTerminalFolder"
$windowsTerminalSettings = $windowsTerminalPath + '/localState/settings.json'
$windowsTerminalSettingsNew = $windowsTerminalPath + '/localState/settings-new.json'
if (test-path "$env:userprofile/Documents/windows_terminal_settings.json.default") {
if (test-path "$windowsTerminalPath/LocalState/settings.json") {
del "$env:userprofile/Documents/windows_terminal_settings.json.default"
} else {
move-item -path $env:userprofile/Documents/windows_terminal_settings.json.default -destination $windowsTerminalPath/LocalState/settings.json
}
}
if (test-path "$env:userprofile/Documents/windows_terminal_state.json.default") {
if (test-path "$windowsTerminalPath/LocalState/state.json") {
del "$env:userprofile/Documents/windows_terminal_state.json.default"
} else {
move-item -path $env:userprofile/Documents/windows_terminal_state.json.default -destination $windowsTerminalPath/LocalState/state.json
}
}
if (test-path "$windowsTerminalPath/LocalState/state.json") {
$json = get-content $windowsTerminalSettings | ConvertFrom-Json
$json.defaultProfile="{00000000-0000-0000-ba54-000000000132}"
$cmderFound = $false
$cmderAsAdminFound = $false
foreach ($profile in $json.profiles.list) {
if ($profile.Name -eq "Cmder") {
$cmderFound = $true
}
elseIf ($profile.Name -eq "Cmder as Admin") {
$cmderAsAdminFound = $true
}
}
if (-not $cmderFound) {
write-host "Adding 'Cmder' to Windows Terminal..."
$json.profiles.list += @{
commandline="cmd.exe /k `"%USERPROFILE%/cmderdev/vendor/init.bat`"";
startingDirectory="%USERPROFILE%/cmderdev";
icon="%USERPROFILE%/cmderdev/icons/cmder.ico";
closeOnExit="graceful";
guid="{00000000-0000-0000-ba54-000000000132}";
hidden=$false;
name="Cmder"
}
}
if (-not $cmderAsAdminFound) {
write-host "Adding 'Cmder as Admin' to Windows Terminal..."
$json.profiles.list += @{
commandline="cmd.exe /k `"%USERPROFILE%/cmderdev/vendor/init.bat`"";
startingDirectory="%USERPROFILE%/cmderdev";
icon="%USERPROFILE%/cmderdev/icons/cmder_red.ico";
closeOnExit="graceful";
guid="{00000000-0000-0000-ba54-000000000133}";
hidden=$false;
elevate=$true;
name="Cmder as Admin"
}
}
$json | ConvertTo-Json -depth 100 | set-content $windowsTerminalSettings
}
else {
write-host "Cannot add profiles for Windows Terminal. The Windows Terminal settings file does not exist!"
}

View File

@ -9,5 +9,5 @@ if "%cmder_init%" == "1" (
) )
pushd "%CMDER_ROOT%" pushd "%CMDER_ROOT%"
call "%CMDER_ROOT%\vendor\init.bat" /f call "%CMDER_ROOT%\vendor\init.bat" /f %*
popd popd

View File

@ -1,21 +0,0 @@
[CmdletBinding()]
param(
[Parameter()]
[string]$SourceExe,
[string]$Arguments,
[string]$DestinationPath,
[string]$WorkingDirectory,
[String]$IconLocation
)
if ($IconLocation -eq '') {
$IconLocation = $SourceExe
}
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut($destinationPath)
$Shortcut.TargetPath = $SourceExe
$Shortcut.Arguments = $Arguments
$shortcut.WorkingDirectory = $WorkingDirectory
$shortcut.IconLocation = $IconLocation
$Shortcut.Save()

177
vendor/clink.lua vendored
View File

@ -3,7 +3,12 @@
-- !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED -- !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
-- !!! Use "%CMDER_ROOT%\config\<whatever>.lua" to add your lua startup scripts -- !!! Use "%CMDER_ROOT%\config\<whatever>.lua" to add your lua startup scripts
-- luacheck: globals clink -- luacheck: globals CMDER_SESSION
-- luacheck: globals uah_color cwd_color lamb_color clean_color dirty_color conflict_color unknown_color
-- luacheck: globals prompt_homeSymbol prompt_lambSymbol prompt_type prompt_useHomeSymbol prompt_useUserAtHost
-- luacheck: globals prompt_singleLine prompt_includeVersionControl
-- luacheck: globals prompt_overrideGitStatusOptIn prompt_overrideSvnStatusOptIn
-- luacheck: globals clink io.popenyield os.isdir settings.get
-- At first, load the original clink.lua file -- At first, load the original clink.lua file
-- this is needed as we set the script path to this dir and therefore the original -- this is needed as we set the script path to this dir and therefore the original
@ -46,11 +51,37 @@ local function get_unknown_color()
end end
--- ---
-- Makes a string safe to use as the replacement in string.gsub -- Escapes special characters in a string.gsub `find` parameter, so that it
-- can be matched as a literal plain text string, i.e. disable Lua pattern
-- matching. See "Patterns" (https://www.lua.org/manual/5.2/manual.html#6.4.1).
-- @param {string} text Text to escape
-- @returns {string} Escaped text
--- ---
local function verbatim(s) local function escape_gsub_find_arg(text)
s = string.gsub(s, "%%", "%%%%") return text and text:gsub("([-+*?.%%()%[%]$^])", "%%%1") or ""
return s end
---
-- Escapes special characters in a string.gsub `replace` parameter, so that it
-- can be replaced as a literal plain text string, i.e. disable Lua pattern
-- matching. See "Patterns" (https://www.lua.org/manual/5.2/manual.html#6.4.1).
-- @param {string} text Text to escape
-- @returns {string} Escaped text
---
local function escape_gsub_replace_arg(text)
return text and text:gsub("%%", "%%%%") or ""
end
---
-- Perform string.sub, but disable Lua pattern matching and just treat both
-- the `find` and `replace` parameters as a literal plain text replacement.
-- @param {string} str Text in which to perform find and replace
-- @param {string} find Text to find (plain text; not a Lua pattern)
-- @param {string} replace Replacement text (plain text; not a Lua pattern)
-- @returns {string} Copy of the input `str` with `find` replaced by `replace`
---
local function gsub_plain(str, find, replace)
return string.gsub(str, escape_gsub_find_arg(find), escape_gsub_replace_arg(replace))
end end
-- Extracts only the folder name from the input Path -- Extracts only the folder name from the input Path
@ -148,15 +179,15 @@ local function set_prompt_filter()
end end
if prompt_useHomeSymbol and string.find(cwd, clink.get_env("HOME")) then if prompt_useHomeSymbol and string.find(cwd, clink.get_env("HOME")) then
cwd = string.gsub(cwd, clink.get_env("HOME"), prompt_homeSymbol) cwd = gsub_plain(cwd, clink.get_env("HOME"), prompt_homeSymbol)
end end
uah = '' local uah = ''
if prompt_useUserAtHost then if prompt_useUserAtHost then
uah = clink.get_env("USERNAME") .. "@" .. clink.get_env("COMPUTERNAME") .. ' ' uah = clink.get_env("USERNAME") .. "@" .. clink.get_env("COMPUTERNAME") .. ' '
end end
cr = "\n" local cr = "\n"
if prompt_singleLine then if prompt_singleLine then
cr = ' ' cr = ' '
end end
@ -170,15 +201,15 @@ local function set_prompt_filter()
local version_control = prompt_includeVersionControl and "{git}{hg}{svn}" or "" local version_control = prompt_includeVersionControl and "{git}{hg}{svn}" or ""
prompt = "{uah}{cwd}" .. version_control .. cr .. get_lamb_color() .. "{env}{lamb}\x1b[0m " local prompt = "{uah}{cwd}" .. version_control .. cr .. get_lamb_color() .. "{env}{lamb}\x1b[0m "
prompt = string.gsub(prompt, "{uah}", uah) prompt = gsub_plain(prompt, "{uah}", uah)
prompt = string.gsub(prompt, "{cwd}", cwd) prompt = gsub_plain(prompt, "{cwd}", cwd)
prompt = string.gsub(prompt, "{env}", env) prompt = gsub_plain(prompt, "{env}", env)
clink.prompt.value = string.gsub(prompt, "{lamb}", prompt_lambSymbol) clink.prompt.value = gsub_plain(prompt, "{lamb}", prompt_lambSymbol)
end end
local function percent_prompt_filter() local function percent_prompt_filter()
clink.prompt.value = string.gsub(clink.prompt.value, "{percent}", "%%") clink.prompt.value = gsub_plain(clink.prompt.value, "{percent}", "%")
end end
--- ---
@ -191,7 +222,7 @@ end
local function get_dir_contains(path, dirname) local function get_dir_contains(path, dirname)
-- return parent path for specified entry (either file or directory) -- return parent path for specified entry (either file or directory)
local function pathname(path) local function pathname(path) -- luacheck: ignore 432
local prefix = "" local prefix = ""
local i = path:find("[\\/:][^\\/:]*$") local i = path:find("[\\/:][^\\/:]*$")
if i then if i then
@ -201,14 +232,14 @@ local function get_dir_contains(path, dirname)
end end
-- Navigates up one level -- Navigates up one level
local function up_one_level(path) local function up_one_level(path) -- luacheck: ignore 432
if path == nil then path = '.' end if path == nil then path = '.' end
if path == '.' then path = clink.get_cwd() end if path == '.' then path = clink.get_cwd() end
return pathname(path) return pathname(path)
end end
-- Checks if provided directory contains git directory -- Checks if provided directory contains git directory
local function has_specified_dir(path, specified_dir) local function has_specified_dir(path, specified_dir) -- luacheck: ignore 432
if path == nil then path = '.' end if path == nil then path = '.' end
local found_dirs = clink.find_dirs(path..'/'..specified_dir) local found_dirs = clink.find_dirs(path..'/'..specified_dir)
if #found_dirs > 0 then return true end if #found_dirs > 0 then return true end
@ -236,7 +267,7 @@ end
local function get_git_dir(path) local function get_git_dir(path)
-- return parent path for specified entry (either file or directory) -- return parent path for specified entry (either file or directory)
local function pathname(path) local function pathname(path) -- luacheck: ignore 432
local prefix = "" local prefix = ""
local i = path:find("[\\/:][^\\/:]*$") local i = path:find("[\\/:][^\\/:]*$")
if i then if i then
@ -255,7 +286,8 @@ local function get_git_dir(path)
local gitfile = io.open(dir..'/.git') local gitfile = io.open(dir..'/.git')
if not gitfile then return false end if not gitfile then return false end
local git_dir = gitfile:read():match('gitdir: (.*)') local line = gitfile:read() or ''
local git_dir = line:match('gitdir: (.*)')
gitfile:close() gitfile:close()
if os.isdir then -- only available in Clink v1.0.0 and higher if os.isdir then -- only available in Clink v1.0.0 and higher
@ -303,6 +335,9 @@ local function get_git_branch(git_dir)
local HEAD = head_file:read() local HEAD = head_file:read()
head_file:close() head_file:close()
-- If HEAD is missing, something is wrong.
if not HEAD then return end
-- if HEAD matches branch expression, then we're on named branch -- if HEAD matches branch expression, then we're on named branch
-- otherwise it is a detached commit -- otherwise it is a detached commit
local branch_name = HEAD:match('ref: refs/heads/(.+)') local branch_name = HEAD:match('ref: refs/heads/(.+)')
@ -322,6 +357,9 @@ local function get_hg_branch()
-- local cmd = "hg prompt \"{branch}{status}{|{patch}}{update}\"" -- local cmd = "hg prompt \"{branch}{status}{|{patch}}{update}\""
local cmd = "hg branch 2>nul" local cmd = "hg branch 2>nul"
local file = io.popen(cmd) local file = io.popen(cmd)
if not file then
return false
end
for line in file:lines() do for line in file:lines() do
local m = line:match("(.+)$") local m = line:match("(.+)$")
@ -339,8 +377,12 @@ end
-- Find out current branch -- Find out current branch
-- @return {false|svn branch name} -- @return {false|svn branch name}
--- ---
local function get_svn_branch(svn_dir) local function get_svn_branch()
local file = io_popenyield("svn info 2>nul") local file = io_popenyield("svn info 2>nul")
if not file then
return false
end
for line in file:lines() do for line in file:lines() do
local m = line:match("^Relative URL:") local m = line:match("^Relative URL:")
if m then if m then
@ -359,12 +401,16 @@ end
--- ---
local function get_git_status() local function get_git_status()
local file = io_popenyield("git --no-optional-locks status --porcelain 2>nul") local file = io_popenyield("git --no-optional-locks status --porcelain 2>nul")
if not file then
return {}
end
local conflict_found = false local conflict_found = false
local is_status = true local is_status = true
for line in file:lines() do for line in file:lines() do
local code = line:sub(1, 2) local code = line:sub(1, 2)
-- print (string.format("code: %s, line: %s", code, line)) -- print (string.format("code: %s, line: %s", code, line))
if code == "DD" or code == "AU" or code == "UD" or code == "UA" or code == "DU" or code == "AA" or code == "UU" then if code == "DD" or code == "AU" or code == "UD" or code == "UA" or code == "DU" or code == "AA" or code == "UU" then -- luacheck: no max line length
is_status = false is_status = false
conflict_found = true conflict_found = true
break break
@ -374,38 +420,27 @@ local function get_git_status()
end end
end end
file:close() file:close()
return { status = is_status, conflict = conflict_found } return { status = is_status, conflict = conflict_found }
end end
---
-- Get the status of working dir
-- @return {bool}
---
local function get_hg_status()
local file = io.popen("hg status -0")
for line in file:lines() do
file:close()
return false
end
file:close()
return true
end
--- ---
-- Get the status of working dir -- Get the status of working dir
-- @return {bool} -- @return {bool}
--- ---
local function get_svn_status() local function get_svn_status()
local file = io_popenyield("svn status -q") local file = io_popenyield("svn status -q")
for line in file:lines() do if not file then
return { error = true }
end
for line in file:lines() do -- luacheck: ignore 512, no unused
file:close() file:close()
return false return { clean = false }
end end
file:close() file:close()
return true return { clean = true }
end end
--- ---
@ -433,24 +468,28 @@ local function get_git_status_setting()
end end
local gitStatusConfig = io_popenyield("git --no-pager config cmder.status 2>nul") local gitStatusConfig = io_popenyield("git --no-pager config cmder.status 2>nul")
for line in gitStatusConfig:lines() do if gitStatusConfig then
if string.match(line, 'false') then for line in gitStatusConfig:lines() do
gitStatusConfig:close() if string.match(line, 'false') then
last_git_status_setting = false gitStatusConfig:close()
return false last_git_status_setting = false
return false
end
end end
gitStatusConfig:close()
end end
gitStatusConfig:close()
local gitCmdStatusConfig = io_popenyield("git --no-pager config cmder.cmdstatus 2>nul") local gitCmdStatusConfig = io_popenyield("git --no-pager config cmder.cmdstatus 2>nul")
for line in gitCmdStatusConfig:lines() do if gitCmdStatusConfig then
if string.match(line, 'false') then for line in gitCmdStatusConfig:lines() do
gitCmdStatusConfig:close() if string.match(line, 'false') then
last_git_status_setting = false gitCmdStatusConfig:close()
return false last_git_status_setting = false
return false
end
end end
gitCmdStatusConfig:close()
end end
gitCmdStatusConfig:close()
last_git_status_setting = true last_git_status_setting = true
return true return true
@ -519,13 +558,13 @@ local function git_prompt_filter()
color = colors.conflict color = colors.conflict
end end
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", " "..color.."("..verbatim(branch)..")") clink.prompt.value = gsub_plain(clink.prompt.value, "{git}", " "..color.."("..branch..")")
return false return false
end end
end end
-- No git present or not in git file -- No git present or not in git file
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", "") clink.prompt.value = gsub_plain(clink.prompt.value, "{git}", "")
return false return false
end end
@ -536,8 +575,6 @@ local function hg_prompt_filter()
return false return false
end end
local result = ""
local hg_dir = get_hg_dir() local hg_dir = get_hg_dir()
if hg_dir then if hg_dir then
-- Colors for mercurial status -- Colors for mercurial status
@ -559,16 +596,20 @@ local function hg_prompt_filter()
local color = colors.clean local color = colors.clean
local pipe = io.popen("hg status -amrd 2>&1") local pipe = io.popen("hg status -amrd 2>&1")
local output = pipe:read('*all') if pipe then
local rc = { pipe:close() } output = pipe:read('*all')
pipe:close()
if output ~= nil and output ~= "" then color = colors.dirty end
end
if output ~= nil and output ~= "" then color = colors.dirty end local result = color .. "(" .. branch .. ")"
result = color .. "(" .. branch .. ")" clink.prompt.value = gsub_plain(clink.prompt.value, "{hg}", " "..result)
return false
end end
end end
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", " "..verbatim(result)) -- No hg present or not in hg repo
return false clink.prompt.value = gsub_plain(clink.prompt.value, "{hg}", "")
end end
local function svn_prompt_filter() local function svn_prompt_filter()
@ -589,7 +630,6 @@ local function svn_prompt_filter()
if svn_dir then if svn_dir then
-- if we're inside of svn repo then try to detect current branch -- if we're inside of svn repo then try to detect current branch
local branch = get_svn_branch() local branch = get_svn_branch()
local color
if branch then if branch then
-- If in a different repo or branch than last time, discard cached info -- If in a different repo or branch than last time, discard cached info
if cached_info.svn_dir ~= svn_dir or cached_info.svn_branch ~= branch then if cached_info.svn_dir ~= svn_dir or cached_info.svn_branch ~= branch then
@ -599,7 +639,7 @@ local function svn_prompt_filter()
end end
-- Get the svn status using coroutine if available and option is enabled. Otherwise use a blocking call -- Get the svn status using coroutine if available and option is enabled. Otherwise use a blocking call
local svnStatus local svnStatus
if clink.promptcoroutine and io.popenyield and settings.get("prompt.async") and prompt_overrideSvnStatusOptIn then if clink.promptcoroutine and io.popenyield and settings.get("prompt.async") and prompt_overrideSvnStatusOptIn then -- luacheck: no max line length
svnStatus = clink_promptcoroutine(function () svnStatus = clink_promptcoroutine(function ()
return get_svn_status() return get_svn_status()
end) end)
@ -613,21 +653,22 @@ local function svn_prompt_filter()
svnStatus = get_svn_status() svnStatus = get_svn_status()
end end
if svnStatus == nil then local color
if not svnStatus or svnStatus.error then
color = colors.nostatus color = colors.nostatus
elseif svnStatus then elseif svnStatus.clean then
color = colors.clean color = colors.clean
else else
color = colors.dirty color = colors.dirty
end end
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", " "..color.."("..verbatim(branch)..")") clink.prompt.value = gsub_plain(clink.prompt.value, "{svn}", " "..color.."("..branch..")")
return false return false
end end
end end
-- No svn present or not in svn file -- No svn present or not in svn file
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", "") clink.prompt.value = gsub_plain(clink.prompt.value, "{svn}", "")
return false return false
end end

View File

@ -1,6 +1,10 @@
# For explanation of these and other settings see: # For explanation of these and other settings see:
# https://chrisant996.github.io/clink/clink.html # https://chrisant996.github.io/clink/clink.html
# name: Expand envvars when completing
# type: boolean
match.expand_envvars = True
# name: Sets how command history expansion is applied # name: Sets how command history expansion is applied
# type: enum # type: enum
# options: off,on,not_squoted,not_dquoted,not_quoted # options: off,on,not_squoted,not_dquoted,not_quoted

15
vendor/init.bat vendored
View File

@ -153,7 +153,8 @@ if not "%CMDER_SHELL%" == "cmd" (
set CMDER_ALIASES=0 set CMDER_ALIASES=0
) )
:: Pick right version of Clink :: Pick the right version of Clink
:: TODO: Support for ARM
if "%PROCESSOR_ARCHITECTURE%"=="x86" ( if "%PROCESSOR_ARCHITECTURE%"=="x86" (
set clink_architecture=x86 set clink_architecture=x86
set architecture_bits=32 set architecture_bits=32
@ -166,7 +167,7 @@ if "%PROCESSOR_ARCHITECTURE%"=="x86" (
) )
if "%CMDER_CLINK%" == "1" ( if "%CMDER_CLINK%" == "1" (
REM TODO: If clink is already injected, goto :CLINK_FINISH REM TODO: Detect if clink is already injected, if so goto :CLINK_FINISH
goto :INJECT_CLINK goto :INJECT_CLINK
) )
@ -205,8 +206,10 @@ 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"
if errorlevel 1 ( :: Check if a fatal error occurred when trying to inject Clink
%print_error% "Clink initialization has failed with error code: %errorlevel%" if errorlevel 2 (
REM %print_error% "Clink injection has failed with error code: %errorlevel%"
goto :SKIP_CLINK
) )
goto :CLINK_FINISH goto :CLINK_FINISH
@ -237,8 +240,8 @@ if "%CMDER_CONFIGURED%" GTR "1" (
:: Prepare for git-for-windows :: Prepare for git-for-windows
:: Detect which git.exe version to use :: Detect which git.exe version to use
:: * if the users points as to a specific git, use that :: * if the user points to a specific git, use that
:: * test if a git is in path and if yes, use that :: * test if git is in path and if yes, use that
:: * last, use our vendored git :: * last, use our vendored git
:: also check that we have a recent enough version of git by examining the version string :: also check that we have a recent enough version of git by examining the version string
if defined GIT_INSTALL_ROOT ( if defined GIT_INSTALL_ROOT (

View File

@ -55,6 +55,7 @@ exit /b
set "GIT_VERSION=%%C" set "GIT_VERSION=%%C"
) else ( ) else (
echo "'git --version' returned an improper version string!" echo "'git --version' returned an improper version string!"
%print_debug% :read_version "returned string: '%%A %%B %%C' by executable path: %git_executable%"
pause pause
exit /b exit /b
) )

1
vendor/profile.ps1 vendored
View File

@ -28,7 +28,6 @@ if (!$ENV:CMDER_ROOT) {
# Remove trailing '\' # Remove trailing '\'
$ENV:CMDER_ROOT = ($ENV:CMDER_ROOT).TrimEnd("\") $ENV:CMDER_ROOT = ($ENV:CMDER_ROOT).TrimEnd("\")
# Do not load bundled PsGet if a module installer is already available
# -> recent PowerShell versions include PowerShellGet out of the box # -> recent PowerShell versions include PowerShellGet out of the box
$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue) $moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue)

File diff suppressed because it is too large Load Diff

16
vendor/sources.json vendored
View File

@ -1,22 +1,22 @@
[ [
{ {
"name": "git-for-windows", "name": "git-for-windows",
"version": "2.40.0-rc2.windows.1", "version": "2.45.1.windows.1",
"url": "https://github.com/git-for-windows/git/releases/download/v2.40.0-rc2.windows.1/PortableGit-2.40.0-rc2-64-bit.7z.exe" "url": "https://github.com/git-for-windows/git/releases/download/v2.45.1.windows.1/PortableGit-2.45.1-64-bit.7z.exe"
}, },
{ {
"name": "clink", "name": "clink",
"version": "1.4.22", "version": "1.6.14",
"url": "https://github.com/chrisant996/clink/releases/download/v1.4.22/clink.1.4.22.33f515.zip" "url": "https://github.com/chrisant996/clink/releases/download/v1.6.14/clink.1.6.14.93b83f.zip"
}, },
{ {
"name": "conemu-maximus5", "name": "conemu-maximus5",
"version": "22.12.18", "version": "23.07.24",
"url": "https://github.com/Maximus5/ConEmu/releases/download/v22.12.18/ConEmuPack.221218.7z" "url": "https://github.com/Maximus5/ConEmu/releases/download/v23.07.24/ConEmuPack.230724.7z"
}, },
{ {
"name": "clink-completions", "name": "clink-completions",
"version": "0.4.7", "version": "0.5.2",
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.4.7.zip" "url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.5.2.zip"
} }
] ]