48 lines
1 KiB
Text
48 lines
1 KiB
Text
# example:
|
||
# ```nu
|
||
# > got
|
||
# Error: nu::shell::external_command
|
||
#
|
||
# × External command failed
|
||
# ╭─[entry #1:1:1]
|
||
# 1 │ got
|
||
# · ─┬─
|
||
# · ╰── did you mean 'get'?
|
||
# ╰────
|
||
# help: No such file or directory (os error 2)
|
||
#
|
||
# did you mean?
|
||
# dot
|
||
# git
|
||
# go
|
||
# ```
|
||
{|cmd|
|
||
let commands_in_path = (
|
||
$env.PATH | each {|directory|
|
||
if ($directory | path exists) {
|
||
ls $directory | get name | path parse | update parent "" | path join
|
||
}
|
||
}
|
||
| flatten
|
||
| wrap cmd
|
||
)
|
||
|
||
let closest_commands = (
|
||
$commands_in_path
|
||
| insert distance {|it|
|
||
$it.cmd | str distance $cmd
|
||
}
|
||
| uniq
|
||
| sort-by distance
|
||
| get cmd
|
||
| first 3
|
||
)
|
||
|
||
let pretty_commands = (
|
||
$closest_commands | each {|cmd|
|
||
$" (ansi {fg: "default" attr: "di"})($cmd)(ansi reset)"
|
||
}
|
||
)
|
||
|
||
$"\ndid you mean?\n($pretty_commands | str join "\n")"
|
||
}
|