From 19be573fa003567dcd09cfa273184d3b7c2e72ce Mon Sep 17 00:00:00 2001 From: bitterfox Date: Sat, 24 Jan 2026 13:01:54 +0900 Subject: [PATCH 1/2] gh-144203: Customizable venv prompt prefix and suffix --- Lib/venv/scripts/common/Activate.ps1 | 6 ++++-- Lib/venv/scripts/common/activate | 2 +- Lib/venv/scripts/common/activate.fish | 12 +++++++++++- Lib/venv/scripts/nt/activate.bat | 5 +++++ Lib/venv/scripts/posix/activate.csh | 4 +++- 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/Lib/venv/scripts/common/Activate.ps1 b/Lib/venv/scripts/common/Activate.ps1 index d75b8fbcfc7778..a94771334b89b8 100644 --- a/Lib/venv/scripts/common/Activate.ps1 +++ b/Lib/venv/scripts/common/Activate.ps1 @@ -229,10 +229,12 @@ if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { # Make sure _OLD_VIRTUAL_PROMPT is global function global:_OLD_VIRTUAL_PROMPT { "" } Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT - New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt + $venvPrefix = if ($Env:VIRTUAL_ENV_PROMPT_PREFIX) { $Env:VIRTUAL_ENV_PROMPT_PREFIX } else { "(" } + $venvSuffix = if ($Env:VIRTUAL_ENV_PROMPT_SUFFIX) { $Env:VIRTUAL_ENV_PROMPT_SUFFIX } else { ") " } + New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value "$venvPrefix$Prompt$venvSuffix" function global:prompt { - Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " + Write-Host -NoNewline -ForegroundColor Green "$_PYTHON_VENV_PROMPT_PREFIX" _OLD_VIRTUAL_PROMPT } } diff --git a/Lib/venv/scripts/common/activate b/Lib/venv/scripts/common/activate index 70673a265d41f8..a4ff02249dd6a2 100644 --- a/Lib/venv/scripts/common/activate +++ b/Lib/venv/scripts/common/activate @@ -67,7 +67,7 @@ fi if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then _OLD_VIRTUAL_PS1="${PS1:-}" - PS1="("__VENV_PROMPT__") ${PS1:-}" + PS1="${VIRTUAL_ENV_PROMPT_PREFIX-(}"__VENV_PROMPT__"${VIRTUAL_ENV_PROMPT_SUFFIX-) }${PS1:-}" export PS1 fi diff --git a/Lib/venv/scripts/common/activate.fish b/Lib/venv/scripts/common/activate.fish index 284a7469c99b57..4688cfbe9515ed 100644 --- a/Lib/venv/scripts/common/activate.fish +++ b/Lib/venv/scripts/common/activate.fish @@ -56,8 +56,18 @@ if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" # Save the return status of the last command. set -l old_status $status + set -l virtual_env_prompt_prefix "(" + set -l virtual_env_prompt_suffix ")" + + if set -q VIRTUAL_ENV_PROMPT_PREFIX + set virtual_env_prompt_prefix $VIRTUAL_ENV_PROMPT_PREFIX + end + if set -q VIRTUAL_ENV_PROMPT_SUFFIX + set virtual_env_prompt_suffix $VIRTUAL_ENV_PROMPT_SUFFIX + end + # Output the venv prompt; color taken from the blue of the Python logo. - printf "%s(%s)%s " (set_color 4B8BBE) __VENV_PROMPT__ (set_color normal) + printf "%s%s%s%s%s " (set_color 4B8BBE) $virtual_env_prompt_prefix __VENV_PROMPT__ $virtual_env_prompt_suffix (set_color normal) # Restore the return status of the previous command. echo "exit $old_status" | . diff --git a/Lib/venv/scripts/nt/activate.bat b/Lib/venv/scripts/nt/activate.bat index 35533e4b551155..df87200b9952b3 100644 --- a/Lib/venv/scripts/nt/activate.bat +++ b/Lib/venv/scripts/nt/activate.bat @@ -16,6 +16,11 @@ if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT% if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME% set "_OLD_VIRTUAL_PROMPT=%PROMPT%" +set "_VIRTUAL_ENV_PROMPT_PREFIX=(" +set "_VIRTUAL_ENV_PROMPT_SUFFIX=) " +if defined VIRTUAL_ENV_PROMPT_PREFIX set "_VIRTUAL_ENV_PROMPT_PREFIX=%VIRTUAL_ENV_PROMPT_PREFIX%" +if defined VIRTUAL_ENV_PROMPT_SUFFIX set "_VIRTUAL_ENV_PROMPT_SUFFIX=%VIRTUAL_ENV_PROMPT_SUFFIX%" +set "PROMPT=%_VIRTUAL_ENV_PROMPT_PREFIX%__VENV_PROMPT__%_VIRTUAL_ENV_PROMPT_SUFFIX%%PROMPT%" set "PROMPT=(__VENV_PROMPT__) %PROMPT%" if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME% diff --git a/Lib/venv/scripts/posix/activate.csh b/Lib/venv/scripts/posix/activate.csh index 2a3fa835476ab9..5d67a2048f2f2a 100644 --- a/Lib/venv/scripts/posix/activate.csh +++ b/Lib/venv/scripts/posix/activate.csh @@ -19,7 +19,9 @@ setenv VIRTUAL_ENV_PROMPT __VENV_PROMPT__ set _OLD_VIRTUAL_PROMPT="$prompt" if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then - set prompt = "("__VENV_PROMPT__") $prompt:q" + if (! $?VIRTUAL_ENV_PROMPT_PREFIX) set VIRTUAL_ENV_PROMPT_PREFIX = "(" + if (! $?VIRTUAL_ENV_PROMPT_SUFFIX) set VIRTUAL_ENV_PROMPT_SUFFIX = ") " + set prompt = "${VIRTUAL_ENV_PROMPT_PREFIX}"__VENV_PROMPT__"${VIRTUAL_ENV_PROMPT_SUFFIX}$prompt:q" endif alias pydoc python -m pydoc From c6b833058fe7080823c4fc58c55bf4bfd3889378 Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Sat, 24 Jan 2026 04:14:59 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tools-Demos/2026-01-24-04-14-58.gh-issue-144203.PvBQZp.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Misc/NEWS.d/next/Tools-Demos/2026-01-24-04-14-58.gh-issue-144203.PvBQZp.rst diff --git a/Misc/NEWS.d/next/Tools-Demos/2026-01-24-04-14-58.gh-issue-144203.PvBQZp.rst b/Misc/NEWS.d/next/Tools-Demos/2026-01-24-04-14-58.gh-issue-144203.PvBQZp.rst new file mode 100644 index 00000000000000..1457e647984f8c --- /dev/null +++ b/Misc/NEWS.d/next/Tools-Demos/2026-01-24-04-14-58.gh-issue-144203.PvBQZp.rst @@ -0,0 +1,2 @@ +venv prompt in your shell can be customizable for prefix and suffix of venv name using VIRTUAL_ENV_PROMPT_PREFIX and VIRTUAL_ENV_PROMPT_SUFFIX from the default "(" and ") ". +If variable is not set, the default "(" and ") " still be used.