diff --git a/parser.cpp b/parser.cpp index 1bc262ea6..b4aedd854 100644 --- a/parser.cpp +++ b/parser.cpp @@ -2027,6 +2027,7 @@ int parser_t::parse_job(process_t *p, for this, used by other shells like bash and zsh). */ + if (wcschr(cmd, L'=')) { wchar_t *cpy = wcsdup(cmd); @@ -2076,9 +2077,15 @@ int parser_t::parse_job(process_t *p, } else { - debug(0, - _(L"Unknown command '%ls'"), - cmd?cmd:L"UNKNOWN"); + /* + Handle unrecognized commands with standard + command not found handler that can make better + error messages + */ + + wcstring_list_t event_args; + event_args.push_back(args.at(0).completion); + event_fire_generic(L"fish_command_not_found", &event_args); } tmp = current_tokenizer_pos; @@ -2090,9 +2097,6 @@ int parser_t::parse_job(process_t *p, job_set_flag(j, JOB_SKIP, 1); - wcstring_list_t event_args; - event_args.push_back(args.at(0).completion); - event_fire_generic(L"fish_command_not_found", &event_args); proc_set_last_status(err==ENOENT?STATUS_UNKNOWN_COMMAND:STATUS_NOT_EXECUTABLE); } } diff --git a/share/functions/__fish_config_interactive.fish b/share/functions/__fish_config_interactive.fish index 814fff198..b78d62b77 100644 --- a/share/functions/__fish_config_interactive.fish +++ b/share/functions/__fish_config_interactive.fish @@ -218,21 +218,23 @@ function __fish_config_interactive -d "Initializations that should be performed function fish_command_not_found_setup --on-event fish_command_not_found # Remove fish_command_not_found_setup so we only execute this once functions --erase fish_command_not_found_setup - + # First check in /usr/lib, this is where modern Ubuntus place this command if test -f /usr/lib/command-not-found function fish_command_not_found_handler --on-event fish_command_not_found /usr/lib/command-not-found $argv end - fish_command_not_found_handler $argv + # Ubuntu Feisty places this command in the regular path instead + else if type -p command-not-found > /dev/null 2> /dev/null + function fish_command_not_found_handler --on-event fish_command_not_found + command-not-found $argv + end + # Use standard fish command not found handler otherwise else - # Ubuntu Feisty places this command in the regular path instead - if type -p command-not-found > /dev/null 2> /dev/null - function fish_command_not_found_handler --on-event fish_command_not_found - command-not-found $argv - end - fish_command_not_found_handler $argv + function __fish_command_not_found_handler --on-event fish_command_not_found + echo fish: Unknown command "'$argv'" >&2 end end + fish_command_not_found_handler $argv end end