Compare commits

..

No commits in common. "master" and "v1.3.21" have entirely different histories.

26 changed files with 2402 additions and 481 deletions

View File

@ -1,11 +0,0 @@
# 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"

View File

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

View File

@ -8,10 +8,8 @@ name: Build Cmder
on: on:
push: push:
branches: [ "master" ] branches: [ "master" ]
tags:
- "v*"
pull_request: pull_request:
branches: [ "master", "development" ] branches: [ "master" ]
#---------------------------------# #---------------------------------#
# environment configuration # # environment configuration #
@ -30,17 +28,15 @@ 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@v4 uses: actions/checkout@v3
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Add MSBuild to PATH - name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2 uses: microsoft/setup-msbuild@v1
- name: Build Cmder Launcher - name: Build Cmder Launcher
shell: pwsh shell: pwsh
@ -53,38 +49,26 @@ jobs:
run: .\pack.ps1 -verbose run: .\pack.ps1 -verbose
- name: Upload artifact (cmder.zip) - name: Upload artifact (cmder.zip)
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v3
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@v4 uses: actions/upload-artifact@v3
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@v4 uses: actions/upload-artifact@v3
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@v4 uses: actions/upload-artifact@v3
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/')

View File

@ -1,73 +0,0 @@
# 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}}"

View File

@ -4,21 +4,9 @@ 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:
@ -38,7 +26,7 @@ jobs:
continue-on-error: false continue-on-error: false
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v3
- name: Initialize vendors - name: Initialize vendors
shell: pwsh shell: pwsh
working-directory: scripts working-directory: scripts

View File

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

View File

@ -1,24 +0,0 @@
# 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 Normal file
View File

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

View File

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

View File

@ -1,8 +1,9 @@
/** /**
* WARNING: This file should NOT be manually modified! * WARNING: do NOT modify this file! the content of this file should be
* The contents will be automatically generated using the `.ps1` PowerShell scripts, * automatically genereted before AppVeyor builds using the
* during builds by the CI. * respective .ps1 Powershell scripts.
*
*/ */
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View File

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

View File

