diff --git a/src/core/core.c b/src/core/core.c index 34649c81..cbe3eb7c 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -269,6 +269,7 @@ void core_init(void) settings_add_str("misc", "ignore_signals", ""); settings_add_bool("misc", "override_coredump_limit", FALSE); settings_add_bool("misc", "quit_on_hup", FALSE); + settings_add_str("misc", "autoload_modules", "perl otr"); #ifdef HAVE_SYS_RESOURCE_H getrlimit(RLIMIT_CORE, &orig_core_rlimit); diff --git a/src/fe-common/core/fe-common-core.c b/src/fe-common/core/fe-common-core.c index 8f412198..63df1698 100644 --- a/src/fe-common/core/fe-common-core.c +++ b/src/fe-common/core/fe-common-core.c @@ -464,6 +464,7 @@ void fe_common_core_finish_init(void) signal_emit("setup changed", 0); autorun_startup(); + signal_emit("module autoload", 0); autoconnect_servers(); } diff --git a/src/fe-common/core/fe-modules.c b/src/fe-common/core/fe-modules.c index 9ad594cb..01b603f5 100644 --- a/src/fe-common/core/fe-modules.c +++ b/src/fe-common/core/fe-modules.c @@ -170,15 +170,25 @@ static void cmd_load(const char *data) char *rootmodule, *submodule; char **module_prefixes; void *free_arg; + gboolean silent; + GHashTable *optlist; g_return_if_fail(data != NULL); - if (!cmd_get_params(data, &free_arg, 2 , &rootmodule, &submodule)) + if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTIONS, "load", &optlist, &rootmodule, + &submodule)) return; + silent = g_hash_table_lookup(optlist, "silent") != NULL; + if (*rootmodule == '\0') cmd_load_list(); else { + if (silent) { + signal_add_first("module error", (SIGNAL_FUNC) signal_stop); + signal_add_first("module loaded", (SIGNAL_FUNC) signal_stop); + } + module_prefixes = module_prefixes_get(); if (*submodule == '\0') module_load(rootmodule, module_prefixes); @@ -187,6 +197,11 @@ static void cmd_load(const char *data) module_prefixes); } module_prefixes_free(module_prefixes); + + if (silent) { + signal_remove("module error", (SIGNAL_FUNC) signal_stop); + signal_remove("module loaded", (SIGNAL_FUNC) signal_stop); + } } cmd_params_free(free_arg); @@ -244,6 +259,7 @@ void fe_modules_init(void) command_bind("load", NULL, (SIGNAL_FUNC) cmd_load); command_bind("unload", NULL, (SIGNAL_FUNC) cmd_unload); + command_set_options("load", "silent"); } void fe_modules_deinit(void) diff --git a/src/fe-text/irssi.c b/src/fe-text/irssi.c index 5c20eb37..fbaa303a 100644 --- a/src/fe-text/irssi.c +++ b/src/fe-text/irssi.c @@ -102,6 +102,21 @@ static void sig_settings_userinfo_changed(gpointer changedp) user_settings_changed = GPOINTER_TO_UINT(changedp); } +static void sig_autoload_modules(void) +{ + char **list, **module; + list = g_strsplit_set(settings_get_str("autoload_modules"), " ,", -1); + for (module = list; *module != NULL; module++) { + char *tmp; + if ((tmp = strchr(*module, ':')) != NULL) + *tmp = ' '; + tmp = g_strdup_printf("-silent %s", *module); + signal_emit("command load", 1, tmp); + g_free(tmp); + } + g_strfreev(list); +} + /* redraw irssi's screen.. */ void irssi_redraw(void) { @@ -159,6 +174,7 @@ static void textui_init(void) theme_register(gui_text_formats); signal_add("settings userinfo changed", (SIGNAL_FUNC) sig_settings_userinfo_changed); + signal_add("module autoload", (SIGNAL_FUNC) sig_autoload_modules); signal_add_last("gui exit", (SIGNAL_FUNC) sig_exit); } @@ -262,6 +278,7 @@ static void textui_deinit(void) dirty_check(); /* one last time to print any quit messages */ signal_remove("settings userinfo changed", (SIGNAL_FUNC) sig_settings_userinfo_changed); + signal_remove("module autoload", (SIGNAL_FUNC) sig_autoload_modules); signal_remove("gui exit", (SIGNAL_FUNC) sig_exit); lastlog_deinit();