liminalOS/hm/modules/common/shellenv/config.nu

48 lines
1.2 KiB
Text
Raw Normal View History

let fish_completer = {|spans|
fish --command $'complete "--do-complete=($spans | str join " ")"'
| from tsv --flexible --noheaders --no-infer
| rename value description
| update value {
if ($in | path exists) {$'"($in | str replace "\"" "\\\"" )"'} else {$in}
}
}
# This completer will use fish by default
let external_completer = {|spans|
let expanded_alias = scope aliases
| where name == $spans.0
| get -i 0.expansion
let spans = if $expanded_alias != null {
$spans
| skip 1
| prepend ($expanded_alias | split row ' ' | take 1)
} else {
$spans
}
match $spans.0 {
# use zoxide completions for zoxide commands
_ => $fish_completer
} | do $in $spans
}
$env.config.completions.external.completer = $external_completer
def "nu-complete zoxide path" [context: string] {
let parts = $context | split row " " | skip 1
{
options: {
sort: false
completion_algorithm: prefix
positional: false
case_sensitive: false
}
completions: (zoxide query --list --exclude $env.PWD -- ...$parts | lines)
}
}
def --env --wrapped z [...rest: string@"nu-complete zoxide path"] {
__zoxide_z ...$rest
}