make std help more user friendly

This commit is contained in:
WindSoilder 2024-11-15 20:32:53 +08:00
parent 636bae2466
commit 4ac75d1662

View File

@ -684,8 +684,7 @@ def build-command-page [command: record] {
] | flatten | str join "\n"
}
# Show help on commands.
export def commands [
def scope-commands [
...command: string@"nu-complete list-commands" # the name of command to get help on
--find (-f): string # string to find in command names and description
] {
@ -699,20 +698,35 @@ export def commands [
let found_command = ($commands | where name == $target_command)
if ($found_command | is-empty) {
try {
print $"(ansi default_italic)Help pages from external command ($target_command | pretty-cmd):(ansi reset)"
^($env.NU_HELPER? | default "man") $target_command
} catch {
command-not-found-error (metadata $command | get span)
}
command-not-found-error (metadata $command | get span)
} else {
build-command-page ($found_command | get 0)
}
build-command-page ($found_command | get 0)
} else {
$commands | select name category description signatures search_terms
}
}
def external-commands [
...command: string@"nu-complete list-commands",
] {
let target_command = $command | str join " "
print $"(ansi default_italic)Help pages from external command ($target_command | pretty-cmd):(ansi reset)"
^($env.NU_HELPER? | default "man") $target_command
}
# Show help on commands.
export def commands [
...command: string@"nu-complete list-commands" # the name of command to get help on
--find (-f): string # string to find in command names and description
] {
try {
scope-commands ...$command --find=$find
} catch {
external-commands ...$command
}
}
def pretty-cmd [] {
let cmd = $in
$"(ansi default_dimmed)(ansi default_italic)($cmd)(ansi reset)"
@ -763,7 +777,7 @@ You can also learn more at (ansi default_italic)(ansi light_cyan_underline)https
let target_item = ($item | str join " ")
let commands = (try { commands $target_item --find $find })
let commands = (try { scope-commands $target_item --find $find })
if not ($commands | is-empty) { return $commands }
let aliases = (try { aliases $target_item --find $find })
@ -776,13 +790,7 @@ You can also learn more at (ansi default_italic)(ansi light_cyan_underline)https
print -e $"No help results found mentioning: ($find)"
return []
}
let span = (metadata $item | get span)
error make {
msg: ("std::help::item_not_found" | error-fmt)
label: {
text: "item not found"
span: $span
}
}
# use external tool (e.g: `man`) to search help for $target_item
# the stdout and stderr of external tool will follow `main` call.
external-commands $target_item
}