diff options
| author | Fernando Herrera <fernando.j.herrera@gmail.com> | 2021-09-16 13:10:42 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-16 13:10:42 +0100 |
| commit | e0410cafc8feedf72562174dee983fc709a5a36e (patch) | |
| tree | d3043a56eeec1982b0157b9f7a9fe84085814ee5 /src/virtualenv | |
| parent | 1cc503bfadc2c0e8c3ecac6c0a3f430ee601d9a0 (diff) | |
| download | virtualenv-e0410cafc8feedf72562174dee983fc709a5a36e.tar.gz | |
Nushell activation scripts (#2170)
Diffstat (limited to 'src/virtualenv')
| -rw-r--r-- | src/virtualenv/activation/__init__.py | 2 | ||||
| -rw-r--r-- | src/virtualenv/activation/nushell/__init__.py | 28 | ||||
| -rw-r--r-- | src/virtualenv/activation/nushell/activate.nu | 40 | ||||
| -rw-r--r-- | src/virtualenv/activation/nushell/deactivate.nu | 11 |
4 files changed, 81 insertions, 0 deletions
diff --git a/src/virtualenv/activation/__init__.py b/src/virtualenv/activation/__init__.py index 962cdf7..e9296d8 100644 --- a/src/virtualenv/activation/__init__.py +++ b/src/virtualenv/activation/__init__.py @@ -4,6 +4,7 @@ from .bash import BashActivator from .batch import BatchActivator from .cshell import CShellActivator from .fish import FishActivator +from .nushell import NushellActivator from .powershell import PowerShellActivator from .python import PythonActivator @@ -14,4 +15,5 @@ __all__ = [ "PythonActivator", "BatchActivator", "FishActivator", + "NushellActivator", ] diff --git a/src/virtualenv/activation/nushell/__init__.py b/src/virtualenv/activation/nushell/__init__.py new file mode 100644 index 0000000..994c1fb --- /dev/null +++ b/src/virtualenv/activation/nushell/__init__.py @@ -0,0 +1,28 @@ +from __future__ import absolute_import, unicode_literals + +import os + +from virtualenv.util.path import Path +from virtualenv.util.six import ensure_text + +from ..via_template import ViaTemplateActivator + + +class NushellActivator(ViaTemplateActivator): + def templates(self): + yield Path("activate.nu") + yield Path("deactivate.nu") + + def replacements(self, creator, dest_folder): + # Due to nushell scoping, it isn't easy to create a function that will + # deactivate the environment. For that reason a __DEACTIVATE_PATH__ + # replacement pointing to the deactivate.nu file is created + + return { + "__VIRTUAL_PROMPT__": "" if self.flag_prompt is None else self.flag_prompt, + "__VIRTUAL_ENV__": ensure_text(str(creator.dest)), + "__VIRTUAL_NAME__": creator.env_name, + "__BIN_NAME__": ensure_text(str(creator.bin_dir.relative_to(creator.dest))), + "__PATH_SEP__": ensure_text(os.pathsep), + "__DEACTIVATE_PATH__": ensure_text(str(Path(dest_folder) / "deactivate.nu")), + } diff --git a/src/virtualenv/activation/nushell/activate.nu b/src/virtualenv/activation/nushell/activate.nu new file mode 100644 index 0000000..f0a4da4 --- /dev/null +++ b/src/virtualenv/activation/nushell/activate.nu @@ -0,0 +1,40 @@ +# Setting all environment variables for the venv +let virtual-env = "__VIRTUAL_ENV__" +let bin = "__BIN_NAME__" +let path-sep = "__PATH_SEP__" + +let old-path = ($nu.path | str collect ($path-sep)) + +let venv-path = ([$virtual-env $bin] | path join) +let new-path = ($nu.path | prepend $venv-path | str collect ($path-sep)) + +# environment variables that will be batched loaded to the virtual env +let new-env = ([ + [name, value]; + [PATH $new-path] + [_OLD_VIRTUAL_PATH $old-path] + [VIRTUAL_ENV $virtual-env] +]) + +load-env $new-env + +# Creating the new prompt for the session +let virtual_prompt = (if ("__VIRTUAL_PROMPT__" != "") { + "__VIRTUAL_PROMPT__" +} { + $virtual-env | path basename +} +) + +# If there is no default prompt, then only the env is printed in the prompt +let new_prompt = (if ( config | select prompt | empty? ) { + ($"build-string '(char lparen)' '($virtual_prompt)' '(char rparen) ' ") +} { + ($"build-string '(char lparen)' '($virtual_prompt)' '(char rparen) ' (config get prompt | str find-replace "build-string" "")") +}) +let-env PROMPT_COMMAND = $new_prompt + +# We are using alias as the function definitions because only aliases can be +# removed from the scope +alias pydoc = python -m pydoc +alias deactivate = source "__DEACTIVATE_PATH__" diff --git a/src/virtualenv/activation/nushell/deactivate.nu b/src/virtualenv/activation/nushell/deactivate.nu new file mode 100644 index 0000000..4052438 --- /dev/null +++ b/src/virtualenv/activation/nushell/deactivate.nu @@ -0,0 +1,11 @@ +# Setting the old path +let path-name = (if ((sys).host.name == "Windows") { "Path" } { "PATH" }) +let-env $path-name = $nu.env._OLD_VIRTUAL_PATH + +# Unleting the environment variables that were created when activating the env +unlet-env VIRTUAL_ENV +unlet-env _OLD_VIRTUAL_PATH +unlet-env PROMPT_COMMAND + +unalias pydoc +unalias deactivate |
