Skip to content

Commit

Permalink
feat: ✨ update and simplify nushell activation (#2572)
Browse files Browse the repository at this point in the history
  • Loading branch information
melMass authored May 17, 2023
1 parent 64bec9b commit cbb5411
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 36 deletions.
1 change: 1 addition & 0 deletions docs/changelog/2572.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
update and simplify nushell activation script, fixes an issue on Windows resulting in consecutive command not found - by :user:`melMass`.
48 changes: 12 additions & 36 deletions src/virtualenv/activation/nushell/activate.nu
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ export-env {
($x | describe) == 'string'
}

def has-env [name: string] {
$name in $env
def has-env [...names] {
$names | each {|n|
$n in $env
} | all {|i| $i == true}
}

# Emulates a `test -z`, but btter as it handles e.g 'false'
Expand All @@ -23,46 +25,26 @@ export-env {
if ($parsed | describe) == 'bool' {
$parsed
} else {
not ($env | get $name | is-empty)
not ($env | get -i $name | is-empty)
}
} else {
false
}
}

let is_windows = ($nu.os-info.name | str downcase) == 'windows'
let virtual_env = '__VIRTUAL_ENV__'
let bin = '__BIN_NAME__'
let path_sep = (char esep)
let path_name = (if $is_windows {
if (has-env 'Path') {

let is_windows = ($nu.os-info.family) == 'windows'
let path_name = (if (has-env 'Path') {
'Path'
} else {
'PATH'
}
} else {
'PATH'
})

let old_path = (
if $is_windows {
if (has-env 'Path') {
$env.Path
} else {
$env.PATH
}
} else {
$env.PATH
} | if (is-string $in) {
# if Path/PATH is a string, make it a list
$in | split row $path_sep | path expand
} else {
$in
}
)

let venv_path = ([$virtual_env $bin] | path join)
let new_path = ($old_path | prepend $venv_path | str join $path_sep)
let new_path = ($env | get $path_name | prepend $venv_path)

let new_env = {
$path_name : $new_path
Expand All @@ -73,22 +55,18 @@ export-env {
$new_env
} else {
# Creating the new prompt for the session
let virtual_prompt = (if ('__VIRTUAL_PROMPT__' == '') {
let virtual_prompt = (if ('__VIRTUAL_PROMPT__' | is-empty) {
$'(char lparen)($virtual_env | path basename)(char rparen) '
} 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') {
let old_prompt_command = (if (has-env 'PROMPT_COMMAND') {
$env.PROMPT_COMMAND
} else {
''
}
})
})

# If there is no default prompt, then only the env is printed in the prompt
let new_prompt = (if (has-env 'PROMPT_COMMAND') {
Expand All @@ -102,8 +80,6 @@ export-env {
})

$new_env | merge {
_OLD_VIRTUAL_PATH : ($old_path | str join $path_sep)
_OLD_PROMPT_COMMAND : $old_prompt_command
PROMPT_COMMAND : $new_prompt
VIRTUAL_PROMPT : $virtual_prompt
}
Expand Down

0 comments on commit cbb5411

Please sign in to comment.