@ -104,7 +104,7 @@ function Fetch-DownloadUrl {
$headers = @{} $headers = @{}
if ($env:GITHUB_TOKEN) { if ($($env:GITHUB_TOKEN)) {
$headers["Authorization"] = "token $($env:GITHUB_TOKEN)" $headers["Authorization"] = "token $($env:GITHUB_TOKEN)"
} }

View File

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

14
vendor/bin/excd.cmd vendored
View File

@ -1,8 +1,6 @@
@echo off @if "%~1"=="/?" (@cd %*)
set excd=%* @set excd=%*
set excd=%excd:"=% @set excd=%excd:"=%
set excd_param=/d @if "%excd:~0,1%"=="~" (@set excd=%userprofile%\%excd:~1%)
if /i "%excd:~0,2%"=="/d" set "excd=%excd:~2%" @if not "%~1"=="/d" (@set excd_param="/d") else (@set excd_param=)
if "%excd:~0,1%"=="~" (set excd=%userprofile%\%excd:~1%) @cd %excd_param% "%excd%"
if "%excd:~0,1%"=="/" (set excd_param=)
cd %excd_param% %excd%

153
vendor/clink.lua vendored
View File

@ -3,12 +3,7 @@
-- !!! 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 CMDER_SESSION -- luacheck: globals clink
-- 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
@ -51,37 +46,11 @@ local function get_unknown_color()
end end
--- ---
-- Escapes special characters in a string.gsub `find` parameter, so that it -- Makes a string safe to use as the replacement in string.gsub
-- 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 escape_gsub_find_arg(text) local function verbatim(s)
return text and text:gsub("([-+*?.%%()%[%]$^])", "%%%1") or "" s = string.gsub(s, "%%", "%%%%")
end return s
---
-- 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
@ -179,15 +148,15 @@ local function set_prompt_filter()
end end
if prompt_useHomeSymbol and string.find(cwd, clink.get_env("HOME")) then if prompt_useHomeSymbol and string.find(cwd, clink.get_env("HOME")) then
cwd = gsub_plain(cwd, clink.get_env("HOME"), prompt_homeSymbol) cwd = string.gsub(cwd, clink.get_env("HOME"), prompt_homeSymbol)
end end
local uah = '' 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
local cr = "\n" cr = "\n"
if prompt_singleLine then if prompt_singleLine then
cr = ' ' cr = ' '
end end
@ -201,15 +170,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 ""
local prompt = "{uah}{cwd}" .. version_control .. cr .. get_lamb_color() .. "{env}{lamb}\x1b[0m " prompt = "{uah}{cwd}" .. version_control .. cr .. get_lamb_color() .. "{env}{lamb}\x1b[0m "
prompt = gsub_plain(prompt, "{uah}", uah) prompt = string.gsub(prompt, "{uah}", uah)
prompt = gsub_plain(prompt, "{cwd}", cwd) prompt = string.gsub(prompt, "{cwd}", cwd)
prompt = gsub_plain(prompt, "{env}", env) prompt = string.gsub(prompt, "{env}", env)
clink.prompt.value = gsub_plain(prompt, "{lamb}", prompt_lambSymbol) clink.prompt.value = string.gsub(prompt, "{lamb}", prompt_lambSymbol)
end end
local function percent_prompt_filter() local function percent_prompt_filter()
clink.prompt.value = gsub_plain(clink.prompt.value, "{percent}", "%") clink.prompt.value = string.gsub(clink.prompt.value, "{percent}", "%%")
end end
--- ---
@ -222,7 +191,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) -- luacheck: ignore 432 local function pathname(path)
local prefix = "" local prefix = ""
local i = path:find("[\\/:][^\\/:]*$") local i = path:find("[\\/:][^\\/:]*$")
if i then if i then
@ -232,14 +201,14 @@ local function get_dir_contains(path, dirname)
end end
-- Navigates up one level -- Navigates up one level
local function up_one_level(path) -- luacheck: ignore 432 local function up_one_level(path)
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) -- luacheck: ignore 432 local function has_specified_dir(path, specified_dir)
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
@ -267,7 +236,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) -- luacheck: ignore 432 local function pathname(path)
local prefix = "" local prefix = ""
local i = path:find("[\\/:][^\\/:]*$") local i = path:find("[\\/:][^\\/:]*$")
if i then if i then
@ -286,8 +255,7 @@ 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 line = gitfile:read() or '' local git_dir = gitfile:read():match('gitdir: (.*)')
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
@ -335,9 +303,6 @@ 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/(.+)')
@ -357,9 +322,6 @@ 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("(.+)$")
@ -377,12 +339,8 @@ end
-- Find out current branch -- Find out current branch
-- @return {false|svn branch name} -- @return {false|svn branch name}
--- ---
local function get_svn_branch() local function get_svn_branch(svn_dir)
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
@ -401,16 +359,12 @@ 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 -- luacheck: no max line length if code == "DD" or code == "AU" or code == "UD" or code == "UA" or code == "DU" or code == "AA" or code == "UU" then
is_status = false is_status = false
conflict_found = true conflict_found = true
break break
@ -420,27 +374,38 @@ 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")
if not file then for line in file:lines() do
return { error = true }
end
for line in file:lines() do -- luacheck: ignore 512, no unused
file:close() file:close()
return { clean = false } return false
end end
file:close() file:close()
return { clean = true } return true
end end
--- ---
@ -468,7 +433,6 @@ local function get_git_status_setting()
end end
local gitStatusConfig = io_popenyield("git --no-pager config cmder.status 2>nul") local gitStatusConfig = io_popenyield("git --no-pager config cmder.status 2>nul")
if gitStatusConfig then
for line in gitStatusConfig:lines() do for line in gitStatusConfig:lines() do
if string.match(line, 'false') then if string.match(line, 'false') then
gitStatusConfig:close() gitStatusConfig:close()
@ -477,10 +441,8 @@ local function get_git_status_setting()
end end
end end
gitStatusConfig:close() gitStatusConfig:close()
end
local gitCmdStatusConfig = io_popenyield("git --no-pager config cmder.cmdstatus 2>nul") local gitCmdStatusConfig = io_popenyield("git --no-pager config cmder.cmdstatus 2>nul")
if gitCmdStatusConfig then
for line in gitCmdStatusConfig:lines() do for line in gitCmdStatusConfig:lines() do
if string.match(line, 'false') then if string.match(line, 'false') then
gitCmdStatusConfig:close() gitCmdStatusConfig:close()
@ -489,7 +451,6 @@ local function get_git_status_setting()
end end
end end
gitCmdStatusConfig:close() gitCmdStatusConfig:close()
end
last_git_status_setting = true last_git_status_setting = true
return true return true
@ -558,13 +519,13 @@ local function git_prompt_filter()
color = colors.conflict color = colors.conflict
end end
clink.prompt.value = gsub_plain(clink.prompt.value, "{git}", " "..color.."("..branch..")") 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 = gsub_plain(clink.prompt.value, "{git}", "") clink.prompt.value = string.gsub(clink.prompt.value, "{git}", "")
return false return false
end end
@ -575,6 +536,8 @@ 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
@ -596,21 +559,17 @@ 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")
if pipe then local output = pipe:read('*all')
output = pipe:read('*all') local rc = { pipe:close() }
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
end end
local result = color .. "(" .. branch .. ")" clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", " "..verbatim(result))
clink.prompt.value = gsub_plain(clink.prompt.value, "{hg}", " "..result)
return false return false
end end
end
-- No hg present or not in hg repo
clink.prompt.value = gsub_plain(clink.prompt.value, "{hg}", "")
end
local function svn_prompt_filter() local function svn_prompt_filter()
@ -630,6 +589,7 @@ 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
@ -639,7 +599,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 -- luacheck: no max line length if clink.promptcoroutine and io.popenyield and settings.get("prompt.async") and prompt_overrideSvnStatusOptIn then
svnStatus = clink_promptcoroutine(function () svnStatus = clink_promptcoroutine(function ()
return get_svn_status() return get_svn_status()
end) end)
@ -653,22 +613,21 @@ local function svn_prompt_filter()
svnStatus = get_svn_status() svnStatus = get_svn_status()
end end
local color if svnStatus == nil then
if not svnStatus or svnStatus.error then
color = colors.nostatus color = colors.nostatus
elseif svnStatus.clean then elseif svnStatus then
color = colors.clean color = colors.clean
else else
color = colors.dirty color = colors.dirty
end end
clink.prompt.value = gsub_plain(clink.prompt.value, "{svn}", " "..color.."("..branch..")") clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", " "..color.."("..verbatim(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 = gsub_plain(clink.prompt.value, "{svn}", "") clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", "")
return false return false
end end

