diff options
author | m-lima <m-lima@users.noreply.github.com> | 2022-12-05 20:59:27 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-05 11:59:27 -0800 |
commit | d3215e4b3c1db93c7591ed68d20dc3c62fe0b03b (patch) | |
tree | 6a81af6c7913dfa2278d961116d6727b99c5be97 | |
parent | 28f40672503974bdbf2c83d5174b738dcf45a5e5 (diff) | |
download | virtualenv-d3215e4b3c1db93c7591ed68d20dc3c62fe0b03b.tar.gz |
Respect `VIRTUAL_ENV_DISABLE_PROMPT` in nushell activation script (#2458)
Fixes https://github.com/pypa/virtualenv/issues/2461
-rw-r--r-- | docs/changelog/2461.bugfix.rst | 1 | ||||
-rw-r--r-- | src/virtualenv/activation/nushell/activate.nu | 80 |
2 files changed, 53 insertions, 28 deletions
diff --git a/docs/changelog/2461.bugfix.rst b/docs/changelog/2461.bugfix.rst new file mode 100644 index 0000000..66ea551 --- /dev/null +++ b/docs/changelog/2461.bugfix.rst @@ -0,0 +1 @@ +Make ``activate.nu`` respect ``VIRTUAL_ENV_DISABLE_PROMPT`` and not set the prompt if reqeusted - by :user:`m-lima`. diff --git a/src/virtualenv/activation/nushell/activate.nu b/src/virtualenv/activation/nushell/activate.nu index c5568c9..7235684 100644 --- a/src/virtualenv/activation/nushell/activate.nu +++ b/src/virtualenv/activation/nushell/activate.nu @@ -15,6 +15,21 @@ export-env { $name in (env).name } + # Emulates a `test -z`, but btter as it handles e.g 'false' + def is-env-true [name: string] { + if (has-env $name) { + # Try to parse 'true', '0', '1', and fail if not convertible + let parsed = do -i { $env | get $name | into bool } + if ($parsed | describe) == 'bool' { + $parsed + } else { + not ($env | get $name | is-empty) + } + } else { + false + } + } + let is_windows = ($nu.os-info.name | str downcase) == 'windows' let virtual_env = '__VIRTUAL_ENV__' let bin = '__BIN_NAME__' @@ -49,44 +64,53 @@ export-env { let venv_path = ([$virtual_env $bin] | path join) let new_path = ($old_path | prepend $venv_path | str collect $path_sep) - # Creating the new prompt for the session - let virtual_prompt = if ('__VIRTUAL_PROMPT__' == '') { - $'(char lparen)($virtual_env | path basename)(char rparen) ' - } else { - '(__VIRTUAL_PROMPT__) ' + let new_env = { + $path_name : $new_path + VIRTUAL_ENV : $virtual_env } - # Back up the old prompt builder - let old_prompt_command = if (has-env 'VIRTUAL_ENV') and (has-env '_OLD_PROMPT_COMMAND') { - $env._OLD_PROMPT_COMMAND + let new_env = if (is-env-true 'VIRTUAL_ENV_DISABLE_PROMPT') { + $new_env } else { - if (has-env 'PROMPT_COMMAND') { - $env.PROMPT_COMMAND - } else { - '' - } - } + # Creating the new prompt for the session + let virtual_prompt = if ('__VIRTUAL_PROMPT__' == '') { + $'(char lparen)($virtual_env | path basename)(char rparen) ' + } else { + '(__VIRTUAL_PROMPT__) ' + } - # If there is no default prompt, then only the env is printed in the prompt - let new_prompt = if (has-env 'PROMPT_COMMAND') { - if ($old_prompt_command | describe) == 'block' { - { $'($virtual_prompt)(do $old_prompt_command)' } - } else { - { $'($virtual_prompt)($old_prompt_command)' } - } - } else { - { $'($virtual_prompt)' } - } + # Back up the old prompt builder + let old_prompt_command = if (has-env 'VIRTUAL_ENV') and (has-env '_OLD_PROMPT_COMMAND') { + $env._OLD_PROMPT_COMMAND + } else { + if (has-env 'PROMPT_COMMAND') { + $env.PROMPT_COMMAND + } else { + '' + } + } - # Environment variables that will be loaded as the virtual env - load-env { - $path_name : $new_path - VIRTUAL_ENV : $virtual_env + # If there is no default prompt, then only the env is printed in the prompt + let new_prompt = if (has-env 'PROMPT_COMMAND') { + if ($old_prompt_command | describe) == 'block' { + { $'($virtual_prompt)(do $old_prompt_command)' } + } else { + { $'($virtual_prompt)($old_prompt_command)' } + } + } else { + { $'($virtual_prompt)' } + } + + $new_env | merge { _OLD_VIRTUAL_PATH : ($old_path | str collect $path_sep) _OLD_PROMPT_COMMAND : $old_prompt_command PROMPT_COMMAND : $new_prompt VIRTUAL_PROMPT : $virtual_prompt + } } + + # Environment variables that will be loaded as the virtual env + load-env $new_env } export alias pydoc = python -m pydoc |