Call "fish_command_not_found" if a command wasn't found
Previously, when a command wasn't found, fish would emit the
"fish_command_not_found" *event*.
This was annoying as it was hard to override (the code ended up
checking for a function called `__fish_command_not_found_handler`
anyway!), the setup was ugly,
and it's useless - there is no use case for multiple command-not-found handlers.
Instead, let's just call a function `fish_command_not_found` if it
exists, or print the default message otherwise.
The event is completely removed, but because a missing event is not an error
(MEISNAE in C++-speak) this isn't an issue.
Note that, for backwards-compatibility, we still keep the default
handler function around even tho the new one is hard-coded in C++.
Also, if we detect a previous handler, the new handler just calls it.
This way, the backwards-compatible way to install a custom handler is:
```fish
function __fish_command_not_found_handler --on-event fish_command_not_found
# do a little dance, make a little love, get down tonight
end
```
and the new hotness is
```fish
function fish_command_not_found
# do the thing
end
```
Fixes #7293.
2020-08-30 03:54:13 +08:00
|
|
|
# RUN: %fish -C 'set -g fish %fish' %s
|
|
|
|
set -g PATH
|
|
|
|
$fish -c "nonexistent-command-1234 banana rama"
|
|
|
|
#CHECKERR: fish: Unknown command: nonexistent-command-1234
|
|
|
|
#CHECKERR: fish:
|
|
|
|
#CHECKERR: nonexistent-command-1234 banana rama
|
|
|
|
#CHECKERR: ^
|
|
|
|
$fish -C 'function fish_command_not_found; echo cmd-not-found; end' -ic "nonexistent-command-1234 1 2 3 4"
|
|
|
|
#CHECKERR: cmd-not-found
|
|
|
|
#CHECKERR: fish:
|
|
|
|
#CHECKERR: nonexistent-command-1234 1 2 3 4
|
|
|
|
#CHECKERR: ^
|
|
|
|
$fish -C 'function fish_command_not_found; echo command-not-found $argv; end' -c "nonexistent-command-abcd foo bar baz"
|
|
|
|
#CHECKERR: command-not-found nonexistent-command-abcd foo bar baz
|
|
|
|
#CHECKERR: fish:
|
|
|
|
#CHECKERR: nonexistent-command-abcd foo bar baz
|
|
|
|
#CHECKERR: ^
|
|
|
|
|
|
|
|
$fish -C 'functions --erase fish_command_not_found' -c 'nonexistent-command apple friday'
|
|
|
|
#CHECKERR: fish: Unknown command: nonexistent-command
|
|
|
|
#CHECKERR: nonexistent-command apple friday
|
|
|
|
#CHECKERR: ^
|
|
|
|
|
2021-06-24 03:45:32 +08:00
|
|
|
{ echo; echo }
|
|
|
|
# CHECKERR: {{.*}}: Unknown command: '{ echo; echo }'
|
|
|
|
# CHECKERR: {{.*}}: '{ ... }' is not supported for grouping commands. Please use 'begin; ...; end'
|
|
|
|
# CHECKERR: { echo; echo }
|
|
|
|
# CHECKERR: ^
|
|
|
|
|
Call "fish_command_not_found" if a command wasn't found
Previously, when a command wasn't found, fish would emit the
"fish_command_not_found" *event*.
This was annoying as it was hard to override (the code ended up
checking for a function called `__fish_command_not_found_handler`
anyway!), the setup was ugly,
and it's useless - there is no use case for multiple command-not-found handlers.
Instead, let's just call a function `fish_command_not_found` if it
exists, or print the default message otherwise.
The event is completely removed, but because a missing event is not an error
(MEISNAE in C++-speak) this isn't an issue.
Note that, for backwards-compatibility, we still keep the default
handler function around even tho the new one is hard-coded in C++.
Also, if we detect a previous handler, the new handler just calls it.
This way, the backwards-compatible way to install a custom handler is:
```fish
function __fish_command_not_found_handler --on-event fish_command_not_found
# do a little dance, make a little love, get down tonight
end
```
and the new hotness is
```fish
function fish_command_not_found
# do the thing
end
```
Fixes #7293.
2020-08-30 03:54:13 +08:00
|
|
|
exit 0
|