View File

@ -1,10 +1,6 @@
# 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
@ -12,15 +8,15 @@ 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 = True history.ignore_space = False
# name: The number of history lines to save # name: The number of history lines to save
# type: integer # type: integer
history.max_lines = 25000 history.max_lines = 10000
# name: Share history between instances # name: Share history between instances
# type: boolean # type: boolean
history.shared = False history.shared = True
# name: Auto-answer terminate prompt # name: Auto-answer terminate prompt
# type: enum # type: enum

52
vendor/init.bat vendored
View File

@ -148,13 +148,12 @@ if defined CMDER_USER_CONFIG (
) )
if not "%CMDER_SHELL%" == "cmd" ( if not "%CMDER_SHELL%" == "cmd" (
%print_warning% "Incompatible 'ComSpec/Shell' Detected: %CMDER_SHELL%" %print_warning% "Incompatible 'ComSpec/Shell' Detetected: %CMDER_SHELL%"
set CMDER_CLINK=0 set CMDER_CLINK=0
set CMDER_ALIASES=0 set CMDER_ALIASES=0
) )
:: Pick the right version of Clink :: Pick 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
@ -162,24 +161,16 @@ if "%PROCESSOR_ARCHITECTURE%"=="x86" (
set clink_architecture=x64 set clink_architecture=x64
set architecture_bits=64 set architecture_bits=64
) else ( ) else (
%print_warning% "Incompatible Processor Detected: %PROCESSOR_ARCHITECTURE%" %print_warning% "Incompatible Processor Detetected: %PROCESSOR_ARCHITECTURE%"
set CMDER_CLINK=0 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!"
:: Check if Clink is not present :: Check if Clink is not present
if not exist "%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" ( if not exist "%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" (
%print_error% "Clink executable is not present in 'vendor\clink\clink_%clink_architecture%.exe'" %print_error% "Clink executable is not present in 'vendor\clink\clink_%clink_architecture%.exe'"
goto :SKIP_CLINK
) )
:: Run Clink :: Run Clink
@ -194,7 +185,7 @@ goto :SKIP_CLINK
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua" copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua"
) )
:: Cleanup legacy Clink Settings file :: Cleanup lagacy Clink Settings file
if exist "%CMDER_CONFIG_DIR%\settings" if exist "%CMDER_CONFIG_DIR%\clink_settings" ( if exist "%CMDER_CONFIG_DIR%\settings" if exist "%CMDER_CONFIG_DIR%\clink_settings" (
del "%CMDER_CONFIG_DIR%\settings" del "%CMDER_CONFIG_DIR%\settings"
) )
@ -206,15 +197,10 @@ goto :SKIP_CLINK
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_CONFIG_DIR%" --scripts "%CMDER_ROOT%\vendor" "%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_CONFIG_DIR%" --scripts "%CMDER_ROOT%\vendor"
:: Check if a fatal error occurred when trying to inject Clink if errorlevel 1 (
if errorlevel 2 ( %print_error% "Clink initilization has failed with error code: %errorlevel%"
REM %print_error% "Clink injection has failed with error code: %errorlevel%"
goto :SKIP_CLINK
) )
) else (
goto :CLINK_FINISH
:SKIP_CLINK
%print_warning% "Skipping Clink Injection!" %print_warning% "Skipping Clink Injection!"
for /f "tokens=2 delims=:." %%x in ('chcp') do set cp=%%x for /f "tokens=2 delims=:." %%x in ('chcp') do set cp=%%x
@ -224,8 +210,7 @@ goto :SKIP_CLINK
prompt $E[1;32;49m$P$S$_$E[1;30;49mλ$S$E[0m prompt $E[1;32;49m$P$S$_$E[1;30;49mλ$S$E[0m
chcp %cp%>nul 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!"
@ -240,8 +225,8 @@ if "%CMDER_CONFIGURED%" GTR "1" (
:: Prepare for git-for-windows :: Prepare for git-for-windows
:: Detect which git.exe version to use :: Detect which git.exe version to use
:: * if the user points to a specific git, use that :: * if the users points as to a specific git, use that
:: * test if git is in path and if yes, 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 (
@ -252,13 +237,6 @@ if defined GIT_INSTALL_ROOT (
%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..."
@ -331,8 +309,6 @@ if %nix_tools% geq 1 (
) )
) )
:SET_ENV
:: Plink (PuTTY Link) is a command-line connection tool similar to ssh, setting its protocol to ssh :: Plink (PuTTY Link) is a command-line connection tool similar to ssh, setting its protocol to ssh
set PLINK_PROTOCOL=ssh set PLINK_PROTOCOL=ssh
@ -340,12 +316,6 @@ set PLINK_PROTOCOL=ssh
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
@ -426,7 +396,7 @@ if "%CMDER_ALIASES%" == "1" (
) )
:: Add aliases to the environment :: Add aliases to the environment
type "%user_aliases%" | %WINDIR%\System32\findstr /b /l /i "history=cat " >nul type "%user_aliases%" | 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

View File

@ -10,8 +10,9 @@ if "%~1" == "/h" (
exit /b exit /b
:help
:::=============================================================================== :::===============================================================================
:::help - shows all sub routines in a .bat/.cmd file with documentation :::show_subs - shows all sub routines in a .bat/.cmd file with documentation
:::. :::.
:::include: :::include:
:::. :::.
@ -19,15 +20,16 @@ exit /b
:::. :::.
:::usage: :::usage:
:::. :::.
::: %lib_base% help "file" ::: %lib_base% show_subs "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" (
@ -42,13 +44,9 @@ exit /b
pause pause
exit /b exit /b
:cmder_shell
:::=============================================================================== :::===============================================================================
:::cmder_shell - Initializes the Cmder shell environment variables :::show_subs - shows all sub routines in a .bat/.cmd file with documentation
:::.
:::description:
:::.
::: This routine sets up the Cmder shell environment by detecting the
::: command shell and initializing related variables.
:::. :::.
:::include: :::include:
:::. :::.
@ -57,30 +55,15 @@ 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 (
@ -91,27 +74,6 @@ exit /b
) )
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" (

View File

@ -40,7 +40,7 @@ exit /b
:::. :::.
:::------------------------------------------------------------------------------- :::-------------------------------------------------------------------------------
if %debug_output% gtr 0 echo %time% DEBUG(%~1): %~2 & echo. if %debug_output% gtr 0 echo DEBUG(%~1): %~2 & echo.
exit /b exit /b
:verbose_output :verbose_output

View File

@ -12,6 +12,7 @@ if "%~1" == "/h" (
exit /b exit /b
:read_version
:::=============================================================================== :::===============================================================================
:::read_version - Get the git.exe version :::read_version - Get the git.exe version
:::. :::.
@ -33,7 +34,6 @@ 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,7 +55,6 @@ 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
) )
@ -64,6 +63,7 @@ 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,7 +88,6 @@ 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"
@ -111,8 +110,9 @@ 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,7 +128,6 @@ 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"
@ -143,8 +142,9 @@ exit /b
) )
exit /b exit /b
:compare_versions
:::=============================================================================== :::===============================================================================
:::compare_version - Compare semantic versions and return latest version :::compare_version - Compare semantic versions return latest version.
:::. :::.
:::include: :::include:
:::. :::.
@ -160,7 +160,6 @@ 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.
@ -185,12 +184,7 @@ exit /b
endlocal & exit /b 0 endlocal & exit /b 0
:::=============================================================================== :::===============================================================================
:::is_git_shim - Check if the directory has a git.shim file :::is_git_shim
:::.
:::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:
:::. :::.
@ -207,7 +201,7 @@ exit /b
:is_git_shim :is_git_shim
pushd "%~1" pushd "%~1"
:: check if there is a shim file - if yes, read the actual executable path :: check if there's shim - and if yes follow the 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 (
@ -224,7 +218,7 @@ exit /b
exit /b exit /b
:::=============================================================================== :::===============================================================================
:::compare_git_versions - Compare the user git version against the vendored version :::compare_git_versions
:::. :::.
:::include: :::include:
:::. :::.
@ -258,7 +252,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=
) )
) )
@ -267,7 +261,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:
:::. :::.
@ -284,3 +278,4 @@ 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

