diff --git a/src/core/core.c b/src/core/core.c index 62864388..ef2af512 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -57,6 +57,7 @@ void log_away_init(void); void log_away_deinit(void); int irssi_gui; +int irssi_init_finished; static char *irssi_dir, *irssi_config_file; static GSList *dialog_type_queue, *dialog_text_queue; @@ -188,6 +189,11 @@ void core_init_paths(int argc, char *argv[]) irssi_config_file = g_strdup_printf("%s/config", irssi_dir); } +static void sig_irssi_init_finished(void) +{ + irssi_init_finished = TRUE; +} + void core_init(int argc, char *argv[]) { dialog_type_queue = NULL; @@ -233,6 +239,7 @@ void core_init(int argc, char *argv[]) #endif read_settings(); signal_add("setup changed", (SIGNAL_FUNC) read_settings); + signal_add("irssi init finished", (SIGNAL_FUNC) sig_irssi_init_finished); settings_check(); @@ -242,6 +249,7 @@ void core_init(int argc, char *argv[]) void core_deinit(void) { signal_remove("setup changed", (SIGNAL_FUNC) read_settings); + signal_remove("irssi init finished", (SIGNAL_FUNC) sig_irssi_init_finished); chat_commands_deinit(); diff --git a/src/core/core.h b/src/core/core.h index eda825ab..6b7ec621 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -10,6 +10,7 @@ #define IRSSI_GUI_KDE 5 extern int irssi_gui; +extern int irssi_init_finished; /* TRUE after "irssi init finished" signal is sent */ void core_init_paths(int argc, char *argv[]); diff --git a/src/perl/perl-core.c b/src/perl/perl-core.c index 1a970604..432a4283 100644 --- a/src/perl/perl-core.c +++ b/src/perl/perl-core.c @@ -21,6 +21,7 @@ #define NEED_PERL_H #include "module.h" #include "modules.h" +#include "core.h" #include "signals.h" #include "misc.h" @@ -386,6 +387,13 @@ static void sig_script_error(PERL_SCRIPT_REC *script, const char *error) } } +static void sig_autorun() +{ + signal_remove("irssi init finished", (SIGNAL_FUNC) sig_autorun); + + perl_scripts_autorun(); +} + void perl_core_init(void) { print_script_errors = 1; @@ -395,7 +403,11 @@ void perl_core_init(void) signal_add_last("script error", (SIGNAL_FUNC) sig_script_error); perl_scripts_init(); - perl_scripts_autorun(); + + if (irssi_init_finished) + perl_scripts_autorun(); + else + signal_add("irssi init finished", (SIGNAL_FUNC) sig_autorun); module_register("perl", "core"); }