mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-30 22:34:29 +08:00
340de73172
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.
25 lines
919 B
Fish
25 lines
919 B
Fish
# 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: ^
|
|
|
|
exit 0
|