View File

@ -1,5 +1,6 @@
@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"
@ -10,13 +11,6 @@ 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
@ -38,12 +32,13 @@ 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 (
@ -57,8 +52,7 @@ exit /b
set "position=" set "position="
) )
dir "%add_path%" 2>NUL | findstr -i -e "%find_pathext%" >NUL dir "%add_path%" | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL
if "%ERRORLEVEL%" == "0" ( if "%ERRORLEVEL%" == "0" (
set "add_to_path=%add_path%" set "add_to_path=%add_path%"
) else ( ) else (
@ -141,6 +135,7 @@ exit /b
exit /b exit /b
:set_found :set_found
if "%ERRORLEVEL%" == "0" ( if "%ERRORLEVEL%" == "0" (
set found=1 set found=1
@ -191,7 +186,7 @@ exit /b
set "position=" set "position="
) )
dir "%add_path%" 2>NUL | findstr -i -e "%find_pathext%" >NUL dir "%add_path%" 2>NUL | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL
if "%ERRORLEVEL%" == "0" ( if "%ERRORLEVEL%" == "0" (
set "add_to_path=%add_path%" set "add_to_path=%add_path%"
@ -244,3 +239,4 @@ 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

View File

@ -12,26 +12,26 @@ if "%~1" == "/h" (
exit /b exit /b
:run_profile_d
:::=============================================================================== :::===============================================================================
:::run_profile_d - Run all scripts in the passed directory path :::run_profile_d - Run all scripts in the passed dir 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,3 +43,4 @@ exit /b
) )
popd popd
exit /b exit /b

18
vendor/profile.ps1 vendored
View File

@ -5,7 +5,7 @@
# !!! 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 $CMDER_INIT_START = $(Get-Date -UFormat %s)
# Compatibility with PS major versions <= 2 # Compatibility with PS major versions <= 2
if (!$PSScriptRoot) { if (!$PSScriptRoot) {
@ -28,6 +28,7 @@ if (!$ENV:CMDER_ROOT) {
# Remove trailing '\' # Remove trailing '\'
$ENV:CMDER_ROOT = ($ENV:CMDER_ROOT).TrimEnd("\") $ENV:CMDER_ROOT = ($ENV:CMDER_ROOT).TrimEnd("\")
# Do not load bundled PsGet if a module installer is already available
# -> recent PowerShell versions include PowerShellGet out of the box # -> recent PowerShell versions include PowerShellGet out of the box
$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue) $moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue)
@ -122,11 +123,11 @@ if (-not (Test-Path -PathType container "$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-Verbose "Sourcing $x" Write-Verbose Write-Host Sourcing $x
Import-Module $x Import-Module $x
} }
foreach ($x in Get-ChildItem *.ps1) { foreach ($x in Get-ChildItem *.ps1) {
Write-Verbose "Sourcing $x" Write-Verbose Write-Host Sourcing $x
. $x . $x
} }
Pop-Location Pop-Location
@ -136,11 +137,11 @@ Pop-Location
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-Verbose "Sourcing $x" Write-Verbose Write-Host Sourcing $x
Import-Module $x Import-Module $x
} }
foreach ($x in Get-ChildItem *.ps1) { foreach ($x in Get-ChildItem *.ps1) {
Write-Verbose "Sourcing $x" Write-Verbose Write-Host Sourcing $x
. $x . $x
} }
Pop-Location Pop-Location
@ -223,8 +224,5 @@ 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 $CMDER_INIT_END = $(Get-Date -UFormat %s)
Write-Verbose "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"

View File

@ -18,8 +18,7 @@ function readVersion($gitPath) {
} }
function isGitShim($gitPath) { function isGitShim($gitPath) {
# check if there is a shim file - if yes, read the actual executable path # check if there's shim - and if yes follow the 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")

2155
vendor/psmodules/PsGet/PsGet.psm1 vendored Normal file

File diff suppressed because it is too large Load Diff

16
vendor/sources.json vendored
View File

@ -1,22 +1,22 @@
[ [
{ {
"name": "git-for-windows", "name": "git-for-windows",
"version": "2.47.0.windows.1", "version": "2.39.0.windows.1",
"url": "https://github.com/git-for-windows/git/releases/download/v2.47.0.windows.1/PortableGit-2.47.0-64-bit.7z.exe" "url": "https://github.com/git-for-windows/git/releases/download/v2.39.0.windows.1/PortableGit-2.39.0-64-bit.7z.exe"
}, },
{ {
"name": "clink", "name": "clink",
"version": "1.7.3", "version": "1.4.4",
"url": "https://github.com/chrisant996/clink/releases/download/v1.7.3/clink.1.7.3.f8fb96.zip" "url": "https://github.com/chrisant996/clink/releases/download/v1.4.4/clink.1.4.4.7fe1ca.zip"
}, },
{ {
"name": "conemu-maximus5", "name": "conemu-maximus5",
"version": "23.07.24", "version": "22.12.18",
"url": "https://github.com/Maximus5/ConEmu/releases/download/v23.07.24/ConEmuPack.230724.7z" "url": "https://github.com/Maximus5/ConEmu/releases/download/v22.12.18/ConEmuPack.221218.7z"
}, },
{ {
"name": "clink-completions", "name": "clink-completions",
"version": "0.6.0", "version": "0.4.2",
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.0.zip" "url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.4.2.zip"
} }
] ]