summaryrefslogtreecommitdiff
path: root/src/plugins/scripts/lua/weechat-lua.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/scripts/lua/weechat-lua.c')
-rw-r--r--src/plugins/scripts/lua/weechat-lua.c103
1 files changed, 93 insertions, 10 deletions
diff --git a/src/plugins/scripts/lua/weechat-lua.c b/src/plugins/scripts/lua/weechat-lua.c
index 943b4cf43..46ca1e4b8 100644
--- a/src/plugins/scripts/lua/weechat-lua.c
+++ b/src/plugins/scripts/lua/weechat-lua.c
@@ -49,6 +49,20 @@ struct t_plugin_script *lua_current_script = NULL;
const char *lua_current_script_filename = NULL;
lua_State *lua_current_interpreter = NULL;
+/* string used to execute action "install":
+ when signal "lua_install_script" is received, name of string
+ is added to this string, to be installed later by a timer (when nothing is
+ running in script)
+*/
+char *lua_action_install_list = NULL;
+
+/* string used to execute action "remove":
+ when signal "lua_remove_script" is received, name of string
+ is added to this string, to be removed later by a timer (when nothing is
+ running in script)
+*/
+char *lua_action_remove_list = NULL;
+
/*
* weechat_lua_exec: execute a Lua script
@@ -407,8 +421,8 @@ weechat_lua_command_cb (void *data, struct t_gui_buffer *buffer,
else if (weechat_strcasecmp (argv[1], "load") == 0)
{
/* load Lua script */
- path_script = script_search_full_name (weechat_lua_plugin,
- argv_eol[2]);
+ path_script = script_search_path (weechat_lua_plugin,
+ argv_eol[2]);
weechat_lua_load ((path_script) ? path_script : argv_eol[2]);
if (path_script)
free (path_script);
@@ -474,12 +488,12 @@ weechat_lua_infolist_cb (void *data, const char *infolist_name,
}
/*
- * weechat_lua_debug_dump_cb: dump Lua plugin data in WeeChat log file
+ * weechat_lua_signal_debug_dump_cb: dump Lua plugin data in WeeChat log file
*/
int
-weechat_lua_debug_dump_cb (void *data, const char *signal,
- const char *type_data, void *signal_data)
+weechat_lua_signal_debug_dump_cb (void *data, const char *signal,
+ const char *type_data, void *signal_data)
{
/* make C compiler happy */
(void) data;
@@ -493,12 +507,12 @@ weechat_lua_debug_dump_cb (void *data, const char *signal,
}
/*
- * weechat_lua_buffer_closed_cb: callback called when a buffer is closed
+ * weechat_lua_signal_buffer_closed_cb: callback called when a buffer is closed
*/
int
-weechat_lua_buffer_closed_cb (void *data, const char *signal,
- const char *type_data, void *signal_data)
+weechat_lua_signal_buffer_closed_cb (void *data, const char *signal,
+ const char *type_data, void *signal_data)
{
/* make C compiler happy */
(void) data;
@@ -512,6 +526,74 @@ weechat_lua_buffer_closed_cb (void *data, const char *signal,
}
/*
+ * weechat_lua_timer_action_cb: timer for executing actions
+ */
+
+int
+weechat_lua_timer_action_cb (void *data, int remaining_calls)
+{
+ /* make C compiler happy */
+ (void) remaining_calls;
+
+ if (data)
+ {
+ if (data == &lua_action_install_list)
+ {
+ script_action_install (weechat_lua_plugin,
+ lua_scripts,
+ &weechat_lua_unload,
+ &weechat_lua_load,
+ &lua_action_install_list);
+ }
+ else if (data == &lua_action_remove_list)
+ {
+ script_action_remove (weechat_lua_plugin,
+ lua_scripts,
+ &weechat_lua_unload,
+ &lua_action_remove_list);
+ }
+ }
+
+ return WEECHAT_RC_OK;
+}
+
+/*
+ * weechat_lua_signal_script_action_cb: callback called when a script action
+ * is asked (install/remove a script)
+ */
+
+int
+weechat_lua_signal_script_action_cb (void *data, const char *signal,
+ const char *type_data,
+ void *signal_data)
+{
+ /* make C compiler happy */
+ (void) data;
+
+ if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_STRING) == 0)
+ {
+ if (strcmp (signal, "lua_script_install") == 0)
+ {
+ script_action_add (&lua_action_install_list,
+ (const char *)signal_data);
+ weechat_hook_timer (1, 0, 1,
+ &weechat_lua_timer_action_cb,
+ &lua_action_install_list);
+ }
+ else if (strcmp (signal, "lua_script_remove") == 0)
+ {
+ script_action_add (&lua_action_remove_list,
+ (const char *)signal_data);
+ weechat_hook_timer (1, 0, 1,
+ &weechat_lua_timer_action_cb,
+ &lua_action_remove_list);
+ }
+ }
+
+ return WEECHAT_RC_OK;
+}
+
+/*
* weechat_plugin_init: initialize Lua plugin
*/
@@ -529,8 +611,9 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[])
&weechat_lua_command_cb,
&weechat_lua_completion_cb,
&weechat_lua_infolist_cb,
- &weechat_lua_debug_dump_cb,
- &weechat_lua_buffer_closed_cb,
+ &weechat_lua_signal_debug_dump_cb,
+ &weechat_lua_signal_buffer_closed_cb,
+ &weechat_lua_signal_script_action_cb,
&weechat_lua_load_cb);
lua_quiet = 0;