diff --git a/event.c b/event.c index 03d87c04e..38ef9a730 100644 --- a/event.c +++ b/event.c @@ -704,9 +704,11 @@ void event_free( event_t *e ) } -void event_fire_generic(const wchar_t *name) +void event_fire_generic_internal(const wchar_t *name, ...) { event_t ev; + va_list va; + wchar_t *arg; CHECK( name, ); @@ -715,6 +717,13 @@ void event_fire_generic(const wchar_t *name) ev.function_name=0; al_init( &ev.arguments ); + va_start( va, name ); + while( (arg=va_arg(va, wchar_t *) )!= 0 ) + { + al_push( &ev.arguments, arg ); + } + va_end( va ); + event_fire( &ev ); } diff --git a/event.h b/event.h index 0964cab1f..6e3423c65 100644 --- a/event.h +++ b/event.h @@ -164,7 +164,8 @@ const wchar_t *event_get_desc( event_t *e ); /** Fire a generic event with the specified name */ -void event_fire_generic(const wchar_t *name); +#define event_fire_generic( ... ) event_fire_generic_internal( __VA_ARGS__, (void *)0 ) +void event_fire_generic_internal(const wchar_t *name,...); #endif diff --git a/parser.c b/parser.c index 4e1bf6b34..7a22f8a0b 100644 --- a/parser.c +++ b/parser.c @@ -2086,6 +2086,7 @@ static int parse_job( process_t *p, current_tokenizer_pos=tmp; job_set_flag( j, JOB_SKIP, 1 ); + event_fire_generic(L"fish_command_not_found", (wchar_t *)al_get( args, 0 ) ); 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 28365bd81..82764535c 100644 --- a/share/functions/__fish_config_interactive.fish +++ b/share/functions/__fish_config_interactive.fish @@ -209,5 +209,11 @@ function __fish_config_interactive -d "Initializations that should be performed commandline -f repaint end + if test -f /usr/lib/command-not-found $argv + function fish_command_not_found_handler --on-event fish_command_not_found + /usr/lib/command-not-found $argv + end + end + end