mirror of
https://github.com/cmderdev/cmder.git
synced 2025-03-13 14:14:37 +08:00
Compare commits
210 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
126347025f | ||
|
7ceacb63dd | ||
|
510178852d | ||
|
4d15730d05 | ||
|
25ccfeed77 | ||
|
42315d8cec | ||
|
c6dbb89129 | ||
|
1cfba25beb | ||
|
2007baef6e | ||
|
e220d114b2 | ||
|
4204faa063 | ||
|
540532f126 | ||
|
28f6098d48 | ||
|
b56a6d43cb | ||
|
d2f7136ef8 | ||
|
4daff054eb | ||
|
45fd0c2666 | ||
|
5145a15139 | ||
|
92419a48fc | ||
|
c9b77f618a | ||
|
a2e4884ea1 | ||
|
62a46140eb | ||
|
ae518cded8 | ||
|
4ad76d8274 | ||
|
8a199bf47b | ||
|
457d99da0b | ||
|
52762636dc | ||
|
ed6c9b2bc9 | ||
|
7753622897 | ||
|
18950135ef | ||
|
b59647b570 | ||
|
2135fce19f | ||
|
219c879582 | ||
|
289bcf03a5 | ||
|
50bc05fee7 | ||
|
8d916a4446 | ||
|
5e22496aca | ||
|
8b6add75cf | ||
|
8498447878 | ||
|
0874f4be44 | ||
|
ffb93b1804 | ||
|
092dc4d323 | ||
|
39afad1743 | ||
|
d0cb6b5c23 | ||
|
9ee2bef7cd | ||
|
a409a1cce8 | ||
|
3b8e87de84 | ||
|
faf66542b4 | ||
|
d3497f5eb0 | ||
|
98a1e9621e | ||
|
4f32d23c30 | ||
|
ad5c80bcd2 | ||
|
9a135947af | ||
|
1b9a1e5b6f | ||
|
1adaab963b | ||
|
29650960aa | ||
|
41f0454b05 | ||
|
3ea9728ffd | ||
|
a01fb4c444 | ||
|
4b0344172a | ||
|
4104a5612f | ||
|
5e219fe34e | ||
|
ff7621c1da | ||
|
9be28807cb | ||
|
5d4c45d099 | ||
|
e2168a361c | ||
|
f517494dc4 | ||
|
7542376213 | ||
|
84ee96c64f | ||
|
ad804eda44 | ||
|
15addb87ee | ||
|
e9750ab73d | ||
|
47258fbd2b | ||
|
37c41e80df | ||
|
59e14a1783 | ||
|
34f2aabb8e | ||
|
5a90558714 | ||
|
845720e25a | ||
|
c1f8dfdb27 | ||
|
55676399d5 | ||
|
48e4dff882 | ||
|
a605ec520d | ||
|
5fab87f4d6 | ||
|
c9153c96bf | ||
|
74381ecd19 | ||
|
50c3ea4ab3 | ||
|
8d39f79a90 | ||
|
7b880efda4 | ||
|
3f53d1b927 | ||
|
4aefd0bb71 | ||
|
7daeb465e8 | ||
|
6180aa53b3 | ||
|
23488fcbb2 | ||
|
d838f861af | ||
|
d80202c791 | ||
|
5e3b70338d | ||
|
a4ea326a62 | ||
|
73034f9e31 | ||
|
8875f77573 | ||
|
1d1e815c91 | ||
|
36ad85c7b7 | ||
|
bbb50f99f8 | ||
|
4efbe0bd62 | ||
|
476fd2d324 | ||
|
b3af7c3983 | ||
|
d82fece61e | ||
|
6bd2e260f0 | ||
|
c9d2b33792 | ||
|
9e87f375f1 | ||
|
84262c4476 | ||
|
0b01ea6f63 | ||
|
af6472cb57 | ||
|
fd12ece9af | ||
|
b5ae5eb711 | ||
|
c9e872e826 | ||
|
f99480fd49 | ||
|
834940cddb | ||
|
5135370ec1 | ||
|
92a3c9c215 | ||
|
f22943212b | ||
|
dc2bc9bda7 | ||
|
a03ad615f1 | ||
|
8b3f38ad21 | ||
|
9e55c48200 | ||
|
3b6e1cbf5f | ||
|
e1bf703f50 | ||
|
2e9b512102 | ||
|
9bbc97c981 | ||
|
4766425ad3 | ||
|
470808838f | ||
|
328f4b3073 | ||
|
691addb95c | ||
|
efa2e576d0 | ||
|
5eaf0d0396 | ||
|
0e34d925ce | ||
|
9d2ac373c5 | ||
|
835343f9d6 | ||
|
271fe4c822 | ||
|
24ba9c3fa5 | ||
|
0fdcda98cf | ||
|
42df6cd05b | ||
|
a4fa8d5333 | ||
|
1ba542e915 | ||
|
2c656a9c34 | ||
|
0adbc47c7e | ||
|
e0ade8f3f1 | ||
|
ba97011bbc | ||
|
cfcfe6f282 | ||
|
048692b5b5 | ||
|
7c74931af8 | ||
|
e3d9f81e25 | ||
|
7c309c6a7b | ||
|
0c1ab3fbb1 | ||
|
fc44def0ad | ||
|
fbe3e17eea | ||
|
47caafb800 | ||
|
efb3338f5c | ||
|
3859f6ffc0 | ||
|
4e1918dcf7 | ||
|
dcc06a9d70 | ||
|
d3026aef5d | ||
|
159937b2df | ||
|
3214a6d5ea | ||
|
02970841c3 | ||
|
04bbea7d24 | ||
|
c8d48b7f3e | ||
|
0f6ed93d0d | ||
|
2be652707b | ||
|
96ce96c53d | ||
|
ce23189427 | ||
|
a2a996147e | ||
|
6d46df634e | ||
|
fe08df3fdc | ||
|
39ac92d61c | ||
|
bdbd3aab2b | ||
|
18aea2b258 | ||
|
5cd05b056b | ||
|
c0fc10009a | ||
|
cc5e4a0e60 | ||
|
6e0e1729d8 | ||
|
cbb10de06d | ||
|
0b7e47cdc2 | ||
|
96ca7cea4a | ||
|
0ba0dea6a2 | ||
|
e320ba8aae | ||
|
23b80264b0 | ||
|
90cd1130ac | ||
|
7f71456a41 | ||
|
c606e5c8ee | ||
|
98d28846b3 | ||
|
27f28e6ed7 | ||
|
8b6d1d8a6f | ||
|
211fbd6428 | ||
|
2acb6808ed | ||
|
ee913e09ee | ||
|
ede79c2199 | ||
|
665df2a8c8 | ||
|
a0f234b9d0 | ||
|
5cdb98abb7 | ||
|
9399cbdcd7 | ||
|
c992215f94 | ||
|
55b90cc958 | ||
|
971483b2b7 | ||
|
c8d554220a | ||
|
8feae5d81d | ||
|
6d77c988db | ||
|
04b6ec2ac8 | ||
|
b5bddc929e | ||
|
5d05034810 | ||
|
4243c5c222 |
7
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
7
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
@ -1,7 +1,7 @@
|
|||||||
name: "🐞 Bug report (encountered problems/errors)"
|
name: "🐞 Bug report (encountered problems/errors)"
|
||||||
description: Something is not working as it should
|
description: Something is not working as it should
|
||||||
title: "[Bug] "
|
title: "[Bug] "
|
||||||
labels: [🐞 Bug report]
|
labels: "🐛 Type: Bug"
|
||||||
|
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
@ -20,6 +20,7 @@ body:
|
|||||||
label: Version Information
|
label: Version Information
|
||||||
description: |
|
description: |
|
||||||
Please write your Cmder and ConEmu version below. If applicable, write down your Windows edition too.
|
Please write your Cmder and ConEmu version below. If applicable, write down your Windows edition too.
|
||||||
|
**👉 See:** [How to find out which Cmder version I'm using](https://github.com/cmderdev/cmder/wiki/Cmder-troubleshooting)
|
||||||
placeholder: |
|
placeholder: |
|
||||||
Cmder version:
|
Cmder version:
|
||||||
Operating system:
|
Operating system:
|
||||||
@ -77,7 +78,7 @@ body:
|
|||||||
- **[Clink](https://github.com/chrisant996/clink)**, the default shell in Cmder
|
- **[Clink](https://github.com/chrisant996/clink)**, the default shell in Cmder
|
||||||
- **[ConEmu](https://github.com/Maximus5/ConEmu)**, the terminal emulator
|
- **[ConEmu](https://github.com/Maximus5/ConEmu)**, the terminal emulator
|
||||||
- **[Git/MinGW](https://github.com/git-for-windows/git)**, which also provide *NIX tools (such as `ls`, `mv`, `cp`, etc)
|
- **[Git/MinGW](https://github.com/git-for-windows/git)**, which also provide *NIX tools (such as `ls`, `mv`, `cp`, etc)
|
||||||
- **[clink-completions](https://github.com/repos/vladimir-kotikov/clink-completions)**, which provide autocompletion for clink
|
- **[clink-completions](https://github.com/vladimir-kotikov/clink-completions)**, which provides autocompletion for clink
|
||||||
|
|
||||||
We'll try our best to help you -- but we recommend creating an issue specifically at each of the corresponding repositories for the best result.
|
We'll try our best to help you -- but we recommend creating an issue specifically at each of the corresponding repositories for the best result.
|
||||||
|
|
||||||
@ -90,7 +91,7 @@ body:
|
|||||||
|
|
||||||
#### Prerequisites before submitting an issue
|
#### Prerequisites before submitting an issue
|
||||||
- We do not support any versions older than the current release series, if you are using an older Cmder please update to the latest version first.
|
- We do not support any versions older than the current release series, if you are using an older Cmder please update to the latest version first.
|
||||||
- Verify that the issue is not fixed and is reproducible in the **[latest official Cmder version](https://github.com/cmderdev/cmder/releases).**
|
- Verify that the issue is not already fixed and is reproducible in the **[latest official Cmder version](https://github.com/cmderdev/cmder/releases).**
|
||||||
- Check the **[current issues list](https://github.com/cmderdev/cmder/issues?q=is%3Aissue)** and perform a **search of the issue tracker (including closed ones)** to avoid posting a duplicate bug report.
|
- Check the **[current issues list](https://github.com/cmderdev/cmder/issues?q=is%3Aissue)** and perform a **search of the issue tracker (including closed ones)** to avoid posting a duplicate bug report.
|
||||||
- Make sure this is not a support request or question, both of which are better suited for either the **[discussions section](https://github.com/cmderdev/cmder/discussions)**, or the **[questions section](https://github.com/cmderdev/cmder/issues/new?template=question.yml)**.
|
- Make sure this is not a support request or question, both of which are better suited for either the **[discussions section](https://github.com/cmderdev/cmder/discussions)**, or the **[questions section](https://github.com/cmderdev/cmder/issues/new?template=question.yml)**.
|
||||||
- Verify that the **[wiki](https://github.com/cmderdev/cmder/wiki)** did not contain a suitable solution either.
|
- Verify that the **[wiki](https://github.com/cmderdev/cmder/wiki)** did not contain a suitable solution either.
|
||||||
|
4
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
4
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
@ -1,7 +1,7 @@
|
|||||||
name: "⭐ Feature request (request for new functionality)"
|
name: "⭐ Feature request (request for new functionality)"
|
||||||
description: Help make Cmder even better
|
description: Help make Cmder even better
|
||||||
title: "[Feature request] "
|
title: "[Feature request] "
|
||||||
labels: [⭐ Feature request]
|
labels: "🛠 Type: Feature Request"
|
||||||
|
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
@ -22,7 +22,7 @@ body:
|
|||||||
- **[Clink](https://github.com/chrisant996/clink)**, the default shell in Cmder
|
- **[Clink](https://github.com/chrisant996/clink)**, the default shell in Cmder
|
||||||
- **[ConEmu](https://github.com/Maximus5/ConEmu)**, the terminal emulator
|
- **[ConEmu](https://github.com/Maximus5/ConEmu)**, the terminal emulator
|
||||||
- **[Git/MinGW](https://github.com/git-for-windows/git)**, which also provide *NIX tools (such as `ls`, `mv`, `cp`, etc)
|
- **[Git/MinGW](https://github.com/git-for-windows/git)**, which also provide *NIX tools (such as `ls`, `mv`, `cp`, etc)
|
||||||
- **[clink-completions](https://github.com/repos/vladimir-kotikov/clink-completions)**, which provide autocompletion for clink
|
- **[clink-completions](https://github.com/vladimir-kotikov/clink-completions)**, which provides autocompletion for clink
|
||||||
|
|
||||||
- If you would like to ask for guides on how to integrate Cmder with your favorite IDE of choice, or how to perform a specific task with Cmder, make sure you visit our label section first.
|
- If you would like to ask for guides on how to integrate Cmder with your favorite IDE of choice, or how to perform a specific task with Cmder, make sure you visit our label section first.
|
||||||
|
|
||||||
|
5
.github/ISSUE_TEMPLATE/question.yml
vendored
5
.github/ISSUE_TEMPLATE/question.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: "❓ Question"
|
name: "❓ Question"
|
||||||
description: Something is unclear or needs to be discussed
|
description: Something is unclear or needs to be discussed
|
||||||
labels: [❓ Question]
|
title: "Question: "
|
||||||
|
labels: "❔ Type: Question"
|
||||||
|
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
@ -18,7 +19,7 @@ body:
|
|||||||
|
|
||||||
- If you would like to ask for guides on how to integrate Cmder with your favorite IDE of choice, or how to perform a specific task with Cmder, make sure you visit our label section first.
|
- If you would like to ask for guides on how to integrate Cmder with your favorite IDE of choice, or how to perform a specific task with Cmder, make sure you visit our label section first.
|
||||||
|
|
||||||
You may already have an answer under the Guides or Questions section.
|
You may already have an answer under the [💬 Guides](https://github.com/cmderdev/cmder/issues?q=label%3A%22%F0%9F%92%AC+Type%3A+Guide%22), [📖 Documentation](https://github.com/cmderdev/cmder/issues?q=label%3A%22%F0%9F%93%96+Documentation%22) or [❔ Questions](https://github.com/cmderdev/cmder/issues?q=is%3Aissue+label%3A%22%E2%9D%94+Type%3A+Question%22) section.
|
||||||
|
|
||||||
For a list of labels, visit **[Labels](https://github.com/cmderdev/cmder/labels)**.
|
For a list of labels, visit **[Labels](https://github.com/cmderdev/cmder/labels)**.
|
||||||
|
|
||||||
|
11
.github/dependabot.yml
vendored
Normal file
11
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# To get started with Dependabot version updates, you'll need to specify which
|
||||||
|
# package ecosystems to update and where the package manifests are located.
|
||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions" # See documentation for possible values
|
||||||
|
directory: "/" # Location of package manifests
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
33
.github/workflows/branches.yml
vendored
Normal file
33
.github/workflows/branches.yml
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
name: Update branches
|
||||||
|
|
||||||
|
# Controls when the action will run.
|
||||||
|
on:
|
||||||
|
# Triggers the workflow on push events for the development branch
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||||
|
jobs:
|
||||||
|
# This job updates the development branch with the master branch
|
||||||
|
update-development:
|
||||||
|
# The type of runner that the job will run on
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
|
steps:
|
||||||
|
# Checks-out the repository under $GITHUB_WORKSPACE, so the job can access it
|
||||||
|
- uses: actions/checkout@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
|
32
.github/workflows/build.yml
vendored
32
.github/workflows/build.yml
vendored
@ -8,8 +8,10 @@ name: Build Cmder
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ "master" ]
|
branches: [ "master" ]
|
||||||
|
tags:
|
||||||
|
- "v*"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ "master" ]
|
branches: [ "master", "development" ]
|
||||||
|
|
||||||
#---------------------------------#
|
#---------------------------------#
|
||||||
# environment configuration #
|
# environment configuration #
|
||||||
@ -28,15 +30,17 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
name: Build Project
|
name: Build Project
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
discussions: write
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code (Action from GitHub)
|
- name: Check out repository code (Action from GitHub)
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@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
|
||||||
@ -49,26 +53,38 @@ jobs:
|
|||||||
run: .\pack.ps1 -verbose
|
run: .\pack.ps1 -verbose
|
||||||
|
|
||||||
- name: Upload artifact (cmder.zip)
|
- name: Upload artifact (cmder.zip)
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@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
|
||||||
|
uses: softprops/action-gh-release@v2
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
build/cmder.zip
|
||||||
|
build/cmder.7z
|
||||||
|
build/cmder_mini.zip
|
||||||
|
build/hashes.txt
|
||||||
|
draft: true
|
||||||
|
generate_release_notes: true
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
73
.github/workflows/codeql.yml
vendored
Normal file
73
.github/workflows/codeql.yml
vendored
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
|
||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "master", "development" ]
|
||||||
|
paths-ignore:
|
||||||
|
- '**/*.md'
|
||||||
|
- '**/*.txt'
|
||||||
|
- '.github/**'
|
||||||
|
- '**/.gitignore'
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [ "master", "development" ]
|
||||||
|
paths-ignore:
|
||||||
|
- '**/*.md'
|
||||||
|
- '**/*.txt'
|
||||||
|
- '.github/**'
|
||||||
|
- '**/.gitignore'
|
||||||
|
schedule:
|
||||||
|
- cron: '30 19 * * 0'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: windows-latest
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'cpp' ]
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||||
|
# Use only 'java' to analyze code written in Java, Kotlin or both
|
||||||
|
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
|
||||||
|
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v3
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
|
||||||
|
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||||
|
# queries: security-extended,security-and-quality
|
||||||
|
|
||||||
|
- name: Add MSBuild to PATH
|
||||||
|
uses: microsoft/setup-msbuild@v2
|
||||||
|
|
||||||
|
- name: Build Cmder Launcher
|
||||||
|
shell: pwsh
|
||||||
|
working-directory: scripts
|
||||||
|
run: .\build.ps1 -Compile -verbose
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v3
|
||||||
|
with:
|
||||||
|
category: "/language:${{matrix.language}}"
|
20
.github/workflows/tests.yml
vendored
20
.github/workflows/tests.yml
vendored
@ -4,9 +4,21 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
- development
|
||||||
|
paths-ignore:
|
||||||
|
- '**/*.md'
|
||||||
|
- '**/*.txt'
|
||||||
|
- '.github/**'
|
||||||
|
- '**/.gitignore'
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
- development
|
||||||
|
paths-ignore:
|
||||||
|
- '**/*.md'
|
||||||
|
- '**/*.txt'
|
||||||
|
- '.github/**'
|
||||||
|
- '**/.gitignore'
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
@ -26,10 +38,14 @@ jobs:
|
|||||||
continue-on-error: false
|
continue-on-error: false
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
|
- name: Initialize vendors
|
||||||
|
shell: pwsh
|
||||||
|
working-directory: scripts
|
||||||
|
run: .\build.ps1 -verbose
|
||||||
- name: Testing Clink Shell
|
- name: Testing Clink Shell
|
||||||
run: |
|
run: |
|
||||||
cmd /c vendor\init.bat
|
cmd /c vendor\init.bat /v /d /t
|
||||||
- name: Testing PowerShell
|
- name: Testing PowerShell
|
||||||
run: |
|
run: |
|
||||||
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "Invoke-Expression '. ''vendor\profile.ps1'''"
|
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "Invoke-Expression '. ''vendor\profile.ps1'''"
|
||||||
|
11
.github/workflows/vendor.yml
vendored
11
.github/workflows/vendor.yml
vendored
@ -24,12 +24,14 @@ 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
|
||||||
|
|
||||||
- id: make-changes
|
- id: make-changes
|
||||||
name: Checking for updates
|
name: Checking for updates
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
$currentVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
|
$currentVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
|
||||||
. .\scripts\update.ps1 -verbose
|
. .\scripts\update.ps1 -verbose
|
||||||
@ -40,15 +42,16 @@ jobs:
|
|||||||
foreach ($s in $newVersion) {
|
foreach ($s in $newVersion) {
|
||||||
$oldVersion = ($currentVersion | Where-Object {$_.name -eq $s.name}).version
|
$oldVersion = ($currentVersion | Where-Object {$_.name -eq $s.name}).version
|
||||||
if ($s.version -ne $oldVersion) {
|
if ($s.version -ne $oldVersion) {
|
||||||
|
$repoUrl = ($repoUrl = $s.Url.Replace("/archive/", "/releases/")).Substring(0, $repoUrl.IndexOf("/releases/")) + "/releases"
|
||||||
$listUpdated += "$($s.name) v$($s.version), "
|
$listUpdated += "$($s.name) v$($s.version), "
|
||||||
$updateMessage += "| **$($s.name)** | $oldVersion | **$($s.version)** |`n"
|
$updateMessage += "| **[$($s.name)]($repoUrl)** | $oldVersion | **$($s.version)** |`n"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($count -eq 0) { return }
|
if ($count -eq 0) { return }
|
||||||
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'
|
||||||
@ -57,6 +60,6 @@ jobs:
|
|||||||
${{ env.UPDATE_MESSAGE }}
|
${{ env.UPDATE_MESSAGE }}
|
||||||
---
|
---
|
||||||
Please verify and then **Merge** the pull request to update.
|
Please verify and then **Merge** the pull request to update.
|
||||||
commit-message: 'Update vendored dependencies (${{ env.LIST_UPDATED }})'
|
commit-message: '⬆️ Update dependencies (${{ env.LIST_UPDATED }})'
|
||||||
branch: update-vendor
|
branch: update-vendor
|
||||||
base: master
|
base: master
|
||||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -29,3 +29,5 @@ build/
|
|||||||
launcher/.vs
|
launcher/.vs
|
||||||
launcher/src/version.rc2
|
launcher/src/version.rc2
|
||||||
.vs/*
|
.vs/*
|
||||||
|
.vscode
|
||||||
|
.idea
|
||||||
|
22
CHANGELOG.md
22
CHANGELOG.md
@ -1,11 +1,12 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
## [1.3.20-unreleased](https://ci.appveyor.com/project/MartiUK/cmder/build/artifacts) (2022-03-17)
|
## [1.3.20](https://github.com/cmderdev/cmder/tree/v1.3.20) (2022-03-18)
|
||||||
|
|
||||||
### Changes
|
### Changes
|
||||||
|
|
||||||
- Update Git for Windows to 2.37.1
|
- Update Git for Windows to 2.38.0.windows.1
|
||||||
- Update to Clink 1.3.36
|
- Update Clink to 1.3.47
|
||||||
|
- Update ConEmu to 22.08.07
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
|
|
||||||
@ -14,7 +15,18 @@
|
|||||||
- Fix using Git from vendored Git and other Git for Windows tools from other Git in path.
|
- Fix using Git from vendored Git and other Git for Windows tools from other Git in path.
|
||||||
- Remove setting `term=cygwin` in `init.bat` to fix random `ABCD` characters when using arrow keys in `vim`.
|
- Remove setting `term=cygwin` in `init.bat` to fix random `ABCD` characters when using arrow keys in `vim`.
|
||||||
- See: [Sometimes pressing on arrow keys prints symbols #1691](https://github.com/Maximus5/ConEmu/issues/169)
|
- See: [Sometimes pressing on arrow keys prints symbols #1691](https://github.com/Maximus5/ConEmu/issues/169)
|
||||||
- Fix Git prompt branch when using Git worktree.
|
- Fix #2654: blank space added between {cwd} and version_control variable by @geekrumper in https://github.com/cmderdev/cmder/pull/2661
|
||||||
|
- Fix #2659: Use get_hg_branch() to get Mercurial branch information. by @vsajip in https://github.com/cmderdev/cmder/pull/2660
|
||||||
|
- Fix Git prompt branch when using Git worktree by @daxgames in https://github.com/cmderdev/cmder/pull/2680
|
||||||
|
- Add optional clink async prompt update for svn status by @Mikaz-fr in https://github.com/cmderdev/cmder/pull/2703
|
||||||
|
- Better bat by @daxgames in https://github.com/cmderdev/cmder/pull/2742
|
||||||
|
- Related to #2654: Move space from "{git}{hg}{svn}" to individual parts by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2738
|
||||||
|
- Use TaskDialog instead of MessageBox (Fixes Builds) by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2746
|
||||||
|
- Add bin\cmder_shell.cmd by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2747
|
||||||
|
- Fix build system scripts (closes #2723) by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2748
|
||||||
|
- Custom option for launcher title by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2752
|
||||||
|
- Use Github Actions to build and release by @MartiUK in https://github.com/cmderdev/cmder/pull/2725
|
||||||
|
- Re-factor the build script to distinguish each step by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2758
|
||||||
|
|
||||||
## [1.3.19](https://github.com/cmderdev/cmder/tree/v1.3.19) (2022-01-15)
|
## [1.3.19](https://github.com/cmderdev/cmder/tree/v1.3.19) (2022-01-15)
|
||||||
|
|
||||||
@ -666,7 +678,7 @@ We now use a forked version of clink since its original author is missing and we
|
|||||||
* 'ls' is no longer recognized command [\#757](https://github.com/cmderdev/cmder/issues/757)
|
* 'ls' is no longer recognized command [\#757](https://github.com/cmderdev/cmder/issues/757)
|
||||||
* I can't run de Cmder.exe [\#755](https://github.com/cmderdev/cmder/issues/755)
|
* I can't run de Cmder.exe [\#755](https://github.com/cmderdev/cmder/issues/755)
|
||||||
* Multiple location references when maximizing [\#753](https://github.com/cmderdev/cmder/issues/753)
|
* Multiple location references when maximizing [\#753](https://github.com/cmderdev/cmder/issues/753)
|
||||||
* CLink completions for npm increase cmder startup time for one second [\#750](https://github.com/cmderdev/cmder/issues/750)
|
* Clink completions for npm increase cmder startup time for one second [\#750](https://github.com/cmderdev/cmder/issues/750)
|
||||||
* Prevent other apps from overwriting the prompt? [\#749](https://github.com/cmderdev/cmder/issues/749)
|
* Prevent other apps from overwriting the prompt? [\#749](https://github.com/cmderdev/cmder/issues/749)
|
||||||
* cmder.exe infected with Variant.Kazy.767238 [\#748](https://github.com/cmderdev/cmder/issues/748)
|
* cmder.exe infected with Variant.Kazy.767238 [\#748](https://github.com/cmderdev/cmder/issues/748)
|
||||||
* cmder.exe considered harmful by Bitdefender [\#744](https://github.com/cmderdev/cmder/issues/744)
|
* cmder.exe considered harmful by Bitdefender [\#744](https://github.com/cmderdev/cmder/issues/744)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# How to contribute
|
# How to contribute
|
||||||
|
|
||||||
Unfortunately we all can't work on cmder every day of the year, so I have decided to write some guidelines for contributing.
|
Unfortunately we all can't work on Cmder every day of the year, so I have decided to write some guidelines for contributing.
|
||||||
|
|
||||||
If you follow them your contribution will likely be pulled in quicker.
|
If you follow them your contribution will likely be pulled in quicker.
|
||||||
|
|
||||||
|
@ -5,7 +5,12 @@ SET CMDER_ROOT=%~dp0
|
|||||||
@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\user_ConEmu.xml" (
|
if not exist "%CMDER_ROOT%\config\user_ConEmu.xml" (
|
||||||
copy "%CMDER_ROOT%\vendor\ConEmu.xml.default" "%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" (
|
if exist "%~1" (
|
||||||
|
32
README.md
32
README.md
@ -1,6 +1,6 @@
|
|||||||
# Cmder
|
# Cmder
|
||||||
|
|
||||||
[](https://gitter.im/cmderdev/cmder?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://ci.appveyor.com/project/MartiUK/cmder) [](https://github.com/cmderdev/cmder/actions/workflows/build.yml)
|
[](https://gitter.im/cmderdev/cmder?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://ci.appveyor.com/project/cmderdev/cmder) [](https://github.com/cmderdev/cmder/actions/workflows/build.yml)
|
||||||
|
|
||||||
Cmder is a **software package** created out of pure frustration over absence of usable console emulator on Windows. It is based on [ConEmu](https://conemu.github.io/) with *major* config overhaul, comes with a Monokai color scheme, amazing [clink](https://chrisant996.github.io/clink/) (further enhanced by [clink-completions](https://github.com/vladimir-kotikov/clink-completions)) and a custom prompt layout.
|
Cmder is a **software package** created out of pure frustration over absence of usable console emulator on Windows. It is based on [ConEmu](https://conemu.github.io/) with *major* config overhaul, comes with a Monokai color scheme, amazing [clink](https://chrisant996.github.io/clink/) (further enhanced by [clink-completions](https://github.com/vladimir-kotikov/clink-completions)) and a custom prompt layout.
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ Cmder is a **software package** created out of pure frustration over absence of
|
|||||||
|
|
||||||
## Why use it
|
## Why use it
|
||||||
|
|
||||||
The main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies, which makes it great for **USB Sticks** or **cloud storage**. So you can carry your console, aliases and binaries (like wget, curl and git) with you anywhere.
|
The main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies, which makes it great for **USB Sticks** or **cloud storage**. So you can carry your console, aliases and binaries (like `wget`, `curl` and `git`) with you anywhere.
|
||||||
|
|
||||||
The Cmder's user interface is also designed to be more eye pleasing, and you can compare the main differences between Cmder and ConEmu [here](https://conemu.github.io/en/cmder.html).
|
The Cmder's user interface is also designed to be more eye pleasing, and you can compare the main differences between Cmder and ConEmu [here](https://conemu.github.io/en/cmder.html).
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ So you've experimented with Cmder a little and want to give it a shot in a more
|
|||||||
1. Open a terminal as an Administrator
|
1. Open a terminal as an Administrator
|
||||||
2. Navigate to the directory you have placed Cmder
|
2. Navigate to the directory you have placed Cmder
|
||||||
3. Execute `.\cmder.exe /REGISTER ALL`
|
3. Execute `.\cmder.exe /REGISTER ALL`
|
||||||
_If you get a message "Access Denied" ensure you are executing the command in an **Administrator** prompt._
|
_If you get an "Access Denied" message, make sure you are executing the command in an **Administrator** prompt._
|
||||||
|
|
||||||
In a file explorer window right click in or on a directory to see "Cmder Here" in the context menu.
|
In a file explorer window right click in or on a directory to see "Cmder Here" in the context menu.
|
||||||
|
|
||||||
@ -115,11 +115,11 @@ You can open multiple tabs each containing one of the following shells:
|
|||||||
|
|
||||||
Cmder, PowerShell, and Bash tabs all run on top of the Windows Console API and work as you might expect in Cmder with access to use ConEmu's color schemes, key bindings and other settings defined in the ConEmu Settings dialog.
|
Cmder, PowerShell, and Bash tabs all run on top of the Windows Console API and work as you might expect in Cmder with access to use ConEmu's color schemes, key bindings and other settings defined in the ConEmu Settings dialog.
|
||||||
|
|
||||||
⚠ *NOTE:* Only the full edition of Cmder comes with a pre-installed bash, using a vendored [git-for-windows](https://gitforwindows.org/) installation. The pre-configured Bash tabs may not work on Cmder mini edition without additional configuration.
|
⚠ *Note:* Only the full edition of Cmder comes with a pre-installed bash, using a vendored [git-for-windows](https://gitforwindows.org/) installation. The pre-configured Bash tabs may not work on Cmder mini edition without additional configuration.
|
||||||
|
|
||||||
You may however, choose to use an external installation of bash, such as Microsoft's [Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) (called WSL) or the [Cygwin](https://cygwin.com/) project which provides POSIX support on windows.
|
You may however, choose to use an external installation of bash, such as Microsoft's [Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) (called WSL) or the [Cygwin](https://cygwin.com/) project which provides POSIX support on windows.
|
||||||
|
|
||||||
⚠ *NOTE:* Mintty tabs use a program called 'mintty' as the terminal emulator that is not based on the Windows Console API, rather it's rendered graphically by ConEmu. Mintty differs from the other tabs in that it supports xterm/xterm-256color TERM types, and does not work with ConEmu settings like color schemes and key bindings. As such, some differences in functionality are to be expected, such as Cmder not being able to apply a system-wide configuration to it.
|
⚠ *Note:* Mintty tabs use a program called 'mintty' as the terminal emulator that is not based on the Windows Console API, rather it's rendered graphically by ConEmu. Mintty differs from the other tabs in that it supports xterm/xterm-256color TERM types, and does not work with ConEmu settings like color schemes and key bindings. As such, some differences in functionality are to be expected, such as Cmder not being able to apply a system-wide configuration to it.
|
||||||
|
|
||||||
As a result mintty specific config is done via the `[%USERPROFILE%|$HOME]/.minttyrc` file. You may read more about Mintty and its config file [here](https://github.com/mintty/mintty).
|
As a result mintty specific config is done via the `[%USERPROFILE%|$HOME]/.minttyrc` file. You may read more about Mintty and its config file [here](https://github.com/mintty/mintty).
|
||||||
|
|
||||||
@ -188,7 +188,7 @@ Documentation is in the file for each setting.
|
|||||||
| (custom arguments) | User defined arguments processed by `cexec`. Type `cexec /?` for more usage. | not set |
|
| (custom arguments) | User defined arguments processed by `cexec`. Type `cexec /?` for more usage. | not set |
|
||||||
|
|
||||||
### Cmder Shell User Config
|
### Cmder Shell User Config
|
||||||
Single user portable configuration is possible using the cmder specific shell config files. Edit the below files to add your own configuration:
|
Single user portable configuration is possible using the Cmder specific shell config files. Edit the below files to add your own configuration:
|
||||||
|
|
||||||
| Shell | Cmder Portable User Config |
|
| Shell | Cmder Portable User Config |
|
||||||
| ------------- | ----------------------------------------- |
|
| ------------- | ----------------------------------------- |
|
||||||
@ -196,7 +196,7 @@ Single user portable configuration is possible using the cmder specific shell co
|
|||||||
| PowerShell | `$ENV:CMDER_ROOT\config\user_profile.ps1` |
|
| PowerShell | `$ENV:CMDER_ROOT\config\user_profile.ps1` |
|
||||||
| Bash/Mintty | `$CMDER_ROOT/config/user_profile.sh` |
|
| Bash/Mintty | `$CMDER_ROOT/config/user_profile.sh` |
|
||||||
|
|
||||||
Note: Bash and Mintty sessions will also source the `$HOME/.bashrc` file if it exists after it sources `$CMDER_ROOT/config/user_profile.sh`.
|
**Note:** Bash and Mintty sessions will also source the `$HOME/.bashrc` file if it exists after it sources `$CMDER_ROOT/config/user_profile.sh`.
|
||||||
|
|
||||||
You can write `*.cmd|*.bat`, `*.ps1`, and `*.sh` scripts and just drop them in the `%CMDER_ROOT%\config\profile.d` folder to add startup config to Cmder.
|
You can write `*.cmd|*.bat`, `*.ps1`, and `*.sh` scripts and just drop them in the `%CMDER_ROOT%\config\profile.d` folder to add startup config to Cmder.
|
||||||
|
|
||||||
@ -230,7 +230,7 @@ Aliases defined using the `alias.bat` command will automatically be saved in the
|
|||||||
|
|
||||||
To make an alias and/or any other profile settings permanent add it to one of the following:
|
To make an alias and/or any other profile settings permanent add it to one of the following:
|
||||||
|
|
||||||
Note: These are loaded in this order by `$CMDER_ROOT/vendor/init.bat`. Anything stored in `%CMDER_ROOT%` will be a portable setting and will follow cmder to another machine.
|
Note: These are loaded in this order by `$CMDER_ROOT/vendor/init.bat`. Anything stored in `%CMDER_ROOT%` will be a portable setting and will follow Cmder to another machine.
|
||||||
|
|
||||||
* `%CMDER_ROOT%\config\profile.d\*.cmd` and `\*.bat`
|
* `%CMDER_ROOT%\config\profile.d\*.cmd` and `\*.bat`
|
||||||
* `%CMDER_ROOT%\config\user_aliases.cmd`
|
* `%CMDER_ROOT%\config\user_aliases.cmd`
|
||||||
@ -241,7 +241,7 @@ Bash shells support simple and complex aliases with optional parameters natively
|
|||||||
|
|
||||||
To make an alias and/or any other profile settings permanent add it to one of the following:
|
To make an alias and/or any other profile settings permanent add it to one of the following:
|
||||||
|
|
||||||
Note: These are loaded in this order by `$CMDER_ROOT/vendor/git-for-windows/etc/profile.d/cmder.sh`. Anything stored in `$CMDER_ROOT` will be a portable setting and will follow cmder to another machine.
|
Note: These are loaded in this order by `$CMDER_ROOT/vendor/git-for-windows/etc/profile.d/cmder.sh`. Anything stored in `$CMDER_ROOT` will be a portable setting and will follow Cmder to another machine.
|
||||||
|
|
||||||
* `$CMDER_ROOT/config/profile.d/*.sh`
|
* `$CMDER_ROOT/config/profile.d/*.sh`
|
||||||
* `$CMDER_ROOT/config/user_profile.sh`
|
* `$CMDER_ROOT/config/user_profile.sh`
|
||||||
@ -254,7 +254,7 @@ PowerShell has native simple alias support, for example `[new-alias | set-alias]
|
|||||||
|
|
||||||
To make an alias and/or any other profile settings permanent add it to one of the following:
|
To make an alias and/or any other profile settings permanent add it to one of the following:
|
||||||
|
|
||||||
Note: These are loaded in this order by `$ENV:CMDER_ROOT\vendor\user_profile.ps1`. Anything stored in `$ENV:CMDER_ROOT` will be a portable setting and will follow cmder to another machine.
|
Note: These are loaded in this order by `$ENV:CMDER_ROOT\vendor\user_profile.ps1`. Anything stored in `$ENV:CMDER_ROOT` will be a portable setting and will follow Cmder to another machine.
|
||||||
|
|
||||||
* `$ENV:CMDER_ROOT\config\profile.d\*.ps1`
|
* `$ENV:CMDER_ROOT\config\profile.d\*.ps1`
|
||||||
* `$ENV:CMDER_ROOT\config\user_profile.ps1`
|
* `$ENV:CMDER_ROOT\config\user_profile.ps1`
|
||||||
@ -292,7 +292,7 @@ The destination file extension depends on the shell you use in that environment.
|
|||||||
* bash - Copy to `/etc/profile.d/cmder_exinit.sh`
|
* bash - Copy to `/etc/profile.d/cmder_exinit.sh`
|
||||||
* zsh - Copy to `/etc/profile.d/cmder_exinit.zsh`
|
* zsh - Copy to `/etc/profile.d/cmder_exinit.zsh`
|
||||||
|
|
||||||
Uncomment and edit the below line in the script to use Cmder config even when launched from outside Cmder.
|
Uncomment and edit the line below in the script to use Cmder config even when launched 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.
|
||||||
@ -344,9 +344,9 @@ To conditionally start `notepad.exe` when you start a specific `cmder` task:
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
To see detailed usage of `cexec`, type `cexec /?` in cmder.
|
To see detailed usage of `cexec`, type `cexec /?` in Cmder.
|
||||||
|
|
||||||
### Integrating Cmder with [Hyper](https://github.com/zeit/hyper), [Microsoft VS Code](https://code.visualstudio.com/), and your favorite IDEs
|
### Integrating Cmder with [Windows Terminal](https://github.com/cmderdev/cmder/wiki/Seamless-Windows-Terminal-Integration), [VS Code](https://github.com/cmderdev/cmder/wiki/Seamless-VS-Code-Integration), and your favorite IDEs
|
||||||
|
|
||||||
Cmder by default comes with a vendored ConEmu installation as the underlying terminal emulator, as stated [here](https://conemu.github.io/en/cmder.html).
|
Cmder by default comes with a vendored ConEmu installation as the underlying terminal emulator, as stated [here](https://conemu.github.io/en/cmder.html).
|
||||||
|
|
||||||
@ -386,7 +386,11 @@ If you do not have a `[cmder_root]/config/user[-|_]conemu.xml`, you are running
|
|||||||
|
|
||||||
You can download builds of the current development branch by going to AppVeyor via the following link:
|
You can download builds of the current development branch by going to AppVeyor via the following link:
|
||||||
|
|
||||||
[](https://ci.appveyor.com/project/MartiUK/cmder/branch/master/artifacts)
|
[](https://ci.appveyor.com/project/cmderdev/cmder/branch/master/artifacts)
|
||||||
|
|
||||||
|
The latest download builds by GitHub Actions can be downloaded from the link below:
|
||||||
|
|
||||||
|
[](https://github.com/cmderdev/cmder/actions/workflows/build.yml)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
24
SECURITY.md
Normal file
24
SECURITY.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| 1.3.x | :white_check_mark: |
|
||||||
|
| < 1.3 | ❎ |
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
If you discover a security issue in our project, please report it to [MartiUK](https://github.com/MartiUK). We will acknowledge your email within 24 hours and provide a more detailed response within 48 hours. We will try to fix the issue as soon as possible and inform you when a new version is released.
|
||||||
|
|
||||||
|
Please include as much of the information listed below as you can to help us better understand and resolve the issue:
|
||||||
|
|
||||||
|
- The nature of the issue
|
||||||
|
- The affected source file(s) with full paths
|
||||||
|
- The location of the vulnerable code (tag/branch/commit or direct URL)
|
||||||
|
- Any special configuration needed to reproduce the issue
|
||||||
|
- Detailed steps to reproduce the issue
|
||||||
|
- Proof-of-concept or exploit code (if possible)
|
||||||
|
- The impact of the issue, including how an attacker could exploit it
|
||||||
|
|
||||||
|
Please do not disclose the vulnerability publicly until we have resolved it.
|
60
appveyor.yml
60
appveyor.yml
@ -1,60 +0,0 @@
|
|||||||
#---------------------------------#
|
|
||||||
# general configuration #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
version: 1.0.{build}-{branch}
|
|
||||||
|
|
||||||
# branches to build
|
|
||||||
branches:
|
|
||||||
# blacklist
|
|
||||||
except:
|
|
||||||
- gh-pages
|
|
||||||
|
|
||||||
#---------------------------------#
|
|
||||||
# environment configuration #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
# Operating system (build VM template)
|
|
||||||
os: Visual Studio 2022
|
|
||||||
|
|
||||||
#---------------------------------#
|
|
||||||
# build configuration #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
build_script:
|
|
||||||
- ps: cd scripts; .\build.ps1 -Compile -verbose
|
|
||||||
|
|
||||||
after_build:
|
|
||||||
- ps: .\pack.ps1 -verbose
|
|
||||||
|
|
||||||
# Disable test search, since we don't have any.
|
|
||||||
test: off
|
|
||||||
|
|
||||||
#---------------------------------#
|
|
||||||
# artifacts #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
artifacts:
|
|
||||||
- path: build\cmder.zip
|
|
||||||
name: cmderzip
|
|
||||||
|
|
||||||
- path: build\cmder.7z
|
|
||||||
name: cmder7z
|
|
||||||
|
|
||||||
- path: build\cmder_mini.zip
|
|
||||||
name: cmdermini
|
|
||||||
|
|
||||||
- path: build\hashes.txt
|
|
||||||
name: hashes
|
|
||||||
|
|
||||||
#---------------------------------#
|
|
||||||
# notifications #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
notifications:
|
|
||||||
# Webhook
|
|
||||||
- provider: Webhook
|
|
||||||
url: https://webhooks.gitter.im/e/d673abb1b2e659dcd625
|
|
||||||
on_build_success: true
|
|
||||||
on_build_failure: true
|
|
||||||
on_build_status_changed: true
|
|
@ -425,11 +425,6 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
|
|||||||
swprintf_s(args, L"%s /single", args);
|
swprintf_s(args, L"%s /single", args);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!streqi(cmderTask.c_str(), L""))
|
|
||||||
{
|
|
||||||
swprintf_s(args, L"%s /run {%s}", args, cmderTask.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!streqi(cmderTitle.c_str(), L""))
|
if (!streqi(cmderTitle.c_str(), L""))
|
||||||
{
|
{
|
||||||
swprintf_s(args, L"%s /title \"%s\"", args, cmderTitle.c_str());
|
swprintf_s(args, L"%s /title \"%s\"", args, cmderTitle.c_str());
|
||||||
@ -445,6 +440,14 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
|
|||||||
swprintf_s(args, L"%s %s", args, cmderConEmuArgs.c_str());
|
swprintf_s(args, L"%s %s", args, cmderConEmuArgs.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The `/run` arg and its value MUST be the last arg of ConEmu
|
||||||
|
// see : https://conemu.github.io/en/ConEmuArgs.html
|
||||||
|
// > This must be the last used switch (excepting -new_console and -cur_console)
|
||||||
|
if (!streqi(cmderTask.c_str(), L""))
|
||||||
|
{
|
||||||
|
swprintf_s(args, L"%s /run {%s}", args, cmderTask.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
||||||
if (wcscmp(userConfigDirPath, configDirPath) != 0)
|
if (wcscmp(userConfigDirPath, configDirPath) != 0)
|
||||||
{
|
{
|
||||||
@ -466,9 +469,6 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
|
|||||||
MessageBox(NULL, _T("Unable to create the ConEmu process!"), _T("Error"), MB_OK);
|
MessageBox(NULL, _T("Unable to create the ConEmu process!"), _T("Error"), MB_OK);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL);
|
|
||||||
lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)L"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL); // For Windows >= 8
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsUserOnly(std::wstring opt)
|
bool IsUserOnly(std::wstring opt)
|
||||||
|
@ -39,12 +39,12 @@
|
|||||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
|
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
|
||||||
<!-- Windows 8.1 -->
|
<!-- Windows 8.1 -->
|
||||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
|
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
|
||||||
<!-- Windows 10 -->
|
<!-- Windows 10 and Windows 11 -->
|
||||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
|
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
|
||||||
</application>
|
</application>
|
||||||
</compatibility>
|
</compatibility>
|
||||||
|
|
||||||
<!-- Add dpi awareness -->
|
<!-- Add DPI awareness -->
|
||||||
<asmv3:application>
|
<asmv3:application>
|
||||||
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
|
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
|
||||||
<dpiAware>true/pm</dpiAware>
|
<dpiAware>true/pm</dpiAware>
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* WARNING: do NOT modify this file! the content of this file should be
|
* WARNING: This file should NOT be manually modified!
|
||||||
* automatically genereted before AppVeyor builds using the
|
* The contents will be automatically generated using the `.ps1` PowerShell scripts,
|
||||||
* respective .ps1 Powershell scripts.
|
* during builds by the CI.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -3,12 +3,15 @@ launcher
|
|||||||
.gitattributes
|
.gitattributes
|
||||||
.git
|
.git
|
||||||
.github
|
.github
|
||||||
|
.vs
|
||||||
|
.vscode
|
||||||
|
.idea
|
||||||
*.md
|
*.md
|
||||||
build
|
build
|
||||||
scripts
|
scripts
|
||||||
config\.history
|
config\.history
|
||||||
packignore
|
packignore
|
||||||
icons\Thumbs.db
|
Thumbs.db
|
||||||
icons\cmder_icon.psd
|
icons\cmder_icon.psd
|
||||||
icons\icon_16*.png
|
icons\icon_16*.png
|
||||||
icons\icon_32*.png
|
icons\icon_32*.png
|
||||||
@ -20,3 +23,5 @@ appveyor.yml
|
|||||||
vendor\cmder.sh
|
vendor\cmder.sh
|
||||||
vendor\git-prompt.sh
|
vendor\git-prompt.sh
|
||||||
config\user-*
|
config\user-*
|
||||||
|
clink_history*
|
||||||
|
*.log
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
.LINK
|
.LINK
|
||||||
http://cmder.app/ - Project Home
|
http://cmder.app/ - Project Home
|
||||||
#>
|
#>
|
||||||
[CmdletBinding(SupportsShouldProcess=$true)]
|
[CmdletBinding(SupportsShouldProcess = $true)]
|
||||||
Param(
|
Param(
|
||||||
# CmdletBinding will give us;
|
# CmdletBinding will give us;
|
||||||
# -verbose switch to turn on logging and
|
# -verbose switch to turn on logging and
|
||||||
@ -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) {
|
||||||
@ -88,7 +88,7 @@ if ($Compile) {
|
|||||||
Pop-Location
|
Pop-Location
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-Not $noVendor) {
|
if (-not $noVendor) {
|
||||||
# Check for requirements
|
# Check for requirements
|
||||||
Ensure-Exists $sourcesPath
|
Ensure-Exists $sourcesPath
|
||||||
Ensure-Executable "7z"
|
Ensure-Executable "7z"
|
||||||
@ -108,12 +108,14 @@ if (-Not $noVendor) {
|
|||||||
$ConEmuXmlSave = Join-Path $config "ConEmu.xml"
|
$ConEmuXmlSave = Join-Path $config "ConEmu.xml"
|
||||||
Write-Verbose "Backup '$ConEmuXml' to '$ConEmuXmlSave'"
|
Write-Verbose "Backup '$ConEmuXml' to '$ConEmuXmlSave'"
|
||||||
Copy-Item $ConEmuXml $ConEmuXmlSave
|
Copy-Item $ConEmuXml $ConEmuXmlSave
|
||||||
} else { $ConEmuXml = "" }
|
}
|
||||||
} else { $ConEmuXml = "" }
|
else { $ConEmuXml = "" }
|
||||||
|
}
|
||||||
|
else { $ConEmuXml = "" }
|
||||||
|
|
||||||
# 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
|
||||||
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 [string]$cmder_root.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
|
||||||
}
|
}
|
||||||
@ -160,7 +162,7 @@ if (-Not $noVendor) {
|
|||||||
Pop-Location
|
Pop-Location
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-Not $Compile -Or $noVendor) {
|
if (-not $Compile -or $noVendor) {
|
||||||
Write-Warning "You are not building the full project, Use -Compile without -noVendor"
|
Write-Warning "You are not building the full project, Use -Compile without -noVendor"
|
||||||
Write-Warning "This cannot be a release. Test build only!"
|
Write-Warning "This cannot be a release. Test build only!"
|
||||||
return
|
return
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
https://github.com/cmderdev/cmder - Project Home
|
https://github.com/cmderdev/cmder - Project Home
|
||||||
#>
|
#>
|
||||||
|
|
||||||
[CmdletBinding(SupportsShouldProcess=$true)]
|
[CmdletBinding(SupportsShouldProcess = $true)]
|
||||||
Param(
|
Param(
|
||||||
# CmdletBinding will give us;
|
# CmdletBinding will give us;
|
||||||
# -verbose switch to turn on logging and
|
# -verbose switch to turn on logging and
|
||||||
@ -42,9 +42,9 @@ $ErrorActionPreference = "Stop"
|
|||||||
Ensure-Executable "7z"
|
Ensure-Executable "7z"
|
||||||
|
|
||||||
$targets = @{
|
$targets = @{
|
||||||
"cmder.zip" = $null;
|
"cmder.7z" = "-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -myx=7 -mqs=on";
|
||||||
"cmder.7z" = "-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on";
|
"cmder.zip" = "-mm=Deflate -mfb=128 -mpass=3";
|
||||||
"cmder_mini.zip" = "-mm=Deflate -mfb=258 -mpass=15 -xr!`"vendor\git-for-windows`"";
|
"cmder_mini.zip" = "-xr!`"vendor\git-for-windows`"";
|
||||||
}
|
}
|
||||||
|
|
||||||
Push-Location -Path $cmderRoot
|
Push-Location -Path $cmderRoot
|
||||||
@ -63,7 +63,7 @@ $version = Get-VersionStr
|
|||||||
|
|
||||||
if ($PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent) {
|
if ($PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent) {
|
||||||
Write-Verbose "Packing Cmder $version in $saveTo..."
|
Write-Verbose "Packing Cmder $version in $saveTo..."
|
||||||
$excluded = (Get-Content -Path "$cmderRoot\packignore") -Split [System.Environment]::NewLine | Where-Object {$_}
|
$excluded = (Get-Content -Path "$cmderRoot\packignore") -Split [System.Environment]::NewLine | Where-Object { $_ }
|
||||||
Get-ChildItem $cmderRoot -Force -Exclude $excluded
|
Get-ChildItem $cmderRoot -Force -Exclude $excluded
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
.LINK
|
.LINK
|
||||||
http://cmder.app/ - Project Home
|
http://cmder.app/ - Project Home
|
||||||
#>
|
#>
|
||||||
[CmdletBinding(SupportsShouldProcess=$true)]
|
[CmdletBinding(SupportsShouldProcess = $true)]
|
||||||
Param(
|
Param(
|
||||||
# CmdletBinding will give us;
|
# CmdletBinding will give us;
|
||||||
# -verbose switch to turn on logging and
|
# -verbose switch to turn on logging and
|
||||||
@ -55,7 +55,7 @@ function Match-Filenames {
|
|||||||
|
|
||||||
$position = 0
|
$position = 0
|
||||||
|
|
||||||
if ([String]::IsNullOrEmpty($filename) -Or [String]::IsNullOrEmpty($filenameDownload)) {
|
if ([String]::IsNullOrEmpty($filename) -or [String]::IsNullOrEmpty($filenameDownload)) {
|
||||||
throw "Either one or both filenames are empty!"
|
throw "Either one or both filenames are empty!"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,20 +88,26 @@ function Fetch-DownloadUrl {
|
|||||||
|
|
||||||
$url = [uri] $urlStr
|
$url = [uri] $urlStr
|
||||||
|
|
||||||
if ((-Not $url) -Or ($null -eq $url) -Or ($url -eq '')) {
|
if ((-not $url) -or ($null -eq $url) -or ($url -eq '')) {
|
||||||
throw "Failed to parse url: $urlStr"
|
throw "Failed to parse url: $urlStr"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-Not ("http", "https" -Contains $url.Scheme)) {
|
if (-not ("http", "https" -contains $url.Scheme)) {
|
||||||
throw "unknown source scheme: $($url.Scheme)"
|
throw "unknown source scheme: $($url.Scheme)"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-Not ($url.Host -ilike "*github.com")) {
|
if (-not ($url.Host -ilike "*github.com")) {
|
||||||
throw "unknown source domain: $($url.Host)"
|
throw "unknown source domain: $($url.Host)"
|
||||||
}
|
}
|
||||||
|
|
||||||
$p = $url.Segments.Split([Environment]::NewLine)
|
$p = $url.Segments.Split([Environment]::NewLine)
|
||||||
|
|
||||||
|
$headers = @{}
|
||||||
|
|
||||||
|
if ($env:GITHUB_TOKEN) {
|
||||||
|
$headers["Authorization"] = "token $($env:GITHUB_TOKEN)"
|
||||||
|
}
|
||||||
|
|
||||||
# Api server for GitHub
|
# Api server for GitHub
|
||||||
$urlHost = "api.github.com"
|
$urlHost = "api.github.com"
|
||||||
|
|
||||||
@ -110,18 +116,18 @@ function Fetch-DownloadUrl {
|
|||||||
|
|
||||||
$apiUrl = [uri] (New-Object System.UriBuilder -ArgumentList $url.Scheme, $urlHost, -1, $urlPath).Uri
|
$apiUrl = [uri] (New-Object System.UriBuilder -ArgumentList $url.Scheme, $urlHost, -1, $urlPath).Uri
|
||||||
|
|
||||||
$info = Invoke-RestMethod -Uri $apiUrl
|
$info = Invoke-RestMethod -Uri $apiUrl -Headers $headers
|
||||||
|
|
||||||
$downloadLinks = (New-Object System.Collections.Generic.List[System.Object])
|
$downloadLinks = (New-Object System.Collections.Generic.List[System.Object])
|
||||||
|
|
||||||
$charCount = 0
|
$charCount = 0
|
||||||
|
|
||||||
if (-Not ($info -Is [array])) {
|
if (-not ($info -is [array])) {
|
||||||
throw "The response received from API server is invalid"
|
throw "The response received from API server is invalid"
|
||||||
}
|
}
|
||||||
|
|
||||||
:loop foreach ($i in $info) {
|
:loop foreach ($i in $info) {
|
||||||
if (-Not ($i.assets -Is [array])) {
|
if (-not ($i.assets -is [array])) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,12 +163,12 @@ function Fetch-DownloadUrl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Special case for archive downloads of repository
|
# Special case for archive downloads of repository
|
||||||
if (($null -eq $downloadLinks) -Or (-Not $downloadLinks)) {
|
if (($null -eq $downloadLinks) -or (-not $downloadLinks)) {
|
||||||
if ((($p | % {$_.Trim('/')}) -Contains "archive") -And $info[0].tag_name) {
|
if ((($p | ForEach-Object { $_.Trim('/') }) -contains "archive") -and $info[0].tag_name) {
|
||||||
for ($i = 0; $i -lt $p.Length; $i++) {
|
for ($i = 0; $i -lt $p.Length; $i++) {
|
||||||
if ($p[$i].Trim('/') -eq "archive") {
|
if ($p[$i].Trim('/') -eq "archive") {
|
||||||
$p[$i+1] = $info[0].tag_name + ".zip"
|
$p[$i + 1] = $info[0].tag_name + ".zip"
|
||||||
$downloadLinks = $url.Scheme + "://" + $url.Host + ($p -Join '')
|
$downloadLinks = $url.Scheme + "://" + $url.Host + ($p -join '')
|
||||||
return $downloadLinks
|
return $downloadLinks
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -188,11 +194,11 @@ function Fetch-DownloadUrl {
|
|||||||
|
|
||||||
$downloadLinks = $temp | Where-Object { (Match-Filenames $url $_ true) -eq $charCount }
|
$downloadLinks = $temp | Where-Object { (Match-Filenames $url $_ true) -eq $charCount }
|
||||||
|
|
||||||
if (($null -eq $downloadLinks) -Or (-Not $downloadLinks)) {
|
if (($null -eq $downloadLinks) -or (-not $downloadLinks)) {
|
||||||
throw "No suitable download links matched for the url!"
|
throw "No suitable download links matched for the url!"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-Not($downloadLinks -is [String])) {
|
if (-not($downloadLinks -is [String])) {
|
||||||
throw "Found multiple matches for the same url:`n" + $downloadLinks
|
throw "Found multiple matches for the same url:`n" + $downloadLinks
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,7 +217,7 @@ foreach ($s in $sources) {
|
|||||||
|
|
||||||
$downloadUrl = Fetch-DownloadUrl $s.url
|
$downloadUrl = Fetch-DownloadUrl $s.url
|
||||||
|
|
||||||
if (($null -eq $downloadUrl) -Or ($downloadUrl -eq '')) {
|
if (($null -eq $downloadUrl) -or ($downloadUrl -eq '')) {
|
||||||
Write-Verbose "No new links were found"
|
Write-Verbose "No new links were found"
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -222,15 +228,15 @@ foreach ($s in $sources) {
|
|||||||
|
|
||||||
$version = ''
|
$version = ''
|
||||||
|
|
||||||
if ( ($url.Segments[-3] -eq "download/") -And ($url.Segments[-2].StartsWith("v")) ) {
|
if (($url.Segments[-3] -eq "download/") -and ($url.Segments[-2].StartsWith("v"))) {
|
||||||
$version = $url.Segments[-2].TrimStart('v').TrimEnd('/')
|
$version = $url.Segments[-2].TrimStart('v').TrimEnd('/')
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ($url.Segments[-2] -eq "archive/") ) {
|
if (($url.Segments[-2] -eq "archive/")) {
|
||||||
$version = [System.IO.Path]::GetFileNameWithoutExtension($url.Segments[-1].TrimStart('v').TrimEnd('/'))
|
$version = [System.IO.Path]::GetFileNameWithoutExtension($url.Segments[-1].TrimStart('v').TrimEnd('/'))
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $version -eq '' ) {
|
if ($version -eq '') {
|
||||||
throw "Unable to extract version from url string"
|
throw "Unable to extract version from url string"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,11 +261,11 @@ if ($count -eq 0) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $Env:APPVEYOR -eq 'True' ) {
|
if ($Env:APPVEYOR -eq 'True') {
|
||||||
Add-AppveyorMessage -Message "Successfully updated $count dependencies." -Category Information
|
Add-AppveyorMessage -Message "Successfully updated $count dependencies." -Category Information
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $Env:GITHUB_ACTIONS -eq 'true' ) {
|
if ($Env:GITHUB_ACTIONS -eq 'true') {
|
||||||
Write-Output "::notice title=Task Complete::Successfully updated $count dependencies."
|
Write-Output "::notice title=Task Complete::Successfully updated $count dependencies."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,17 +32,19 @@ function Delete-Existing($path) {
|
|||||||
function Extract-Archive($source, $target) {
|
function Extract-Archive($source, $target) {
|
||||||
Write-Verbose $("Extracting Archive '$cmder_root\vendor\" + $source.replace('/','\') + " to '$cmder_root\vendor\$target'")
|
Write-Verbose $("Extracting Archive '$cmder_root\vendor\" + $source.replace('/','\') + " to '$cmder_root\vendor\$target'")
|
||||||
Invoke-Expression "7z x -y -o`"$($target)`" `"$source`" > `$null"
|
Invoke-Expression "7z x -y -o`"$($target)`" `"$source`" > `$null"
|
||||||
if ($lastexitcode -ne 0) {
|
if ($LastExitCode -ne 0) {
|
||||||
Write-Error "Extracting of $source failed"
|
Write-Error "Extracting of $source failed"
|
||||||
}
|
}
|
||||||
Remove-Item $source
|
Remove-Item $source
|
||||||
}
|
}
|
||||||
|
|
||||||
function Create-Archive($source, $target, $params) {
|
function Create-Archive($source, $target, $params) {
|
||||||
$command = "7z a -xr@`"$source\packignore`" $params `"$target`" `"$source\*`" > `$null"
|
$command = "7z a -x@`"$source\packignore`" $params `"$target`" `"*`" > `$null"
|
||||||
Write-Verbose "Creating Archive from '$source' in '$target' with parameters '$params'"
|
Write-Verbose "Creating Archive from '$source' in '$target' with parameters '$params'"
|
||||||
|
Push-Location $source
|
||||||
Invoke-Expression $command
|
Invoke-Expression $command
|
||||||
if ($lastexitcode -ne 0) {
|
Pop-Location
|
||||||
|
if ($LastExitCode -ne 0) {
|
||||||
Write-Error "Compressing $source failed"
|
Write-Error "Compressing $source failed"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -54,7 +56,7 @@ function Flatten-Directory($name) {
|
|||||||
$moving = "$($name)_moving"
|
$moving = "$($name)_moving"
|
||||||
Rename-Item $name -NewName $moving
|
Rename-Item $name -NewName $moving
|
||||||
Write-Verbose "Flattening the '$name' directory..."
|
Write-Verbose "Flattening the '$name' directory..."
|
||||||
$child = (Get-Childitem $moving)[0] | Resolve-Path
|
$child = (Get-ChildItem $moving)[0] | Resolve-Path
|
||||||
Move-Item -Path $child -Destination $name
|
Move-Item -Path $child -Destination $name
|
||||||
Remove-Item -Recurse $moving
|
Remove-Item -Recurse $moving
|
||||||
}
|
}
|
||||||
@ -78,7 +80,7 @@ function Set-GHVariable {
|
|||||||
Write-Verbose "Setting CI variable $Name to $Value" -Verbose
|
Write-Verbose "Setting CI variable $Name to $Value" -Verbose
|
||||||
|
|
||||||
if ($env:GITHUB_ENV) {
|
if ($env:GITHUB_ENV) {
|
||||||
echo "$Name=$Value" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
Write-Output "$Name=$Value" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,8 +100,8 @@ function Get-VersionStr {
|
|||||||
|
|
||||||
# Determine if git is available
|
# Determine if git is available
|
||||||
if (Get-Command "git.exe" -ErrorAction SilentlyContinue) {
|
if (Get-Command "git.exe" -ErrorAction SilentlyContinue) {
|
||||||
# Determine if the current diesctory is a git repository
|
# Determine if the current directory is a git repository
|
||||||
$GitPresent = Invoke-Expression "git rev-parse --is-inside-work-tree" -erroraction SilentlyContinue
|
$GitPresent = Invoke-Expression "git rev-parse --is-inside-work-tree" -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
if ( $GitPresent -eq 'true' ) {
|
if ( $GitPresent -eq 'true' ) {
|
||||||
$string = Invoke-Expression "git describe --abbrev=0 --tags"
|
$string = Invoke-Expression "git describe --abbrev=0 --tags"
|
||||||
@ -130,7 +132,7 @@ function Parse-Changelog($file) {
|
|||||||
[regex]$regex = '^## \[(?<version>[\w\-\.]+)\]\([^\n()]+\)\s+\([^\n()]+\)$';
|
[regex]$regex = '^## \[(?<version>[\w\-\.]+)\]\([^\n()]+\)\s+\([^\n()]+\)$';
|
||||||
|
|
||||||
# Find the first match of the version string which means the latest version
|
# Find the first match of the version string which means the latest version
|
||||||
$version = Select-String -Path $file -Pattern $regex | Select-Object -First 1 | % { $_.Matches.Groups[1].Value }
|
$version = Select-String -Path $file -Pattern $regex | Select-Object -First 1 | ForEach-Object { $_.Matches.Groups[1].Value }
|
||||||
|
|
||||||
return $version
|
return $version
|
||||||
}
|
}
|
||||||
@ -226,16 +228,16 @@ function Download-File {
|
|||||||
|
|
||||||
$useBitTransfer = $null -ne (Get-Module -Name BitsTransfer -ListAvailable) -and ($PSVersionTable.PSVersion.Major -le 5)
|
$useBitTransfer = $null -ne (Get-Module -Name BitsTransfer -ListAvailable) -and ($PSVersionTable.PSVersion.Major -le 5)
|
||||||
|
|
||||||
$File = $File -Replace "/", "\"
|
$File = $File -replace "/", "\"
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if ($useBitTransfer) {
|
if ($useBitTransfer) {
|
||||||
Start-BitsTransfer -Source $Url -Destination $File -DisplayName "Downloading $Url to $File"
|
Start-BitsTransfer -Source $Url -Destination $File -DisplayName "Downloading '$Url' to $File"
|
||||||
Return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
Write-Error "Failed to download file using BITS, reason: $_`nUsing fallback method instead...`n"
|
Write-Error "Failed to download file using BITS, reason: $_`nUsing fallback method instead...`n" -ErrorAction:Continue
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Verbose "Downloading from $Url to $File`n"
|
Write-Verbose "Downloading from $Url to $File`n"
|
||||||
|
4
vendor/ConEmu.xml.default
vendored
4
vendor/ConEmu.xml.default
vendored
@ -549,14 +549,14 @@
|
|||||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<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\bash.exe" --login -i"/>
|
<value name="Cmd1" type="string" data="*set "PATH=%ConEmuDir%\..\git-for-windows\usr\bin;%PATH%" & %ConEmuDir%\..\git-for-windows\git-cmd.exe --no-cd --command=%ConEmuBaseDirShort%\conemu-msys2-64.exe "%ConEmuDir%\..\git-for-windows\usr\bin\bash.exe" --login -i"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task8" modified="2018-02-22 06:05:13" build="171109">
|
<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 "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||||
<value name="Cmd1" type="string" data=""%ConEmuDir%\..\git-for-windows\usr\bin\bash.exe" --login -i"/>
|
<value name="Cmd1" type="string" data="set "PATH=%ConEmuDir%\..\git-for-windows\usr\bin;%PATH%" & %ConEmuDir%\..\git-for-windows\git-cmd.exe --no-cd --command=%ConEmuBaseDirShort%\conemu-msys2-64.exe "%ConEmuDir%\..\git-for-windows\usr\bin\bash.exe" --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"/>
|
||||||
</key>
|
</key>
|
||||||
|
6
vendor/bin/cmder_shell.cmd
vendored
6
vendor/bin/cmder_shell.cmd
vendored
@ -1,6 +1,6 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
set CMDER_ROOT=%~dp0..\
|
set CMDER_ROOT=%~dp0..\..\
|
||||||
|
|
||||||
if "%cmder_init%" == "1" (
|
if "%cmder_init%" == "1" (
|
||||||
"%CMDER_ROOT%\vendor\clink\clink.bat" inject -q --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
|
"%CMDER_ROOT%\vendor\clink\clink.bat" inject -q --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
|
||||||
@ -8,6 +8,6 @@ if "%cmder_init%" == "1" (
|
|||||||
set cmder_init=1
|
set 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
|
||||||
|
8
vendor/bin/excd.cmd
vendored
Normal file
8
vendor/bin/excd.cmd
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
@echo off
|
||||||
|
set excd=%*
|
||||||
|
set excd=%excd:"=%
|
||||||
|
set excd_param=/d
|
||||||
|
if /i "%excd:~0,2%"=="/d" set "excd=%excd:~2%"
|
||||||
|
if "%excd:~0,1%"=="~" (set excd=%userprofile%\%excd:~1%)
|
||||||
|
if "%excd:~0,1%"=="/" (set excd_param=)
|
||||||
|
cd %excd_param% %excd%
|
259
vendor/clink.lua
vendored
259
vendor/clink.lua
vendored
@ -3,7 +3,12 @@
|
|||||||
-- !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
-- !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||||
-- !!! Use "%CMDER_ROOT%\config\<whatever>.lua" to add your lua startup scripts
|
-- !!! Use "%CMDER_ROOT%\config\<whatever>.lua" to add your lua startup scripts
|
||||||
|
|
||||||
-- luacheck: globals clink
|
-- luacheck: globals CMDER_SESSION
|
||||||
|
-- luacheck: globals uah_color cwd_color lamb_color clean_color dirty_color conflict_color unknown_color
|
||||||
|
-- luacheck: globals prompt_homeSymbol prompt_lambSymbol prompt_type prompt_useHomeSymbol prompt_useUserAtHost
|
||||||
|
-- luacheck: globals prompt_singleLine prompt_includeVersionControl
|
||||||
|
-- luacheck: globals prompt_overrideGitStatusOptIn 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
|
||||||
@ -28,29 +33,55 @@ end
|
|||||||
|
|
||||||
|
|
||||||
local function get_clean_color()
|
local function get_clean_color()
|
||||||
return clean_color or "\x1b[1;37;49m"
|
return clean_color or "\x1b[37;1m" -- White, Bold
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local function get_dirty_color()
|
local function get_dirty_color()
|
||||||
return dirty_color or "\x1b[33;3m"
|
return dirty_color or "\x1b[33;3m" -- Yellow, Italic
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local function get_conflict_color()
|
local function get_conflict_color()
|
||||||
return conflict_color or "\x1b[31;1m"
|
return conflict_color or "\x1b[31;1m" -- Red, Bold
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_unknown_color()
|
local function get_unknown_color()
|
||||||
return unknown_color or "\x1b[37;1m"
|
return unknown_color or "\x1b[37;1m" -- White, Bold
|
||||||
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,19 +179,21 @@ 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
|
||||||
|
|
||||||
|
cr = "\x1b[0m" .. cr
|
||||||
|
|
||||||
if env ~= nil then env = "("..env..") " else env = "" end
|
if env ~= nil then env = "("..env..") " else env = "" end
|
||||||
|
|
||||||
if uah ~= '' then uah = get_uah_color() .. uah end
|
if uah ~= '' then uah = get_uah_color() .. uah end
|
||||||
@ -168,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 .. get_lamb_color() .. cr .. "{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
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -189,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
|
||||||
@ -199,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
|
||||||
@ -234,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
|
||||||
@ -253,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
|
||||||
@ -301,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/(.+)')
|
||||||
@ -320,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("(.+)$")
|
||||||
@ -337,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
|
||||||
@ -357,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
|
||||||
@ -372,37 +420,78 @@ 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 { clean = true }
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Get the status of working dir
|
||||||
|
-- @return {bool}
|
||||||
|
---
|
||||||
|
local last_git_status_time = nil
|
||||||
|
local last_git_status_setting = true
|
||||||
|
local function get_git_status_setting()
|
||||||
|
local time = os.clock()
|
||||||
|
local last_time = last_git_status_time
|
||||||
|
last_git_status_time = time
|
||||||
|
if last_time and time >= 0 and time - last_time < 10 then
|
||||||
|
return last_git_status_setting
|
||||||
|
end
|
||||||
|
|
||||||
|
-- When async prompt filtering is available, check the
|
||||||
|
-- prompt_overrideGitStatusOptIn config setting for whether to ignore the
|
||||||
|
-- cmder.status and cmder.cmdstatus git config opt-in settings.
|
||||||
|
if clink.promptcoroutine and io.popenyield and settings.get("prompt.async") then
|
||||||
|
if prompt_overrideGitStatusOptIn then
|
||||||
|
last_git_status_setting = true
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local gitStatusConfig = io_popenyield("git --no-pager config cmder.status 2>nul")
|
||||||
|
if gitStatusConfig then
|
||||||
|
for line in gitStatusConfig:lines() do
|
||||||
|
if string.match(line, 'false') then
|
||||||
|
gitStatusConfig:close()
|
||||||
|
last_git_status_setting = false
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
gitStatusConfig:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
local gitCmdStatusConfig = io_popenyield("git --no-pager config cmder.cmdstatus 2>nul")
|
||||||
|
if gitCmdStatusConfig then
|
||||||
|
for line in gitCmdStatusConfig:lines() do
|
||||||
|
if string.match(line, 'false') then
|
||||||
|
gitCmdStatusConfig:close()
|
||||||
|
last_git_status_setting = false
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
gitCmdStatusConfig:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
last_git_status_setting = true
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -412,7 +501,9 @@ end
|
|||||||
---
|
---
|
||||||
local function get_git_info_table()
|
local function get_git_info_table()
|
||||||
local info = clink_promptcoroutine(function ()
|
local info = clink_promptcoroutine(function ()
|
||||||
return get_git_status()
|
-- Use git status if allowed.
|
||||||
|
local cmderGitStatusOptIn = get_git_status_setting()
|
||||||
|
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 {}
|
||||||
@ -422,42 +513,6 @@ local function get_git_info_table()
|
|||||||
return info
|
return info
|
||||||
end
|
end
|
||||||
|
|
||||||
---
|
|
||||||
-- Get the status of working dir
|
|
||||||
-- @return {bool}
|
|
||||||
---
|
|
||||||
local function get_git_status_setting()
|
|
||||||
-- When async prompt filtering is available, check the
|
|
||||||
-- prompt_overrideGitStatusOptIn config setting for whether to ignore the
|
|
||||||
-- cmder.status and cmder.cmdstatus git config opt-in settings.
|
|
||||||
if clink.promptcoroutine and io.popenyield and settings.get("prompt.async") then
|
|
||||||
if prompt_overrideGitStatusOptIn then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local gitStatusConfig = io.popen("git --no-pager config cmder.status 2>nul")
|
|
||||||
|
|
||||||
for line in gitStatusConfig:lines() do
|
|
||||||
if string.match(line, 'false') then
|
|
||||||
gitStatusConfig:close()
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local gitCmdStatusConfig = io.popen("git --no-pager config cmder.cmdstatus 2>nul")
|
|
||||||
for line in gitCmdStatusConfig:lines() do
|
|
||||||
if string.match(line, 'false') then
|
|
||||||
gitCmdStatusConfig:close()
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
gitStatusConfig:close()
|
|
||||||
gitCmdStatusConfig:close()
|
|
||||||
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
local function git_prompt_filter()
|
local function git_prompt_filter()
|
||||||
|
|
||||||
-- Don't do any git processing if the prompt doesn't want to show git info.
|
-- Don't do any git processing if the prompt doesn't want to show git info.
|
||||||
@ -475,7 +530,6 @@ local function git_prompt_filter()
|
|||||||
|
|
||||||
local git_dir = get_git_dir()
|
local git_dir = get_git_dir()
|
||||||
local color
|
local color
|
||||||
cmderGitStatusOptIn = get_git_status_setting()
|
|
||||||
if git_dir then
|
if git_dir then
|
||||||
local branch = get_git_branch(git_dir)
|
local branch = get_git_branch(git_dir)
|
||||||
if branch then
|
if branch then
|
||||||
@ -485,9 +539,8 @@ local function git_prompt_filter()
|
|||||||
cached_info.git_dir = git_dir
|
cached_info.git_dir = git_dir
|
||||||
cached_info.git_branch = branch
|
cached_info.git_branch = branch
|
||||||
end
|
end
|
||||||
-- Use git status if allowed.
|
|
||||||
if cmderGitStatusOptIn then
|
-- 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()
|
local gitInfo = get_git_info_table()
|
||||||
local gitStatus = gitInfo.status
|
local gitStatus = gitInfo.status
|
||||||
@ -504,16 +557,14 @@ local function git_prompt_filter()
|
|||||||
if gitConflict then
|
if gitConflict then
|
||||||
color = colors.conflict
|
color = colors.conflict
|
||||||
end
|
end
|
||||||
else
|
|
||||||
color = colors.nostatus
|
clink.prompt.value = gsub_plain(clink.prompt.value, "{git}", " "..color.."("..branch..")")
|
||||||
end
|
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", " "..color.."("..verbatim(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
|
||||||
|
|
||||||
@ -524,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
|
||||||
@ -547,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
|
if output ~= nil and output ~= "" then color = colors.dirty end
|
||||||
result = color .. "(" .. branch .. ")"
|
end
|
||||||
|
|
||||||
|
local result = color .. "(" .. branch .. ")"
|
||||||
|
clink.prompt.value = gsub_plain(clink.prompt.value, "{hg}", " "..result)
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", " "..verbatim(result))
|
-- No hg present or not in hg repo
|
||||||
return false
|
clink.prompt.value = gsub_plain(clink.prompt.value, "{hg}", "")
|
||||||
end
|
end
|
||||||
|
|
||||||
local function svn_prompt_filter()
|
local function svn_prompt_filter()
|
||||||
@ -577,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
|
||||||
@ -587,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)
|
||||||
@ -601,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
|
||||||
|
|
||||||
|
19
vendor/clink_settings.default
vendored
19
vendor/clink_settings.default
vendored
@ -1,6 +1,10 @@
|
|||||||
# For explanation of these and other settings see:
|
# For explanation of these and other settings see:
|
||||||
# https://chrisant996.github.io/clink/clink.html
|
# https://chrisant996.github.io/clink/clink.html
|
||||||
|
|
||||||
|
# name: Expand envvars when completing
|
||||||
|
# type: boolean
|
||||||
|
match.expand_envvars = True
|
||||||
|
|
||||||
# name: Sets how command history expansion is applied
|
# name: Sets how command history expansion is applied
|
||||||
# type: enum
|
# type: enum
|
||||||
# options: off,on,not_squoted,not_dquoted,not_quoted
|
# options: off,on,not_squoted,not_dquoted,not_quoted
|
||||||
@ -8,12 +12,21 @@ history.expand_mode = not_dquoted
|
|||||||
|
|
||||||
# name: Skip adding lines prefixed with whitespace
|
# name: Skip adding lines prefixed with whitespace
|
||||||
# type: boolean
|
# type: boolean
|
||||||
history.ignore_space = False
|
history.ignore_space = True
|
||||||
|
|
||||||
# name: The number of history lines to save
|
# name: The number of history lines to save
|
||||||
# type: integer
|
# type: integer
|
||||||
history.max_lines = 10000
|
history.max_lines = 25000
|
||||||
|
|
||||||
# name: Share history between instances
|
# name: Share history between instances
|
||||||
# type: boolean
|
# type: boolean
|
||||||
history.shared = True
|
history.shared = False
|
||||||
|
|
||||||
|
# name: Auto-answer terminate prompt
|
||||||
|
# type: enum
|
||||||
|
# options: off,answer_yes,answer_no
|
||||||
|
cmd.auto_answer = answer_yes
|
||||||
|
|
||||||
|
# name: Doskey completions
|
||||||
|
# type: color
|
||||||
|
color.doskey = yellow
|
||||||
|
6
vendor/cmder.sh
vendored
6
vendor/cmder.sh
vendored
@ -33,11 +33,11 @@ CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
|
|||||||
|
|
||||||
export CMDER_ROOT
|
export CMDER_ROOT
|
||||||
|
|
||||||
if [ -d "/c/Program Files/Git" ] ; then
|
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 [ -d "/c/Program Files(x86)/Git" ] ; 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 [ -d "${CMDER_ROOT}/vendor/git-for-windows" ] ; 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
|
||||||
|
|
||||||
|
10
vendor/cmder_prompt_config.lua.default
vendored
10
vendor/cmder_prompt_config.lua.default
vendored
@ -45,7 +45,9 @@ prompt_overrideSvnStatusOptIn = false
|
|||||||
|
|
||||||
-- Prompt Attributes
|
-- Prompt Attributes
|
||||||
--
|
--
|
||||||
-- Colors
|
-- Colors: https://github.com/cmderdev/cmder/wiki/Customization#list-of-colors
|
||||||
|
-- Effects: https://github.com/cmderdev/cmder/wiki/Customization#list-of-effects
|
||||||
|
--
|
||||||
-- Green: "\x1b[1;33;49m"
|
-- Green: "\x1b[1;33;49m"
|
||||||
-- Yellow: "\x1b[1;32;49m"
|
-- Yellow: "\x1b[1;32;49m"
|
||||||
-- Light Grey: "\x1b[1;30;49m"
|
-- Light Grey: "\x1b[1;30;49m"
|
||||||
@ -54,7 +56,7 @@ prompt_overrideSvnStatusOptIn = false
|
|||||||
uah_color = "\x1b[1;33;49m" -- Green = uah = [user]@[hostname]
|
uah_color = "\x1b[1;33;49m" -- Green = uah = [user]@[hostname]
|
||||||
cwd_color = "\x1b[1;32;49m" -- Yellow cwd = Current Working Directory
|
cwd_color = "\x1b[1;32;49m" -- Yellow cwd = Current Working Directory
|
||||||
lamb_color = "\x1b[1;30;49m" -- Light Grey = Lambda Color
|
lamb_color = "\x1b[1;30;49m" -- Light Grey = Lambda Color
|
||||||
clean_color = "\x1b[1;37;49m"
|
clean_color = "\x1b[37;1m"
|
||||||
dirty_color = "\x1b[33;3m"
|
dirty_color = "\x1b[33;3m" -- Yellow, Italic
|
||||||
conflict_color = "\x1b[31;1m"
|
conflict_color = "\x1b[31;1m" -- Red, Bold
|
||||||
unknown_color = "\x1b[37;1m" -- White = No VCS Status Branch Color
|
unknown_color = "\x1b[37;1m" -- White = No VCS Status Branch Color
|
||||||
|
204
vendor/init.bat
vendored
204
vendor/init.bat
vendored
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
set CMDER_INIT_START=%time%
|
set CMDER_INIT_START=%time%
|
||||||
|
|
||||||
:: Init Script for cmd.exe
|
:: Init Script for cmd.exe shell
|
||||||
:: Created as part of cmder project
|
:: Created as part of cmder project
|
||||||
|
|
||||||
:: !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
:: !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||||
@ -23,7 +23,7 @@ if not defined fast_init set fast_init=0
|
|||||||
:: Use /max_depth 1-5 to set max recurse depth for calls to `enhance_path_recursive`
|
:: Use /max_depth 1-5 to set max recurse depth for calls to `enhance_path_recursive`
|
||||||
if not defined max_depth set max_depth=1
|
if not defined max_depth set max_depth=1
|
||||||
|
|
||||||
:: Add *nix tools to end of path. 0 turns off *nix tools, 2 adds *nix tools to the front of thr path.
|
:: Add *nix tools to end of path. 0 turns off *nix tools, 2 adds *nix tools to the front of the path.
|
||||||
if not defined nix_tools set nix_tools=1
|
if not defined nix_tools set nix_tools=1
|
||||||
|
|
||||||
set "CMDER_USER_FLAGS= "
|
set "CMDER_USER_FLAGS= "
|
||||||
@ -44,10 +44,11 @@ if not defined CMDER_ROOT (
|
|||||||
:: Remove trailing '\' from %CMDER_ROOT%
|
:: Remove trailing '\' from %CMDER_ROOT%
|
||||||
if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%"
|
if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%"
|
||||||
|
|
||||||
|
:: Include Cmder libraries
|
||||||
call "%cmder_root%\vendor\bin\cexec.cmd" /setpath
|
call "%cmder_root%\vendor\bin\cexec.cmd" /setpath
|
||||||
|
call "%cmder_root%\vendor\lib\lib_console"
|
||||||
call "%cmder_root%\vendor\lib\lib_base"
|
call "%cmder_root%\vendor\lib\lib_base"
|
||||||
call "%cmder_root%\vendor\lib\lib_path"
|
call "%cmder_root%\vendor\lib\lib_path"
|
||||||
call "%cmder_root%\vendor\lib\lib_console"
|
|
||||||
call "%cmder_root%\vendor\lib\lib_git"
|
call "%cmder_root%\vendor\lib\lib_git"
|
||||||
call "%cmder_root%\vendor\lib\lib_profile"
|
call "%cmder_root%\vendor\lib\lib_profile"
|
||||||
|
|
||||||
@ -58,9 +59,9 @@ call "%cmder_root%\vendor\lib\lib_profile"
|
|||||||
set fast_init=1
|
set fast_init=1
|
||||||
) else if /i "%1" == "/t" (
|
) else if /i "%1" == "/t" (
|
||||||
set time_init=1
|
set time_init=1
|
||||||
) else if /i "%1"=="/v" (
|
) else if /i "%1" == "/v" (
|
||||||
set verbose_output=1
|
set verbose_output=1
|
||||||
) else if /i "%1"=="/d" (
|
) else if /i "%1" == "/d" (
|
||||||
set debug_output=1
|
set debug_output=1
|
||||||
) else if /i "%1" == "/max_depth" (
|
) else if /i "%1" == "/max_depth" (
|
||||||
if "%~2" geq "1" if "%~2" leq "5" (
|
if "%~2" geq "1" if "%~2" leq "5" (
|
||||||
@ -88,10 +89,10 @@ call "%cmder_root%\vendor\lib\lib_profile"
|
|||||||
set "GIT_INSTALL_ROOT=%~2"
|
set "GIT_INSTALL_ROOT=%~2"
|
||||||
shift
|
shift
|
||||||
) else (
|
) else (
|
||||||
%print_error% "The Git install root folder "%~2", you specified does not exist!"
|
%print_error% "The Git install root folder "%~2" that you specified does not exist!"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
) else if /i "%1"=="/nix_tools" (
|
) else if /i "%1" == "/nix_tools" (
|
||||||
if "%2" equ "0" (
|
if "%2" equ "0" (
|
||||||
REM Do not add *nix tools to path
|
REM Do not add *nix tools to path
|
||||||
set nix_tools=0
|
set nix_tools=0
|
||||||
@ -110,7 +111,7 @@ call "%cmder_root%\vendor\lib\lib_profile"
|
|||||||
set "HOME=%~2"
|
set "HOME=%~2"
|
||||||
shift
|
shift
|
||||||
) else (
|
) else (
|
||||||
%print_error% The home folder "%2", you specified does not exist!
|
%print_error% The home folder "%2" that you specified does not exist!
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
) else if /i "%1" == "/svn_ssh" (
|
) else if /i "%1" == "/svn_ssh" (
|
||||||
@ -120,131 +121,174 @@ call "%cmder_root%\vendor\lib\lib_profile"
|
|||||||
set "CMDER_USER_FLAGS=%1 %CMDER_USER_FLAGS%"
|
set "CMDER_USER_FLAGS=%1 %CMDER_USER_FLAGS%"
|
||||||
)
|
)
|
||||||
shift
|
shift
|
||||||
goto var_loop
|
goto :var_loop
|
||||||
|
|
||||||
:start
|
:start
|
||||||
:: Sets CMDER_SHELL, CMDER_CLINK, CMDER_ALIASES
|
:: Enable console related methods if verbose/debug is turned on
|
||||||
|
if %debug_output% gtr 0 (set print_debug=%lib_console% debug_output)
|
||||||
|
if %verbose_output% gtr 0 (
|
||||||
|
set print_verbose=%lib_console% verbose_output
|
||||||
|
set print_warning=%lib_console% show_warning
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Sets CMDER_SHELL, CMDER_CLINK, CMDER_ALIASES variables
|
||||||
%lib_base% cmder_shell
|
%lib_base% cmder_shell
|
||||||
%print_debug% init.bat "Env Var - CMDER_ROOT=%CMDER_ROOT%"
|
%print_debug% init.bat "Env Var - CMDER_ROOT=%CMDER_ROOT%"
|
||||||
%print_debug% init.bat "Env Var - debug_output=%debug_output%"
|
%print_debug% init.bat "Env Var - debug_output=%debug_output%"
|
||||||
|
|
||||||
|
:: Set the Cmder directory paths
|
||||||
|
set CMDER_CONFIG_DIR=%CMDER_ROOT%\config
|
||||||
|
|
||||||
|
:: Check if we're using Cmder individual user profile
|
||||||
if defined CMDER_USER_CONFIG (
|
if defined CMDER_USER_CONFIG (
|
||||||
%print_debug% init.bat "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '%CMDER_USER_CONFIG%'!"
|
%print_debug% init.bat "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '%CMDER_USER_CONFIG%'!"
|
||||||
|
|
||||||
if not exist "%CMDER_USER_CONFIG%\..\opt" md "%CMDER_USER_CONFIG%\..\opt"
|
if not exist "%CMDER_USER_CONFIG%\..\opt" md "%CMDER_USER_CONFIG%\..\opt"
|
||||||
|
set CMDER_CONFIG_DIR=%CMDER_USER_CONFIG%
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Pick right version of clink
|
if not "%CMDER_SHELL%" == "cmd" (
|
||||||
|
%print_warning% "Incompatible 'ComSpec/Shell' Detected: %CMDER_SHELL%"
|
||||||
|
set CMDER_CLINK=0
|
||||||
|
set CMDER_ALIASES=0
|
||||||
|
)
|
||||||
|
|
||||||
|
:: 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
|
||||||
) else (
|
) else if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
|
||||||
set clink_architecture=x64
|
set clink_architecture=x64
|
||||||
set architecture_bits=64
|
set architecture_bits=64
|
||||||
|
) else (
|
||||||
|
%print_warning% "Incompatible Processor Detected: %PROCESSOR_ARCHITECTURE%"
|
||||||
|
set CMDER_CLINK=0
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%CMDER_CLINK%" == "1" (
|
if "%CMDER_CLINK%" == "1" (
|
||||||
|
REM TODO: Detect if clink is already injected, if so goto :CLINK_FINISH
|
||||||
|
goto :INJECT_CLINK
|
||||||
|
)
|
||||||
|
|
||||||
|
goto :SKIP_CLINK
|
||||||
|
|
||||||
|
:INJECT_CLINK
|
||||||
%print_verbose% "Injecting Clink!"
|
%print_verbose% "Injecting Clink!"
|
||||||
|
|
||||||
:: Run clink
|
:: Check if Clink is not present
|
||||||
if defined CMDER_USER_CONFIG (
|
if not exist "%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" (
|
||||||
if not exist "%CMDER_USER_CONFIG%\settings" if not exist "%CMDER_USER_CONFIG%\clink_settings" (
|
%print_error% "Clink executable is not present in 'vendor\clink\clink_%clink_architecture%.exe'"
|
||||||
echo Generating clink initial settings in "%CMDER_USER_CONFIG%\clink_settings"
|
goto :SKIP_CLINK
|
||||||
copy "%CMDER_ROOT%\vendor\clink_settings.default" "%CMDER_USER_CONFIG%\clink_settings"
|
|
||||||
echo Additional *.lua files in "%CMDER_USER_CONFIG%" are loaded on startup.
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if not exist "%CMDER_USER_CONFIG%\cmder_prompt_config.lua" (
|
:: Run Clink
|
||||||
echo Creating Cmder prompt config file: "%CMDER_USER_CONFIG%\cmder_prompt_config.lua"
|
if not exist "%CMDER_CONFIG_DIR%\settings" if not exist "%CMDER_CONFIG_DIR%\clink_settings" (
|
||||||
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_USER_CONFIG%\cmder_prompt_config.lua"
|
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.
|
||||||
)
|
)
|
||||||
|
|
||||||
REM Cleanup lagacy Clink Settings file
|
if not exist "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua" (
|
||||||
if exist "%CMDER_USER_CONFIG%\settings" if exist "%CMDER_USER_CONFIG%\clink_settings" (
|
echo Creating Cmder prompt config file: "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua"
|
||||||
del "%CMDER_USER_CONFIG%\settings"
|
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua"
|
||||||
)
|
)
|
||||||
|
|
||||||
REM Cleanup legacy CLink history file
|
:: Cleanup legacy Clink Settings file
|
||||||
if exist "%CMDER_USER_CONFIG%\.history" if exist "%CMDER_USER_CONFIG%\clink_history" (
|
if exist "%CMDER_CONFIG_DIR%\settings" if exist "%CMDER_CONFIG_DIR%\clink_settings" (
|
||||||
del "%CMDER_USER_CONFIG%\.history"
|
del "%CMDER_CONFIG_DIR%\settings"
|
||||||
)
|
|
||||||
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_USER_CONFIG%" --scripts "%CMDER_ROOT%\vendor"
|
|
||||||
) else (
|
|
||||||
if not exist "%CMDER_ROOT%\config\settings" if not exist "%CMDER_ROOT%\config\clink_settings" (
|
|
||||||
echo Generating clink initial settings in "%CMDER_ROOT%\config\clink_settings"
|
|
||||||
copy "%CMDER_ROOT%\vendor\clink_settings.default" "%CMDER_ROOT%\config\clink_settings"
|
|
||||||
echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup.
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if not exist "%CMDER_ROOT%\config\cmder_prompt_config.lua" (
|
:: Cleanup legacy Clink history file
|
||||||
echo Creating Cmder prompt config file: "%CMDER_ROOT%\config\cmder_prompt_config.lua"
|
if exist "%CMDER_CONFIG_DIR%\.history" if exist "%CMDER_CONFIG_DIR%\clink_history" (
|
||||||
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_ROOT%\config\cmder_prompt_config.lua"
|
del "%CMDER_CONFIG_DIR%\.history"
|
||||||
)
|
)
|
||||||
|
|
||||||
REM Cleanup lagacy Clink Settings file
|
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_CONFIG_DIR%" --scripts "%CMDER_ROOT%\vendor"
|
||||||
if exist "%CMDER_ROOT%\config\settings" if exist "%CMDER_ROOT%\config\clink_settings" (
|
|
||||||
del "%CMDER_ROOT%\config\settings"
|
:: Check if a fatal error occurred when trying to inject Clink
|
||||||
|
if errorlevel 2 (
|
||||||
|
REM %print_error% "Clink injection has failed with error code: %errorlevel%"
|
||||||
|
goto :SKIP_CLINK
|
||||||
)
|
)
|
||||||
|
|
||||||
REM Cleanup legacy Clink history file
|
goto :CLINK_FINISH
|
||||||
if exist "%CMDER_ROOT%\config\.history" if exist "%CMDER_ROOT%\config\clink_history" (
|
|
||||||
del "%CMDER_ROOT%\config\.history"
|
|
||||||
)
|
|
||||||
|
|
||||||
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
|
:SKIP_CLINK
|
||||||
)
|
%print_warning% "Skipping Clink Injection!"
|
||||||
) else (
|
|
||||||
%print_verbose% "WARNING: Incompatible 'ComSpec/Shell' Detetected 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 "%CMDER_CONFIGURED%" GTR "1" (
|
if "%CMDER_CONFIGURED%" GTR "1" (
|
||||||
%print_verbose% "Cmder is already configured, skipping Cmder Init!"
|
%print_verbose% "Cmder is already configured, skipping Cmder Init!"
|
||||||
|
|
||||||
goto USER_ALIASES
|
goto :USER_ALIASES
|
||||||
) else if "%CMDER_CONFIGURED%" == "1" (
|
) else if "%CMDER_CONFIGURED%" == "1" (
|
||||||
%print_verbose% "Cmder is already configured, skipping to Cmder User Init!"
|
%print_verbose% "Cmder is already configured, skipping to Cmder User Init!"
|
||||||
|
|
||||||
goto USER_CONFIG_START
|
goto :USER_CONFIG_START
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Prepare for git-for-windows
|
:: Prepare for git-for-windows
|
||||||
|
|
||||||
:: I do not even know, copypasted from their .bat
|
:: Detect which git.exe version to use
|
||||||
set PLINK_PROTOCOL=ssh
|
:: * if the user points to a specific git, use that
|
||||||
|
:: * test if git is in path and if yes, use that
|
||||||
:: The idea:
|
|
||||||
:: * if the users points as to a specific git, use that
|
|
||||||
:: * test if a 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 (
|
||||||
if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" goto :SPECIFIED_GIT
|
if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" goto :SPECIFIED_GIT
|
||||||
|
set GIT_INSTALL_ROOT=
|
||||||
) else if "%fast_init%" == "1" (
|
) else if "%fast_init%" == "1" (
|
||||||
if exist "%CMDER_ROOT%\vendor\git-for-windows\cmd\git.exe" (
|
if exist "%CMDER_ROOT%\vendor\git-for-windows\cmd\git.exe" (
|
||||||
%print_debug% init.bat "Skipping Git Auto-Detect!"
|
%print_debug% init.bat "Skipping Git Auto-Detect!"
|
||||||
goto :VENDORED_GIT
|
goto :VENDORED_GIT
|
||||||
)
|
)
|
||||||
|
|
||||||
|
%print_debug% init.bat "Fast init is enabled, vendored Git does not exist"
|
||||||
|
for /F "delims=" %%F in ('where git.exe 2^>nul') do (
|
||||||
|
set "EXT_GIT_EXE=%%~fF"
|
||||||
|
%print_debug% init.bat "Found User installed Git at '%%~fF'. Skipping Git Auto-Detect!"
|
||||||
|
goto :SET_ENV
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
%print_debug% init.bat "Looking for Git install root..."
|
%print_debug% init.bat "Looking for Git install root..."
|
||||||
|
|
||||||
:: get the version information for vendored git binary
|
:: Get the version information for vendored git binary
|
||||||
%lib_git% read_version VENDORED "%CMDER_ROOT%\vendor\git-for-windows\cmd" 2>nul
|
%lib_git% read_version VENDORED "%CMDER_ROOT%\vendor\git-for-windows\cmd" 2>nul
|
||||||
%lib_git% validate_version VENDORED %GIT_VERSION_VENDORED%
|
%lib_git% validate_version VENDORED %GIT_VERSION_VENDORED%
|
||||||
|
|
||||||
:: check if git is in path...
|
:: Check if git is in path
|
||||||
for /F "delims=" %%F in ('where git.exe 2^>nul ^| find "\cmd\git.exe"') do (
|
for /F "delims=" %%F in ('where git.exe 2^>nul') do call :check_git "%%~fF"
|
||||||
:: get the absolute path to the user provided git binary
|
|
||||||
%lib_git% is_git_shim "%%~dpF"
|
|
||||||
%lib_git% get_user_git_version
|
|
||||||
%lib_git% compare_git_versions
|
|
||||||
|
|
||||||
if defined GIT_INSTALL_ROOT (
|
if defined GIT_INSTALL_ROOT (
|
||||||
goto :FOUND_GIT
|
goto :FOUND_GIT
|
||||||
)
|
) else (
|
||||||
|
goto :VENDORED_GIT
|
||||||
)
|
)
|
||||||
|
|
||||||
:: our last hope: our own git...
|
:check_git
|
||||||
|
set full_path="%~f1"
|
||||||
|
if not defined GIT_INSTALL_ROOT (
|
||||||
|
if not [\%full_path:\cmd\git.exe=:%]==[\%full_path%] (
|
||||||
|
:: Get the absolute path to the user provided git binary
|
||||||
|
%lib_git% is_git_shim "%~dp1"
|
||||||
|
%lib_git% get_user_git_version
|
||||||
|
%lib_git% compare_git_versions
|
||||||
|
)
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:: Our last hope: use vendored git
|
||||||
:VENDORED_GIT
|
:VENDORED_GIT
|
||||||
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
|
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
|
||||||
set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows"
|
set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows"
|
||||||
@ -267,7 +311,7 @@ goto :CONFIGURE_GIT
|
|||||||
:: Add git to the path
|
:: Add git to the 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" %lib_path% enhance_path "%GIT_INSTALL_ROOT%\cmd" ""
|
||||||
|
|
||||||
:: Add the unix commands at the end to not shadow windows commands like more
|
:: 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 (
|
||||||
%print_verbose% "Preferring Windows commands"
|
%print_verbose% "Preferring Windows commands"
|
||||||
set "path_position=append"
|
set "path_position=append"
|
||||||
@ -287,10 +331,21 @@ if %nix_tools% geq 1 (
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
:: define SVN_SSH so we can use git svn with ssh svn repositories
|
:SET_ENV
|
||||||
|
|
||||||
|
:: Plink (PuTTY Link) is a command-line connection tool similar to ssh, setting its protocol to ssh
|
||||||
|
set PLINK_PROTOCOL=ssh
|
||||||
|
|
||||||
|
:: Define SVN_SSH so we can use git svn with ssh svn repositories
|
||||||
if not defined SVN_SSH set "SVN_SSH=%GIT_INSTALL_ROOT:\=\\%\\bin\\ssh.exe"
|
if not defined SVN_SSH set "SVN_SSH=%GIT_INSTALL_ROOT:\=\\%\\bin\\ssh.exe"
|
||||||
|
|
||||||
:: Find locale.exe: From the git install root, from the path, using the git installed env, or fallback using the env from the path.
|
:: Find locale.exe: From the git install root, from the path, using the git installed env, or fallback using the env from the path.
|
||||||
|
setlocal enabledelayedexpansion
|
||||||
|
if not defined git_locale if defined EXT_GIT_EXE (
|
||||||
|
set "GIT_INSTALL_ROOT=!EXT_GIT_EXE:\cmd\git.exe=!"
|
||||||
|
)
|
||||||
|
endlocal && set GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%
|
||||||
|
|
||||||
if not defined git_locale if exist "%GIT_INSTALL_ROOT%\usr\bin\locale.exe" set git_locale="%GIT_INSTALL_ROOT%\usr\bin\locale.exe"
|
if not defined git_locale if exist "%GIT_INSTALL_ROOT%\usr\bin\locale.exe" set git_locale="%GIT_INSTALL_ROOT%\usr\bin\locale.exe"
|
||||||
if not defined git_locale for /F "tokens=* delims=" %%F in ('where locale.exe 2^>nul') do ( if not defined git_locale set git_locale="%%F" )
|
if not defined git_locale for /F "tokens=* delims=" %%F in ('where locale.exe 2^>nul') do ( if not defined git_locale set git_locale="%%F" )
|
||||||
if not defined git_locale if exist "%GIT_INSTALL_ROOT%\usr\bin\env.exe" set git_locale="%GIT_INSTALL_ROOT%\usr\bin\env.exe" /usr/bin/locale
|
if not defined git_locale if exist "%GIT_INSTALL_ROOT%\usr\bin\env.exe" set git_locale="%GIT_INSTALL_ROOT%\usr\bin\env.exe" /usr/bin/locale
|
||||||
@ -298,7 +353,6 @@ if not defined git_locale for /F "tokens=* delims=" %%F in ('where env.exe 2^>nu
|
|||||||
|
|
||||||
setlocal enabledelayedexpansion
|
setlocal enabledelayedexpansion
|
||||||
if defined git_locale (
|
if defined git_locale (
|
||||||
|
|
||||||
REM %print_debug% init.bat "Env Var - git_locale=!git_locale!"
|
REM %print_debug% init.bat "Env Var - git_locale=!git_locale!"
|
||||||
if not defined LANG (
|
if not defined LANG (
|
||||||
for /F "delims=" %%F in ('!git_locale! -uU 2') do (
|
for /F "delims=" %%F in ('!git_locale! -uU 2') do (
|
||||||
@ -341,11 +395,7 @@ if defined CMDER_USER_CONFIG (
|
|||||||
:: must also be self executing, see '.\user_aliases.cmd.default',
|
:: must also be self executing, see '.\user_aliases.cmd.default',
|
||||||
:: and be in profile.d folder.
|
:: and be in profile.d folder.
|
||||||
if not defined user_aliases (
|
if not defined user_aliases (
|
||||||
if defined CMDER_USER_CONFIG (
|
set "user_aliases=%CMDER_CONFIG_DIR%\user_aliases.cmd"
|
||||||
set "user_aliases=%CMDER_USER_CONFIG%\user_aliases.cmd"
|
|
||||||
) else (
|
|
||||||
set "user_aliases=%CMDER_ROOT%\config\user_aliases.cmd"
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%CMDER_ALIASES%" == "1" (
|
if "%CMDER_ALIASES%" == "1" (
|
||||||
@ -376,7 +426,7 @@ if "%CMDER_ALIASES%" == "1" (
|
|||||||
)
|
)
|
||||||
|
|
||||||
:: Add aliases to the environment
|
:: Add aliases to the environment
|
||||||
type "%user_aliases%" | findstr /b /l /i "history=cat " >nul
|
type "%user_aliases%" | %WINDIR%\System32\findstr /b /l /i "history=cat " >nul
|
||||||
if "%ERRORLEVEL%" == "0" (
|
if "%ERRORLEVEL%" == "0" (
|
||||||
echo Migrating alias 'history' to new Clink 1.x.x...
|
echo Migrating alias 'history' to new Clink 1.x.x...
|
||||||
call "%CMDER_ROOT%\vendor\bin\alias.cmd" /d history
|
call "%CMDER_ROOT%\vendor\bin\alias.cmd" /d history
|
||||||
@ -385,7 +435,7 @@ if "%ERRORLEVEL%" == "0" (
|
|||||||
|
|
||||||
call "%user_aliases%"
|
call "%user_aliases%"
|
||||||
|
|
||||||
if "%CMDER_CONFIGURED%" gtr "1" goto CMDER_CONFIGURED
|
if "%CMDER_CONFIGURED%" gtr "1" goto :CMDER_CONFIGURED
|
||||||
|
|
||||||
:: See vendor\git-for-windows\README.portable for why we do this
|
:: See vendor\git-for-windows\README.portable for why we do this
|
||||||
:: Basically we need to execute this post-install.bat because we are
|
:: Basically we need to execute this post-install.bat because we are
|
||||||
|
68
vendor/lib/lib_base.cmd
vendored
68
vendor/lib/lib_base.cmd
vendored
@ -10,9 +10,8 @@ if "%~1" == "/h" (
|
|||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:help
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::show_subs - shows all sub routines in a .bat/.cmd file with documentation
|
:::help - shows all sub routines in a .bat/.cmd file with documentation
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@ -20,16 +19,15 @@ exit /b
|
|||||||
:::.
|
:::.
|
||||||
:::usage:
|
:::usage:
|
||||||
:::.
|
:::.
|
||||||
::: %lib_base% show_subs "file"
|
::: %lib_base% help "file"
|
||||||
:::.
|
:::.
|
||||||
:::options:
|
:::options:
|
||||||
:::.
|
:::.
|
||||||
::: file <in> full path to file containing lib_routines to display
|
::: file <in> full path to file containing lib_routines to display
|
||||||
:::.
|
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
for /f "tokens=* delims=:" %%a in ('type "%~1" ^| %WINDIR%\System32\findstr /i /r "^:::"') do (
|
|
||||||
rem echo a="%%a"
|
|
||||||
|
|
||||||
|
:help
|
||||||
|
for /f "tokens=* delims=:" %%a in ('%WINDIR%\System32\findstr /i /r "^:::" "%~1"') do (
|
||||||
if "%%a"=="." (
|
if "%%a"=="." (
|
||||||
echo.
|
echo.
|
||||||
) else if /i "%%a" == "usage" (
|
) else if /i "%%a" == "usage" (
|
||||||
@ -44,9 +42,13 @@ exit /b
|
|||||||
pause
|
pause
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:cmder_shell
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::show_subs - shows all sub routines in a .bat/.cmd file with documentation
|
:::cmder_shell - Initializes the Cmder shell environment variables
|
||||||
|
:::.
|
||||||
|
:::description:
|
||||||
|
:::.
|
||||||
|
::: This routine sets up the Cmder shell environment by detecting the
|
||||||
|
::: command shell and initializing related variables.
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@ -55,29 +57,61 @@ exit /b
|
|||||||
:::usage:
|
:::usage:
|
||||||
:::.
|
:::.
|
||||||
::: %lib_base% cmder_shell
|
::: %lib_base% cmder_shell
|
||||||
:::.
|
|
||||||
:::options:
|
|
||||||
:::.
|
|
||||||
::: file <in> full path to file containing lib_routines to display
|
|
||||||
:::.
|
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
:cmder_shell
|
||||||
call :detect_comspec %ComSpec%
|
call :detect_comspec %ComSpec%
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
:::===============================================================================
|
||||||
|
:::detect_comspec - Detects the command shell being used:::
|
||||||
|
:::.
|
||||||
|
:::description:
|
||||||
|
:::.
|
||||||
|
::: This function sets the CMDER_SHELL variable to the name of the
|
||||||
|
::: detected command shell. It also initializes the CMDER_CLINK and
|
||||||
|
::: CMDER_ALIASES variables if they are not already defined.
|
||||||
|
:::.
|
||||||
|
:::include:
|
||||||
|
:::.
|
||||||
|
::: call "lib_base.cmd"
|
||||||
|
:::.
|
||||||
|
:::usage:
|
||||||
|
:::.
|
||||||
|
::: %lib_base% detect_comspec %ComSpec%
|
||||||
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
:detect_comspec
|
:detect_comspec
|
||||||
set CMDER_SHELL=%~n1
|
set CMDER_SHELL=%~n1
|
||||||
if not defined CMDER_CLINK (
|
if not defined CMDER_CLINK (
|
||||||
set CMDER_CLINK=1
|
set CMDER_CLINK=1
|
||||||
if "%CMDER_SHELL%" equ "tcc" set CMDER_CLINK=0
|
|
||||||
if "%CMDER_SHELL%" equ "tccle" set CMDER_CLINK=0
|
|
||||||
)
|
)
|
||||||
if not defined CMDER_ALIASES (
|
if not defined CMDER_ALIASES (
|
||||||
set CMDER_ALIASES=1
|
set CMDER_ALIASES=1
|
||||||
if "%CMDER_SHELL%" equ "tcc" set CMDER_ALIASES=0
|
|
||||||
if "%CMDER_SHELL%" equ "tccle" set CMDER_ALIASES=0
|
|
||||||
)
|
)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
:::===============================================================================
|
||||||
|
:::update_legacy_aliases - Updates the legacy alias definitions in the user_aliases file
|
||||||
|
:::.
|
||||||
|
:::description:
|
||||||
|
:::.
|
||||||
|
::: This function checks if the user_aliases file contains the marker
|
||||||
|
::: ";= Add aliases below here". If the marker is not found, it creates
|
||||||
|
::: an initial user_aliases store by copying the default user_aliases file
|
||||||
|
::: from the CMDER_ROOT directory. If the CMDER_USER_CONFIG environment
|
||||||
|
::: variable is defined, it creates a backup of the existing user_aliases
|
||||||
|
::: file before copying the default file.
|
||||||
|
:::.
|
||||||
|
:::include:
|
||||||
|
:::.
|
||||||
|
::: call "lib_base.cmd"
|
||||||
|
:::.
|
||||||
|
:::usage:
|
||||||
|
:::.
|
||||||
|
::: %lib_base% update_legacy_aliases
|
||||||
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
:update_legacy_aliases
|
:update_legacy_aliases
|
||||||
type "%user_aliases%" | %WINDIR%\System32\findstr /i ";= Add aliases below here" >nul
|
type "%user_aliases%" | %WINDIR%\System32\findstr /i ";= Add aliases below here" >nul
|
||||||
if "%errorlevel%" == "1" (
|
if "%errorlevel%" == "1" (
|
||||||
|
29
vendor/lib/lib_console.cmd
vendored
29
vendor/lib/lib_console.cmd
vendored
@ -2,13 +2,15 @@
|
|||||||
|
|
||||||
call "%~dp0lib_base.cmd"
|
call "%~dp0lib_base.cmd"
|
||||||
set lib_console=call "%~dp0lib_console.cmd"
|
set lib_console=call "%~dp0lib_console.cmd"
|
||||||
|
set ESC=
|
||||||
|
|
||||||
:: Much faster than using "%lib_console% debug_output ..." etc.
|
:: Much faster than using "%lib_console% debug_output ..." etc.
|
||||||
set print_debug=if %debug_output% gtr 0 %lib_console% debug_output
|
set print_debug=if %debug_output% gtr 0 %lib_console% debug_output
|
||||||
set print_verbose=if %verbose_output% gtr 0 %lib_console% verbose_output
|
set print_verbose=if %verbose_output% gtr 0 %lib_console% verbose_output
|
||||||
|
set print_warning=if %verbose_output% gtr 0 %lib_console% show_warning
|
||||||
set print_error=%lib_console% show_error
|
set print_error=%lib_console% show_error
|
||||||
|
|
||||||
if "%fast_init%" == "1" exit /b
|
if %fast_init% gtr %verbose_output% if %fast_init% gtr %debug_output% exit /b
|
||||||
|
|
||||||
if "%~1" == "/h" (
|
if "%~1" == "/h" (
|
||||||
%lib_base% help "%~0"
|
%lib_base% help "%~0"
|
||||||
@ -38,7 +40,7 @@ exit /b
|
|||||||
:::.
|
:::.
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
if %debug_output% gtr 0 echo DEBUG(%~1): %~2 & echo.
|
if %debug_output% gtr 0 echo %time% DEBUG(%~1): %~2 & echo.
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:verbose_output
|
:verbose_output
|
||||||
@ -80,5 +82,26 @@ exit /b
|
|||||||
:::.
|
:::.
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
echo ERROR: %~1
|
echo %ESC%[91;1mERROR:%ESC%[0m %~1
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:show_warning
|
||||||
|
:::===============================================================================
|
||||||
|
:::show_warning - Output a warning message to the console.
|
||||||
|
:::.
|
||||||
|
:::include:
|
||||||
|
:::.
|
||||||
|
::: call "$0"
|
||||||
|
:::.
|
||||||
|
:::usage:
|
||||||
|
:::.
|
||||||
|
::: %lib_console% show_warning "[message]"
|
||||||
|
:::.
|
||||||
|
:::required:
|
||||||
|
:::.
|
||||||
|
::: [message] <in> Message text to display.
|
||||||
|
:::.
|
||||||
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
echo %ESC%[93;1mWARNING:%ESC%[0m %~1
|
||||||
exit /b
|
exit /b
|
||||||
|
29
vendor/lib/lib_git.cmd
vendored
29
vendor/lib/lib_git.cmd
vendored
@ -12,7 +12,6 @@ if "%~1" == "/h" (
|
|||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:read_version
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::read_version - Get the git.exe version
|
:::read_version - Get the git.exe version
|
||||||
:::.
|
:::.
|
||||||
@ -34,6 +33,7 @@ exit /b
|
|||||||
::: GIT_VERSION_[GIT SCOPE] <out> Env variable containing Git semantic version string
|
::: GIT_VERSION_[GIT SCOPE] <out> Env variable containing Git semantic version string
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
:read_version
|
||||||
:: clear the variables
|
:: clear the variables
|
||||||
set GIT_VERSION_%~1=
|
set GIT_VERSION_%~1=
|
||||||
|
|
||||||
@ -55,6 +55,7 @@ exit /b
|
|||||||
set "GIT_VERSION=%%C"
|
set "GIT_VERSION=%%C"
|
||||||
) else (
|
) else (
|
||||||
echo "'git --version' returned an improper version string!"
|
echo "'git --version' returned an improper version string!"
|
||||||
|
%print_debug% :read_version "returned string: '%%A %%B %%C' by executable path: %git_executable%"
|
||||||
pause
|
pause
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
@ -63,7 +64,6 @@ exit /b
|
|||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:parse_version
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::parse_version - Parse semantic version string 'x.x.x.x' and return the pieces
|
:::parse_version - Parse semantic version string 'x.x.x.x' and return the pieces
|
||||||
:::.
|
:::.
|
||||||
@ -88,6 +88,7 @@ exit /b
|
|||||||
::: [SCOPE]_BUILD <out> Scoped Build version.
|
::: [SCOPE]_BUILD <out> Scoped Build version.
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
:parse_version
|
||||||
:: process a `x.x.x.xxxx.x` formatted string
|
:: process a `x.x.x.xxxx.x` formatted string
|
||||||
%print_debug% :parse_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
%print_debug% :parse_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
||||||
|
|
||||||
@ -110,9 +111,8 @@ exit /b
|
|||||||
|
|
||||||
:endlocal_set_git_version
|
:endlocal_set_git_version
|
||||||
|
|
||||||
:validate_version
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::validate_version - Validate semantic version string 'x.x.x.x'.
|
:::validate_version - Validate semantic version string 'x.x.x.x'
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@ -128,6 +128,7 @@ exit /b
|
|||||||
::: [VERSION] <in> Semantic version String. Ex: 1.2.3.4
|
::: [VERSION] <in> Semantic version String. Ex: 1.2.3.4
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
:validate_version
|
||||||
:: now parse the version information into the corresponding variables
|
:: now parse the version information into the corresponding variables
|
||||||
%print_debug% :validate_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
%print_debug% :validate_version "ARGV[1]=%~1, ARGV[2]=%~2"
|
||||||
|
|
||||||
@ -142,9 +143,8 @@ exit /b
|
|||||||
)
|
)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:compare_versions
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::compare_version - Compare semantic versions return latest version.
|
:::compare_version - Compare semantic versions and return latest version
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@ -160,6 +160,7 @@ exit /b
|
|||||||
::: [SCOPE2] <in> Example: VENDOR
|
::: [SCOPE2] <in> Example: VENDOR
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
:compare_versions
|
||||||
:: checks all major, minor, patch and build variables for the given arguments.
|
:: checks all major, minor, patch and build variables for the given arguments.
|
||||||
:: whichever binary that has the most recent version will be used based on the return code.
|
:: whichever binary that has the most recent version will be used based on the return code.
|
||||||
|
|
||||||
@ -184,7 +185,12 @@ exit /b
|
|||||||
endlocal & exit /b 0
|
endlocal & exit /b 0
|
||||||
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::is_git_shim
|
:::is_git_shim - Check if the directory has a git.shim file
|
||||||
|
:::.
|
||||||
|
:::description:
|
||||||
|
:::.
|
||||||
|
::: Shim is a small helper program for Scoop that calls the executable configured in git.shim file
|
||||||
|
::: See: github.com/ScoopInstaller/Shim and github.com/cmderdev/cmder/pull/1905
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@ -201,7 +207,7 @@ exit /b
|
|||||||
|
|
||||||
:is_git_shim
|
:is_git_shim
|
||||||
pushd "%~1"
|
pushd "%~1"
|
||||||
:: check if there's shim - and if yes follow the path
|
:: check if there is a shim file - if yes, read the actual executable path
|
||||||
setlocal enabledelayedexpansion
|
setlocal enabledelayedexpansion
|
||||||
if exist git.shim (
|
if exist git.shim (
|
||||||
for /F "tokens=2 delims== " %%I in (git.shim) do (
|
for /F "tokens=2 delims== " %%I in (git.shim) do (
|
||||||
@ -218,7 +224,7 @@ exit /b
|
|||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::compare_git_versions
|
:::compare_git_versions - Compare the user git version against the vendored version
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@ -252,7 +258,7 @@ exit /b
|
|||||||
:: if the user provided git executable is not found
|
:: if the user provided git executable is not found
|
||||||
IF ERRORLEVEL -255 IF NOT ERRORLEVEL -254 (
|
IF ERRORLEVEL -255 IF NOT ERRORLEVEL -254 (
|
||||||
:: if not exist "%git_executable%" (
|
:: if not exist "%git_executable%" (
|
||||||
%print_debug% ":compare_git_versions" "No git at "%git_executable%" found."
|
%print_debug% ":compare_git_versions" "No git at '%git_executable%' found."
|
||||||
set test_dir=
|
set test_dir=
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -261,7 +267,7 @@ exit /b
|
|||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::get_user_git_version - get the version information for the user provided git binary
|
:::get_user_git_version - Get the version information for the user provided git binary
|
||||||
:::.
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::.
|
:::.
|
||||||
@ -278,4 +284,3 @@ exit /b
|
|||||||
%print_debug% ":get_user_git_version" "get_user_git_version GIT_VERSION_USER: %GIT_VERSION_USER%"
|
%print_debug% ":get_user_git_version" "get_user_git_version GIT_VERSION_USER: %GIT_VERSION_USER%"
|
||||||
%lib_git% validate_version USER %GIT_VERSION_USER%
|
%lib_git% validate_version USER %GIT_VERSION_USER%
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
20
vendor/lib/lib_path.cmd
vendored
20
vendor/lib/lib_path.cmd
vendored
@ -1,6 +1,5 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
|
|
||||||
call "%~dp0lib_base.cmd"
|
call "%~dp0lib_base.cmd"
|
||||||
call "%%~dp0lib_console"
|
call "%%~dp0lib_console"
|
||||||
set lib_path=call "%~dp0lib_path.cmd"
|
set lib_path=call "%~dp0lib_path.cmd"
|
||||||
@ -11,6 +10,13 @@ if "%~1" == "/h" (
|
|||||||
call :%*
|
call :%*
|
||||||
)
|
)
|
||||||
|
|
||||||
|
setlocal enabledelayedexpansion
|
||||||
|
if not defined find_pathext (
|
||||||
|
set "find_pathext=!PATHEXT:;= !"
|
||||||
|
set "find_pathext=!find_pathext:.=\.!"
|
||||||
|
)
|
||||||
|
endlocal & set "find_pathext=%find_pathext%"
|
||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:enhance_path
|
:enhance_path
|
||||||
@ -32,13 +38,12 @@ exit /b
|
|||||||
:::options:
|
:::options:
|
||||||
:::
|
:::
|
||||||
::: append <in> Append to the path env variable rather than pre-pend.
|
::: append <in> Append to the path env variable rather than pre-pend.
|
||||||
::B
|
:::
|
||||||
:::
|
:::
|
||||||
:::output:
|
:::output:
|
||||||
:::
|
:::
|
||||||
::: path <out> Sets the path env variable if required.
|
::: path <out> Sets the path env variable if required.
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
if "%~1" neq "" (
|
if "%~1" neq "" (
|
||||||
set "add_path=%~1"
|
set "add_path=%~1"
|
||||||
) else (
|
) else (
|
||||||
@ -52,7 +57,8 @@ exit /b
|
|||||||
set "position="
|
set "position="
|
||||||
)
|
)
|
||||||
|
|
||||||
dir "%add_path%" | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL
|
dir "%add_path%" 2>NUL | findstr -i -e "%find_pathext%" >NUL
|
||||||
|
|
||||||
if "%ERRORLEVEL%" == "0" (
|
if "%ERRORLEVEL%" == "0" (
|
||||||
set "add_to_path=%add_path%"
|
set "add_to_path=%add_path%"
|
||||||
) else (
|
) else (
|
||||||
@ -135,7 +141,6 @@ exit /b
|
|||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
|
||||||
:set_found
|
:set_found
|
||||||
if "%ERRORLEVEL%" == "0" (
|
if "%ERRORLEVEL%" == "0" (
|
||||||
set found=1
|
set found=1
|
||||||
@ -186,7 +191,7 @@ exit /b
|
|||||||
set "position="
|
set "position="
|
||||||
)
|
)
|
||||||
|
|
||||||
dir "%add_path%" 2>NUL | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL
|
dir "%add_path%" 2>NUL | findstr -i -e "%find_pathext%" >NUL
|
||||||
|
|
||||||
if "%ERRORLEVEL%" == "0" (
|
if "%ERRORLEVEL%" == "0" (
|
||||||
set "add_to_path=%add_path%"
|
set "add_to_path=%add_path%"
|
||||||
@ -223,7 +228,7 @@ exit /b
|
|||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
: set_depth
|
:set_depth
|
||||||
set /a "depth=%depth%+1"
|
set /a "depth=%depth%+1"
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
@ -239,4 +244,3 @@ exit /b
|
|||||||
%print_debug% :enhance_path_recursive "Env Var AFTER- depth=%depth%"
|
%print_debug% :enhance_path_recursive "Env Var AFTER- depth=%depth%"
|
||||||
)
|
)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
19
vendor/lib/lib_profile.cmd
vendored
19
vendor/lib/lib_profile.cmd
vendored
@ -12,26 +12,26 @@ if "%~1" == "/h" (
|
|||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:run_profile_d
|
|
||||||
:::===============================================================================
|
:::===============================================================================
|
||||||
:::run_profile_d - Run all scripts in the passed dir path
|
:::run_profile_d - Run all scripts in the passed directory path
|
||||||
:::
|
:::.
|
||||||
:::include:
|
:::include:
|
||||||
:::
|
:::.
|
||||||
::: call "lib_profile.cmd"
|
::: call "lib_profile.cmd"
|
||||||
:::
|
:::.
|
||||||
:::usage:
|
:::usage:
|
||||||
:::
|
:::.
|
||||||
::: %lib_profile% "[dir_path]"
|
::: %lib_profile% "[dir_path]"
|
||||||
:::
|
:::.
|
||||||
:::required:
|
:::required:
|
||||||
:::
|
:::.
|
||||||
::: [dir_path] <in> Fully qualified directory path containing init *.cmd|*.bat.
|
::: [dir_path] <in> Fully qualified directory path containing init *.cmd|*.bat.
|
||||||
::: Example: "c:\bin"
|
::: Example: "c:\bin"
|
||||||
:::
|
:::.
|
||||||
::: path <out> Sets the path env variable if required.
|
::: path <out> Sets the path env variable if required.
|
||||||
:::-------------------------------------------------------------------------------
|
:::-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
:run_profile_d
|
||||||
if not exist "%~1" (
|
if not exist "%~1" (
|
||||||
mkdir "%~1"
|
mkdir "%~1"
|
||||||
)
|
)
|
||||||
@ -43,4 +43,3 @@ exit /b
|
|||||||
)
|
)
|
||||||
popd
|
popd
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
83
vendor/profile.ps1
vendored
83
vendor/profile.ps1
vendored
@ -1,10 +1,11 @@
|
|||||||
# Init Script for PowerShell
|
# Init Script for PowerShell
|
||||||
# Created as part of cmder project
|
# Created as part of Cmder project
|
||||||
|
# NOTE: This file must be saved using UTF-8 with BOM encoding for prompt symbol to work correctly.
|
||||||
|
|
||||||
# !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
# !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||||
# !!! Use "%CMDER_ROOT%\config\user_profile.ps1" to add your own startup commands
|
# !!! Use "%CMDER_ROOT%\config\user_profile.ps1" to add your own startup commands
|
||||||
|
|
||||||
$CMDER_INIT_START = $(Get-Date -UFormat %s)
|
$CMDER_INIT_START = Get-Date
|
||||||
|
|
||||||
# Compatibility with PS major versions <= 2
|
# Compatibility with PS major versions <= 2
|
||||||
if (!$PSScriptRoot) {
|
if (!$PSScriptRoot) {
|
||||||
@ -12,12 +13,12 @@ if (!$PSScriptRoot) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($ENV:CMDER_USER_CONFIG) {
|
if ($ENV:CMDER_USER_CONFIG) {
|
||||||
# Write-Host "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '$ENV:CMDER_USER_CONFIG'!"
|
Write-Verbose "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '$ENV:CMDER_USER_CONFIG'!"
|
||||||
}
|
}
|
||||||
|
|
||||||
# We do this for Powershell as Admin Sessions because CMDER_ROOT is not being set.
|
# We do this for Powershell as Admin Sessions because CMDER_ROOT is not being set.
|
||||||
if ($null -eq $ENV:CMDER_ROOT) {
|
if (!$ENV:CMDER_ROOT) {
|
||||||
if (-Not($null -eq $ENV:ConEmuDir)) {
|
if ($ENV:ConEmuDir) {
|
||||||
$ENV:CMDER_ROOT = Resolve-Path($ENV:ConEmuDir + "\..\..")
|
$ENV:CMDER_ROOT = Resolve-Path($ENV:ConEmuDir + "\..\..")
|
||||||
} else {
|
} else {
|
||||||
$ENV:CMDER_ROOT = Resolve-Path($PSScriptRoot + "\..")
|
$ENV:CMDER_ROOT = Resolve-Path($PSScriptRoot + "\..")
|
||||||
@ -25,9 +26,8 @@ if ($null -eq $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)
|
||||||
|
|
||||||
@ -42,18 +42,18 @@ if(-not $moduleInstallerAvailable -and -not $env:PSModulePath.Contains($CmderMod
|
|||||||
}
|
}
|
||||||
|
|
||||||
$gitVersionVendor = (readVersion -gitPath "$ENV:CMDER_ROOT\vendor\git-for-windows\cmd")
|
$gitVersionVendor = (readVersion -gitPath "$ENV:CMDER_ROOT\vendor\git-for-windows\cmd")
|
||||||
# Write-Host "GIT VENDOR: ${gitVersionVendor}"
|
Write-Debug "GIT VENDOR: ${gitVersionVendor}"
|
||||||
|
|
||||||
# Get user installed Git Version[s] and Compare with vendored if found.
|
# Get user installed Git Version[s] and Compare with vendored if found.
|
||||||
foreach ($git in (Get-Command -ErrorAction SilentlyContinue 'git')) {
|
foreach ($git in (Get-Command -ErrorAction SilentlyContinue 'git')) {
|
||||||
# Write-Host "GIT PATH: " + $git.Path
|
Write-Debug "GIT PATH: {$git.Path}"
|
||||||
$gitDir = Split-Path -Path $git.Path
|
$gitDir = Split-Path -Path $git.Path
|
||||||
$gitDir = isGitShim -gitPath $gitDir
|
$gitDir = isGitShim -gitPath $gitDir
|
||||||
$gitVersionUser = (readVersion -gitPath $gitDir)
|
$gitVersionUser = (readVersion -gitPath $gitDir)
|
||||||
# Write-Host "GIT USER: ${gitVersionUser}"
|
Write-Debug "GIT USER: ${gitVersionUser}"
|
||||||
|
|
||||||
$useGitVersion = compare_git_versions -userVersion $gitVersionUser -vendorVersion $gitVersionVendor
|
$useGitVersion = compare_git_versions -userVersion $gitVersionUser -vendorVersion $gitVersionVendor
|
||||||
# Write-Host "Using GIT Version: ${useGitVersion}"
|
Write-Debug "Using Git Version: ${useGitVersion}"
|
||||||
|
|
||||||
# Use user installed Git
|
# Use user installed Git
|
||||||
if ($null -eq $gitPathUser) {
|
if ($null -eq $gitPathUser) {
|
||||||
@ -65,7 +65,7 @@ foreach ($git in (Get-Command -ErrorAction SilentlyContinue 'git')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($useGitVersion -eq $gitVersionUser) {
|
if ($useGitVersion -eq $gitVersionUser) {
|
||||||
# Write-Host "Using GIT Dir: ${gitDir}"
|
Write-Debug "Using Git Dir: ${gitDir}"
|
||||||
$ENV:GIT_INSTALL_ROOT = $gitPathUser
|
$ENV:GIT_INSTALL_ROOT = $gitPathUser
|
||||||
$ENV:GIT_INSTALL_TYPE = 'USER'
|
$ENV:GIT_INSTALL_TYPE = 'USER'
|
||||||
break
|
break
|
||||||
@ -78,14 +78,14 @@ if ($null -eq $ENV:GIT_INSTALL_ROOT -and $null -ne $gitVersionVendor) {
|
|||||||
$ENV:GIT_INSTALL_TYPE = 'VENDOR'
|
$ENV:GIT_INSTALL_TYPE = 'VENDOR'
|
||||||
}
|
}
|
||||||
|
|
||||||
# Write-Host "GIT_INSTALL_ROOT: ${ENV:GIT_INSTALL_ROOT}"
|
Write-Debug "GIT_INSTALL_ROOT: ${ENV:GIT_INSTALL_ROOT}"
|
||||||
# Write-Host "GIT_INSTALL_TYPE: ${ENV:GIT_INSTALL_TYPE}"
|
Write-Debug "GIT_INSTALL_TYPE: ${ENV:GIT_INSTALL_TYPE}"
|
||||||
|
|
||||||
if (-Not ($null -eq $ENV:GIT_INSTALL_ROOT)) {
|
if ($null -ne $ENV:GIT_INSTALL_ROOT) {
|
||||||
$env:Path = Configure-Git -gitRoot "$ENV:GIT_INSTALL_ROOT" -gitType $ENV:GIT_INSTALL_TYPE -gitPathUser $gitPathUser
|
$env:Path = Configure-Git -gitRoot "$ENV:GIT_INSTALL_ROOT" -gitType $ENV:GIT_INSTALL_TYPE -gitPathUser $gitPathUser
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Get-Command -Name "vim" -ErrorAction silentlycontinue) {
|
if (Get-Command -Name "vim" -ErrorAction SilentlyContinue) {
|
||||||
New-Alias -name "vi" -value vim
|
New-Alias -name "vi" -value vim
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,16 +94,20 @@ if (Get-Module PSReadline -ErrorAction "SilentlyContinue") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Pre-assign default prompt hooks so the first run of cmder gets a working prompt.
|
# Pre-assign default prompt hooks so the first run of cmder gets a working prompt.
|
||||||
$env:gitLoaded = $false
|
$env:gitLoaded = $null
|
||||||
[ScriptBlock]$PrePrompt = {}
|
[ScriptBlock]$PrePrompt = {}
|
||||||
[ScriptBlock]$PostPrompt = {}
|
[ScriptBlock]$PostPrompt = {}
|
||||||
[ScriptBlock]$CmderPrompt = {
|
[ScriptBlock]$CmderPrompt = {
|
||||||
|
# Check if we're currently running under Admin privileges.
|
||||||
|
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
|
||||||
|
$principal = [Security.Principal.WindowsPrincipal] $identity
|
||||||
|
$adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator
|
||||||
|
$color = "White"
|
||||||
|
if ($principal.IsInRole($adminRole)) { $color = "Red" }
|
||||||
$Host.UI.RawUI.ForegroundColor = "White"
|
$Host.UI.RawUI.ForegroundColor = "White"
|
||||||
Write-Host -NoNewline "PS "
|
Microsoft.PowerShell.Utility\Write-Host "PS " -NoNewline -ForegroundColor $color
|
||||||
Microsoft.PowerShell.Utility\Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
|
Microsoft.PowerShell.Utility\Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
|
||||||
if (Get-Command git -erroraction silentlycontinue) {
|
|
||||||
checkGit($pwd.ProviderPath)
|
checkGit($pwd.ProviderPath)
|
||||||
}
|
|
||||||
Microsoft.PowerShell.Utility\Write-Host "`nλ" -NoNewLine -ForegroundColor "DarkGray"
|
Microsoft.PowerShell.Utility\Write-Host "`nλ" -NoNewLine -ForegroundColor "DarkGray"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,33 +116,31 @@ $env:Path = "$Env:CMDER_ROOT\bin;$Env:CMDER_ROOT\vendor\bin;$env:Path;$Env:CMDER
|
|||||||
|
|
||||||
# Drop *.ps1 files into "$ENV:CMDER_ROOT\config\profile.d"
|
# Drop *.ps1 files into "$ENV:CMDER_ROOT\config\profile.d"
|
||||||
# to source them at startup.
|
# to source them at startup.
|
||||||
if (-Not (Test-Path -PathType container "$ENV:CMDER_ROOT\config\profile.d")) {
|
if (-not (Test-Path -PathType container "$ENV:CMDER_ROOT\config\profile.d")) {
|
||||||
New-Item -ItemType Directory -Path "$ENV:CMDER_ROOT\config\profile.d"
|
New-Item -ItemType Directory -Path "$ENV:CMDER_ROOT\config\profile.d"
|
||||||
}
|
}
|
||||||
|
|
||||||
Push-Location $ENV:CMDER_ROOT\config\profile.d
|
Push-Location $ENV:CMDER_ROOT\config\profile.d
|
||||||
foreach ($x in Get-ChildItem *.psm1) {
|
foreach ($x in Get-ChildItem *.psm1) {
|
||||||
# Write-Host Write-Host Sourcing $x
|
Write-Verbose "Sourcing $x"
|
||||||
Import-Module $x
|
Import-Module $x
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($x in Get-ChildItem *.ps1) {
|
foreach ($x in Get-ChildItem *.ps1) {
|
||||||
# Write-Host Write-Host Sourcing $x
|
Write-Verbose "Sourcing $x"
|
||||||
. $x
|
. $x
|
||||||
}
|
}
|
||||||
Pop-Location
|
Pop-Location
|
||||||
|
|
||||||
# Drop *.ps1 files into "$ENV:CMDER_USER_CONFIG\config\profile.d"
|
# Drop *.ps1 files into "$ENV:CMDER_USER_CONFIG\config\profile.d"
|
||||||
# to source them at startup. Requires using cmder.exe /C [cmder_user_root_path] argument
|
# to source them at startup. Requires using cmder.exe /C [cmder_user_root_path] argument
|
||||||
if ($ENV:CMDER_USER_CONFIG -ne "" -And (Test-Path "$ENV:CMDER_USER_CONFIG\profile.d")) {
|
if ($ENV:CMDER_USER_CONFIG -ne "" -and (Test-Path "$ENV:CMDER_USER_CONFIG\profile.d")) {
|
||||||
Push-Location $ENV:CMDER_USER_CONFIG\profile.d
|
Push-Location $ENV:CMDER_USER_CONFIG\profile.d
|
||||||
foreach ($x in Get-ChildItem *.psm1) {
|
foreach ($x in Get-ChildItem *.psm1) {
|
||||||
# Write-Host Write-Host Sourcing $x
|
Write-Verbose "Sourcing $x"
|
||||||
Import-Module $x
|
Import-Module $x
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($x in Get-ChildItem *.ps1) {
|
foreach ($x in Get-ChildItem *.ps1) {
|
||||||
# Write-Host Write-Host Sourcing $x
|
Write-Verbose "Sourcing $x"
|
||||||
. $x
|
. $x
|
||||||
}
|
}
|
||||||
Pop-Location
|
Pop-Location
|
||||||
@ -169,8 +171,10 @@ if ($ENV:CMDER_USER_CONFIG) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-Not (Test-Path $CmderUserProfilePath)) {
|
if (-not (Test-Path $CmderUserProfilePath)) {
|
||||||
Write-Host -BackgroundColor Darkgreen -ForegroundColor White "First Run: Creating user startup file: $CmderUserProfilePath"
|
$CmderUserProfilePath = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($CmderUserProfilePath)
|
||||||
|
Write-Host -NoNewline "`r"
|
||||||
|
Write-Host -BackgroundColor Green -ForegroundColor Black "First Run: Creating user startup file: $CmderUserProfilePath"
|
||||||
Copy-Item "$env:CMDER_ROOT\vendor\user_profile.ps1.default" -Destination $CmderUserProfilePath
|
Copy-Item "$env:CMDER_ROOT\vendor\user_profile.ps1.default" -Destination $CmderUserProfilePath
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,16 +194,20 @@ if ( $(Get-Command prompt).Definition -match 'PS \$\(\$executionContext.SessionS
|
|||||||
Custom prompt functions are loaded in as constants to get the same behaviour
|
Custom prompt functions are loaded in as constants to get the same behaviour
|
||||||
#>
|
#>
|
||||||
[ScriptBlock]$Prompt = {
|
[ScriptBlock]$Prompt = {
|
||||||
$realLASTEXITCODE = $LASTEXITCODE
|
$lastSUCCESS = $?
|
||||||
|
$realLastExitCode = $LastExitCode
|
||||||
$host.UI.RawUI.WindowTitle = Microsoft.PowerShell.Management\Split-Path $pwd.ProviderPath -Leaf
|
$host.UI.RawUI.WindowTitle = Microsoft.PowerShell.Management\Split-Path $pwd.ProviderPath -Leaf
|
||||||
|
Microsoft.PowerShell.Utility\Write-Host -NoNewline "$([char]0x200B)`r$([char]0x1B)[K"
|
||||||
|
if ($lastSUCCESS -or ($LastExitCode -ne 0)) {
|
||||||
|
Microsoft.PowerShell.Utility\Write-Host
|
||||||
|
}
|
||||||
PrePrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
PrePrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
||||||
CmderPrompt
|
CmderPrompt
|
||||||
PostPrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
PostPrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
||||||
$global:LASTEXITCODE = $realLASTEXITCODE
|
$global:LastExitCode = $realLastExitCode
|
||||||
return " "
|
return " "
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Once Created these code blocks cannot be overwritten
|
# Once Created these code blocks cannot be overwritten
|
||||||
# if (-not $(Get-Command PrePrompt).Options -match 'Constant') {Set-Item -Path function:\PrePrompt -Value $PrePrompt -Options Constant}
|
# if (-not $(Get-Command PrePrompt).Options -match 'Constant') {Set-Item -Path function:\PrePrompt -Value $PrePrompt -Options Constant}
|
||||||
# if (-not $(Get-Command CmderPrompt).Options -match 'Constant') {Set-Item -Path function:\CmderPrompt -Value $CmderPrompt -Options Constant}
|
# if (-not $(Get-Command CmderPrompt).Options -match 'Constant') {Set-Item -Path function:\CmderPrompt -Value $CmderPrompt -Options Constant}
|
||||||
@ -215,5 +223,8 @@ if ( $(Get-Command prompt).Definition -match 'PS \$\(\$executionContext.SessionS
|
|||||||
Set-Item -Path function:\prompt -Value $Prompt -Options ReadOnly
|
Set-Item -Path function:\prompt -Value $Prompt -Options ReadOnly
|
||||||
}
|
}
|
||||||
|
|
||||||
$CMDER_INIT_END = $(Get-Date -UFormat %s)
|
$CMDER_INIT_END = Get-Date
|
||||||
# Write-Host "Elapsed Time: $(get-Date) `($($CMDER_INIT_END - $CMDER_INIT_START) total`)"
|
|
||||||
|
$ElapsedTime = New-TimeSpan -Start $CMDER_INIT_START -End $CMDER_INIT_END
|
||||||
|
|
||||||
|
Write-Verbose "Elapsed Time: $($ElapsedTime.TotalSeconds) seconds total"
|
||||||
|
116
vendor/psmodules/Cmder.ps1
vendored
116
vendor/psmodules/Cmder.ps1
vendored
@ -1,7 +1,7 @@
|
|||||||
function readVersion($gitPath) {
|
function readVersion($gitPath) {
|
||||||
$gitExecutable = "${gitPath}\git.exe"
|
$gitExecutable = "${gitPath}\git.exe"
|
||||||
|
|
||||||
if (!(test-path "$gitExecutable")) {
|
if (-not (Test-Path "$gitExecutable")) {
|
||||||
return $null
|
return $null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18,26 +18,27 @@ function readVersion($gitPath) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function isGitShim($gitPath) {
|
function isGitShim($gitPath) {
|
||||||
# check if there's shim - and if yes follow the path
|
# check if there is a shim file - if yes, read the actual executable path
|
||||||
|
# See: github.com/ScoopInstaller/Shim
|
||||||
|
|
||||||
if (test-path "${gitPath}\git.shim") {
|
if (Test-Path "${gitPath}\git.shim") {
|
||||||
$shim = (get-content "${gitPath}\git.shim")
|
$shim = (get-content "${gitPath}\git.shim")
|
||||||
($trash, $gitPath) = $shim.replace(' ','').split('=')
|
($trash, $gitPath) = $shim.replace(' ', '').split('=')
|
||||||
|
|
||||||
$gitPath=$gitPath.replace('\git.exe','')
|
$gitPath = $gitPath.replace('\git.exe', '')
|
||||||
}
|
}
|
||||||
|
|
||||||
return $gitPath.toString()
|
return $gitPath.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
function compareVersions($userVersion, $vendorVersion) {
|
function compareVersions($userVersion, $vendorVersion) {
|
||||||
if (-not($userVersion -eq $null)) {
|
if ($null -ne $userVersion) {
|
||||||
($userMajor, $userMinor, $userPatch, $userBuild) = $userVersion.split('.', 4)
|
($userMajor, $userMinor, $userPatch, $userBuild) = $userVersion.split('.', 4)
|
||||||
} else {
|
} else {
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-not($vendorVersion -eq $null)) {
|
if ($null -ne $vendorVersion) {
|
||||||
($vendorMajor, $vendorMinor, $vendorPatch, $vendorBuild) = $vendorVersion.split('.', 4)
|
($vendorMajor, $vendorMinor, $vendorPatch, $vendorBuild) = $vendorVersion.split('.', 4)
|
||||||
} else {
|
} else {
|
||||||
return 1
|
return 1
|
||||||
@ -47,17 +48,17 @@ function compareVersions($userVersion, $vendorVersion) {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($userMajor -gt $vendorMajor) {return 1}
|
if ($userMajor -gt $vendorMajor) { return 1 }
|
||||||
if ($userMajor -lt $vendorMajor) {return -1}
|
if ($userMajor -lt $vendorMajor) { return -1 }
|
||||||
|
|
||||||
if ($userMinor -gt $vendorMinor) {return 1}
|
if ($userMinor -gt $vendorMinor) { return 1 }
|
||||||
if ($userMinor -lt $vendorMinor) {return -1}
|
if ($userMinor -lt $vendorMinor) { return -1 }
|
||||||
|
|
||||||
if ($userPatch -gt $vendorPatch) {return 1}
|
if ($userPatch -gt $vendorPatch) { return 1 }
|
||||||
if ($userPatch -lt $vendorPatch) {return -1}
|
if ($userPatch -lt $vendorPatch) { return -1 }
|
||||||
|
|
||||||
if ($userBuild -gt $vendorBuild) {return 1}
|
if ($userBuild -gt $vendorBuild) { return 1 }
|
||||||
if ($userBuild -lt $vendorBuild) {return -1}
|
if ($userBuild -lt $vendorBuild) { return -1 }
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -65,45 +66,48 @@ function compareVersions($userVersion, $vendorVersion) {
|
|||||||
function compare_git_versions($userVersion, $vendorVersion) {
|
function compare_git_versions($userVersion, $vendorVersion) {
|
||||||
$result = compareVersions -userVersion $userVersion -vendorVersion $vendorVersion
|
$result = compareVersions -userVersion $userVersion -vendorVersion $vendorVersion
|
||||||
|
|
||||||
# write-host "Compare Versions Result: ${result}"
|
Write-Debug "Compare Versions Result: ${result}"
|
||||||
if ($result -ge 0) {
|
if ($result -ge 0) {
|
||||||
return $userVersion
|
return $userVersion
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
return $vendorVersion
|
return $vendorVersion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function Configure-Git($gitRoot, $gitType, $gitPathUser){
|
function Configure-Git($gitRoot, $gitType, $gitPathUser) {
|
||||||
# Proposed Behavior
|
# Proposed Behavior
|
||||||
|
|
||||||
# Modify the path if we are using VENDORED Git do nothing if using USER Git.
|
# Modify the path if we are using VENDORED Git, do nothing if using USER Git.
|
||||||
# If User Git is installed but older match its path config adding paths
|
# If User Git is installed but is older, match its path config adding paths
|
||||||
# in the same path positions allowing a user to configure Cmder Git path
|
# in the same path positions allowing a user to configure Cmder Git path
|
||||||
# using locally installed Git Path Config.
|
# using locally installed Git Path Config.
|
||||||
if ($gitType -eq 'VENDOR') {
|
if ($gitType -eq 'VENDOR') {
|
||||||
# If User Git is installed replace its path config with Newer Vendored Git Path
|
# If User Git is installed replace its path config with Newer Vendored Git Path
|
||||||
if ($gitPathUser -ne '' -and $gitPathUser -ne $null) {
|
if (($null -ne $gitPathUser) -and ($gitPathUser -ne '')) {
|
||||||
# write-host "Cmder 'profile.ps1': Replacing older user Git path '$gitPathUser' with newer vendored Git path '$gitRoot' in the system path..."
|
Write-Verbose "Cmder 'profile.ps1': Replacing older user Git path '$gitPathUser' with newer vendored Git path '$gitRoot' in the system path..."
|
||||||
|
|
||||||
$newPath = ($env:path -ireplace [regex]::Escape($gitPathUser), $gitRoot)
|
$newPath = ($env:path -ireplace [regex]::Escape($gitPathUser), $gitRoot)
|
||||||
} else {
|
}
|
||||||
if (!($env:Path -match [regex]::Escape("$gitRoot\cmd"))) {
|
else {
|
||||||
# write-host "Adding $gitRoot\cmd to the path"
|
if (-not ($env:Path -match [regex]::Escape("$gitRoot\cmd"))) {
|
||||||
|
Write-Debug "Adding $gitRoot\cmd to the path"
|
||||||
$newPath = $($gitRoot + "\cmd" + ";" + $env:Path)
|
$newPath = $($gitRoot + "\cmd" + ";" + $env:Path)
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add "$gitRoot\mingw[32|64]\bin" to the path if exists and not done already
|
# Add "$gitRoot\mingw[32|64]\bin" to the path if exists and not done already
|
||||||
if ((test-path "$gitRoot\mingw32\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\mingw32\bin"))) {
|
if ((Test-Path "$gitRoot\mingw32\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\mingw32\bin"))) {
|
||||||
# write-host "Adding $gitRoot\mingw32\bin to the path"
|
Write-Debug "Adding $gitRoot\mingw32\bin to the path"
|
||||||
$newPath = "$newPath;$gitRoot\mingw32\bin"
|
$newPath = "$newPath;$gitRoot\mingw32\bin"
|
||||||
} elseif ((test-path "$gitRoot\mingw64\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\mingw64\bin"))) {
|
}
|
||||||
# write-host "Adding $gitRoot\mingw64\bin to the path"
|
elseif ((Test-Path "$gitRoot\mingw64\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\mingw64\bin"))) {
|
||||||
|
Write-Debug "Adding $gitRoot\mingw64\bin to the path"
|
||||||
$newPath = "$newPath;$gitRoot\mingw64\bin"
|
$newPath = "$newPath;$gitRoot\mingw64\bin"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add "$gitRoot\usr\bin" to the path if exists and not done already
|
# Add "$gitRoot\usr\bin" to the path if exists and not done already
|
||||||
if ((test-path "$gitRoot\usr\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\usr\bin"))) {
|
if ((Test-Path "$gitRoot\usr\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\usr\bin"))) {
|
||||||
# write-host "Adding $gitRoot\usr\bin to the path"
|
Write-Debug "Adding $gitRoot\usr\bin to the path"
|
||||||
$newPath = "$newPath;$gitRoot\usr\bin"
|
$newPath = "$newPath;$gitRoot\usr\bin"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -114,53 +118,59 @@ function Configure-Git($gitRoot, $gitType, $gitPathUser){
|
|||||||
return $env:path
|
return $env:path
|
||||||
}
|
}
|
||||||
|
|
||||||
function Import-Git(){
|
function Import-Git() {
|
||||||
$GitModule = Get-Module -Name Posh-Git -ListAvailable
|
$GitModule = Get-Module -Name Posh-Git -ListAvailable
|
||||||
if($GitModule | select version | where version -le ([version]"0.6.1.20160330")){
|
if ($GitModule | Select-Object version | Where-Object version -le ([version]"0.6.1.20160330")) {
|
||||||
Import-Module Posh-Git > $null
|
Import-Module Posh-Git > $null
|
||||||
}
|
}
|
||||||
if($GitModule | select version | where version -ge ([version]"1.0.0")){
|
if ($GitModule | Select-Object version | Where-Object version -ge ([version]"1.0.0")) {
|
||||||
Import-Module Posh-Git > $null
|
Import-Module Posh-Git > $null
|
||||||
$GitPromptSettings.AnsiConsole = $false
|
$GitPromptSettings.AnsiConsole = $false
|
||||||
}
|
}
|
||||||
if(-not ($GitModule) ) {
|
if (-not $GitModule) {
|
||||||
Write-Warning "Missing git support, install posh-git with 'Install-Module posh-git' and restart cmder."
|
Write-Host -NoNewline "`r`n"
|
||||||
|
Write-Warning "Missing git support, install posh-git with 'Install-Module posh-git' and restart Cmder."
|
||||||
|
Write-Host -NoNewline "`r$([char]0x1B)[A"
|
||||||
|
return $false
|
||||||
}
|
}
|
||||||
# Make sure we only run once by alawys returning true
|
# Make sure we only run once by always returning true
|
||||||
return $true
|
return $true
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkGit($Path) {
|
function checkGit($Path) {
|
||||||
if (Test-Path -Path (Join-Path $Path '.git') ) {
|
if (-not (Get-Command git -ErrorAction SilentlyContinue)) {
|
||||||
if($env:gitLoaded -eq 'false') {
|
return
|
||||||
|
}
|
||||||
|
if (-not (Test-Path -Path (Join-Path $Path '.git'))) {
|
||||||
|
$SplitPath = Split-Path $path
|
||||||
|
if ($SplitPath) { checkGit($SplitPath) }
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (getGitStatusSetting -eq $true) {
|
||||||
|
if ($null -eq $env:gitLoaded) {
|
||||||
$env:gitLoaded = Import-Git
|
$env:gitLoaded = Import-Git
|
||||||
}
|
}
|
||||||
|
if ($env:gitLoaded -eq $true) {
|
||||||
if (getGitStatusSetting -eq $true) {
|
|
||||||
Write-VcsStatus
|
Write-VcsStatus
|
||||||
} else {
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
$headContent = Get-Content (Join-Path $Path '.git/HEAD')
|
$headContent = Get-Content (Join-Path $Path '.git/HEAD')
|
||||||
if ($headContent -like "ref: refs/heads/*") {
|
if ($headContent -like "ref: refs/heads/*") {
|
||||||
$branchName = $headContent.Substring(16)
|
$branchName = $headContent.Substring(16)
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
$branchName = "HEAD detached at $($headContent.Substring(0, 7))"
|
$branchName = "HEAD detached at $($headContent.Substring(0, 7))"
|
||||||
}
|
}
|
||||||
Write-Host " [$branchName]" -NoNewline -ForegroundColor White
|
Write-Host " [$branchName]" -NoNewline -ForegroundColor White
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
$SplitPath = split-path $path
|
|
||||||
if ($SplitPath) {
|
|
||||||
checkGit($SplitPath)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getGitStatusSetting() {
|
function getGitStatusSetting() {
|
||||||
$gitStatus = (git --no-pager config -l) | out-string
|
$gitStatus = (git --no-pager config -l) | Out-String
|
||||||
|
|
||||||
ForEach ($line in $($gitStatus -split "`r`n")) {
|
foreach ($line in $($gitStatus -split "`r`n")) {
|
||||||
if ($line -match 'cmder.status=false' -or $line -match 'cmder.psstatus=false') {
|
if (($line -match 'cmder.status=false') -or ($line -match 'cmder.psstatus=false')) {
|
||||||
return $false
|
return $false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2155
vendor/psmodules/PsGet/PsGet.psm1
vendored
2155
vendor/psmodules/PsGet/PsGet.psm1
vendored
File diff suppressed because it is too large
Load Diff
16
vendor/sources.json
vendored
16
vendor/sources.json
vendored
@ -1,22 +1,22 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "git-for-windows",
|
"name": "git-for-windows",
|
||||||
"version": "2.38.0.windows.1",
|
"version": "2.47.0.windows.1",
|
||||||
"url": "https://github.com/git-for-windows/git/releases/download/v2.38.0.windows.1/PortableGit-2.38.0-64-bit.7z.exe"
|
"url": "https://github.com/git-for-windows/git/releases/download/v2.47.0.windows.1/PortableGit-2.47.0-64-bit.7z.exe"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "clink",
|
"name": "clink",
|
||||||
"version": "1.3.47",
|
"version": "1.7.3",
|
||||||
"url": "https://github.com/chrisant996/clink/releases/download/v1.3.47/clink.1.3.47.d5796b.zip"
|
"url": "https://github.com/chrisant996/clink/releases/download/v1.7.3/clink.1.7.3.f8fb96.zip"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "conemu-maximus5",
|
"name": "conemu-maximus5",
|
||||||
"version": "22.08.07",
|
"version": "23.07.24",
|
||||||
"url": "https://github.com/Maximus5/ConEmu/releases/download/v22.08.07/ConEmuPack.220807.7z"
|
"url": "https://github.com/Maximus5/ConEmu/releases/download/v23.07.24/ConEmuPack.230724.7z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "clink-completions",
|
"name": "clink-completions",
|
||||||
"version": "0.4.1",
|
"version": "0.6.0",
|
||||||
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/0.4.1.zip"
|
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.0.zip"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
1
vendor/user_aliases.cmd.default
vendored
1
vendor/user_aliases.cmd.default
vendored
@ -6,6 +6,7 @@
|
|||||||
;= Add aliases below here
|
;= Add aliases below here
|
||||||
e.=explorer .
|
e.=explorer .
|
||||||
gl=git log --oneline --all --graph --decorate $*
|
gl=git log --oneline --all --graph --decorate $*
|
||||||
|
l=ls --show-control-chars -CFGNhp --color --ignore={"NTUSER.DAT*","ntuser.dat*"} $*
|
||||||
ls=ls --show-control-chars -F --color $*
|
ls=ls --show-control-chars -F --color $*
|
||||||
pwd=cd
|
pwd=cd
|
||||||
clear=cls
|
clear=cls
|
||||||
|
Loading…
x
Reference in New Issue
Block a user