juc500 정상동작
This commit is contained in:
+51
@@ -0,0 +1,51 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from virtualenv.activation.via_template import ViaTemplateActivator
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Iterator
|
||||
from pathlib import Path
|
||||
|
||||
from virtualenv.create.creator import Creator
|
||||
|
||||
|
||||
class NushellActivator(ViaTemplateActivator):
|
||||
def templates(self) -> Iterator[str]:
|
||||
yield "activate.nu"
|
||||
|
||||
@staticmethod
|
||||
def quote(string: str) -> str:
|
||||
"""Nushell supports raw strings like: r###'this is a string'###.
|
||||
|
||||
https://github.com/nushell/nushell.github.io/blob/main/book/working_with_strings.md
|
||||
|
||||
This method finds the maximum continuous sharps in the string and then quote it with an extra sharp.
|
||||
|
||||
"""
|
||||
max_sharps = 0
|
||||
current_sharps = 0
|
||||
for char in string:
|
||||
if char == "#":
|
||||
current_sharps += 1
|
||||
max_sharps = max(current_sharps, max_sharps)
|
||||
else:
|
||||
current_sharps = 0
|
||||
wrapping = "#" * (max_sharps + 1)
|
||||
return f"r{wrapping}'{string}'{wrapping}"
|
||||
|
||||
def replacements(self, creator: Creator, dest_folder: Path) -> dict[str, str]: # noqa: ARG002
|
||||
return {
|
||||
"__VIRTUAL_PROMPT__": "" if self.flag_prompt is None else self.flag_prompt,
|
||||
"__VIRTUAL_ENV__": str(creator.dest),
|
||||
"__VIRTUAL_NAME__": creator.env_name,
|
||||
"__BIN_NAME__": str(creator.bin_dir.relative_to(creator.dest)),
|
||||
"__TCL_LIBRARY__": getattr(creator.interpreter, "tcl_lib", None) or "",
|
||||
"__TK_LIBRARY__": getattr(creator.interpreter, "tk_lib", None) or "",
|
||||
}
|
||||
|
||||
|
||||
__all__ = [
|
||||
"NushellActivator",
|
||||
]
|
||||
BIN
Binary file not shown.
+91
@@ -0,0 +1,91 @@
|
||||
# virtualenv activation module:
|
||||
# - Activate with `overlay use activate.nu`
|
||||
# - Deactivate with `deactivate`, as usual
|
||||
#
|
||||
# To customize the overlay name, call `overlay use activate.nu as foo`, but then `deactivate` won't work —
|
||||
# you'd need to run `overlay hide foo` manually. Do not activate with `use activate.nu *`; that does not
|
||||
# create an overlay and deactivation will fail.
|
||||
|
||||
module warning {
|
||||
export-env {
|
||||
const file = path self
|
||||
error make -u {
|
||||
msg: $"`($file | path basename)` is meant to be used with `overlay use`, not `source`"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
use warning
|
||||
|
||||
export-env {
|
||||
|
||||
let nu_ver = (version | get version | split row '.' | take 2 | each { into int })
|
||||
if $nu_ver.0 == 0 and $nu_ver.1 < 106 {
|
||||
error make {
|
||||
msg: 'virtualenv Nushell activation requires Nushell 0.106 or greater.'
|
||||
}
|
||||
}
|
||||
|
||||
def is-string [x] {
|
||||
($x | describe) == 'string'
|
||||
}
|
||||
|
||||
def has-env [...names] {
|
||||
$names | each {|n| $n in $env } | all {|i| $i }
|
||||
}
|
||||
|
||||
def is-env-true [name: string] {
|
||||
if (has-env $name) {
|
||||
let val = ($env | get --optional $name)
|
||||
if ($val | describe) == 'bool' {
|
||||
$val
|
||||
} else {
|
||||
not ($val | is-empty)
|
||||
}
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
let virtual_env = __VIRTUAL_ENV__
|
||||
let bin = __BIN_NAME__
|
||||
let path_name = if (has-env 'Path') { 'Path' } else { 'PATH' }
|
||||
let venv_path = ([$virtual_env $bin] | path join)
|
||||
let new_path = ($env | get $path_name | prepend $venv_path)
|
||||
let virtual_env_prompt = if (__VIRTUAL_PROMPT__ | is-empty) {
|
||||
($virtual_env | path basename)
|
||||
} else {
|
||||
__VIRTUAL_PROMPT__
|
||||
}
|
||||
let old_pkg_config_path = if (has-env 'PKG_CONFIG_PATH') { $env.PKG_CONFIG_PATH } else { '' }
|
||||
let new_pkg_config_path = $'($virtual_env)/lib/pkgconfig:($old_pkg_config_path)'
|
||||
let new_env = { $path_name: $new_path VIRTUAL_ENV: $virtual_env VIRTUAL_ENV_PROMPT: $virtual_env_prompt PKG_CONFIG_PATH: $new_pkg_config_path }
|
||||
if (has-env 'TCL_LIBRARY') {
|
||||
let $new_env = $new_env | insert TCL_LIBRARY __TCL_LIBRARY__
|
||||
}
|
||||
if (has-env 'TK_LIBRARY') {
|
||||
let $new_env = $new_env | insert TK_LIBRARY __TK_LIBRARY__
|
||||
}
|
||||
let old_prompt_command = if (has-env 'PROMPT_COMMAND') { $env.PROMPT_COMMAND } else { '' }
|
||||
let new_env = if (is-env-true 'VIRTUAL_ENV_DISABLE_PROMPT') {
|
||||
$new_env
|
||||
} else {
|
||||
let virtual_prefix = $'(char lparen)($virtual_env_prompt)(char rparen) '
|
||||
let new_prompt = if (has-env 'PROMPT_COMMAND') {
|
||||
if ('closure' in ($old_prompt_command | describe)) {
|
||||
{|| $'($virtual_prefix)(do $old_prompt_command)' }
|
||||
} else {
|
||||
{|| $'($virtual_prefix)($old_prompt_command)' }
|
||||
}
|
||||
} else {
|
||||
{|| $'($virtual_prefix)' }
|
||||
}
|
||||
$new_env | merge { PROMPT_COMMAND: $new_prompt VIRTUAL_PREFIX: $virtual_prefix }
|
||||
}
|
||||
load-env $new_env
|
||||
}
|
||||
|
||||
export alias pydoc = python -m pydoc
|
||||
# If deactivate errors "not an active overlay": activate with `overlay use activate.nu` not `use activate.nu *`; for custom names use `overlay hide NAME`
|
||||
export alias deactivate = overlay hide activate
|
||||
Reference in New Issue
Block a user