summaryrefslogtreecommitdiff
path: root/src/plugins/scripts/tcl/weechat-tcl.c
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2009-04-05 14:53:02 +0200
committerSebastien Helleu <flashcode@flashtux.org>2009-04-05 14:53:02 +0200
commit7f454586ea1b497b780df7e702da0e4c10c011a3 (patch)
tree043c9d3d5c70a66e907bf7f7f5910b10354f41c4 /src/plugins/scripts/tcl/weechat-tcl.c
parent90849848612a04019e076990174ecb5c05987236 (diff)
downloadweechat-7f454586ea1b497b780df7e702da0e4c10c011a3.zip
Add signals in script plugins to install and remove scripts
Diffstat (limited to 'src/plugins/scripts/tcl/weechat-tcl.c')
-rw-r--r--src/plugins/scripts/tcl/weechat-tcl.c103
1 files changed, 93 insertions, 10 deletions
diff --git a/src/plugins/scripts/tcl/weechat-tcl.c b/src/plugins/scripts/tcl/weechat-tcl.c
index f1c9da394..47563c13b 100644
--- a/src/plugins/scripts/tcl/weechat-tcl.c
+++ b/src/plugins/scripts/tcl/weechat-tcl.c
@@ -49,6 +49,20 @@ struct t_plugin_script *last_tcl_script = NULL;
struct t_plugin_script *tcl_current_script = NULL;
const char *tcl_current_script_filename = NULL;
+/* string used to execute action "install":
+ when signal "tcl_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 *tcl_action_install_list = NULL;
+
+/* string used to execute action "remove":
+ when signal "tcl_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 *tcl_action_remove_list = NULL;
+
Tcl_Interp* cinterp;
@@ -347,8 +361,8 @@ weechat_tcl_command_cb (void *data, struct t_gui_buffer *buffer,
else if (weechat_strcasecmp (argv[1], "load") == 0)
{
/* load Tcl script */
- path_script = script_search_full_name (weechat_tcl_plugin,
- argv_eol[2]);
+ path_script = script_search_path (weechat_tcl_plugin,
+ argv_eol[2]);
weechat_tcl_load ((path_script) ? path_script : argv_eol[2]);
if (path_script)
free (path_script);
@@ -414,12 +428,12 @@ weechat_tcl_infolist_cb (void *data, const char *infolist_name,
}
/*
- * weechat_tcl_debug_dump_cb: dump Tcl plugin data in WeeChat log file
+ * weechat_tcl_signal_debug_dump_cb: dump Tcl plugin data in WeeChat log file
*/
int
-weechat_tcl_debug_dump_cb (void *data, const char *signal,
- const char *type_data, void *signal_data)
+weechat_tcl_signal_debug_dump_cb (void *data, const char *signal,
+ const char *type_data, void *signal_data)
{
/* make C compiler happy */
(void) data;
@@ -433,12 +447,12 @@ weechat_tcl_debug_dump_cb (void *data, const char *signal,
}
/*
- * weechat_tcl_buffer_closed_cb: callback called when a buffer is closed
+ * weechat_tcl_signal_buffer_closed_cb: callback called when a buffer is closed
*/
int
-weechat_tcl_buffer_closed_cb (void *data, const char *signal,
- const char *type_data, void *signal_data)
+weechat_tcl_signal_buffer_closed_cb (void *data, const char *signal,
+ const char *type_data, void *signal_data)
{
/* make C compiler happy */
(void) data;
@@ -452,6 +466,74 @@ weechat_tcl_buffer_closed_cb (void *data, const char *signal,
}
/*
+ * weechat_tcl_timer_action_cb: timer for executing actions
+ */
+
+int
+weechat_tcl_timer_action_cb (void *data, int remaining_calls)
+{
+ /* make C compiler happy */
+ (void) remaining_calls;
+
+ if (data)
+ {
+ if (data == &tcl_action_install_list)
+ {
+ script_action_install (weechat_tcl_plugin,
+ tcl_scripts,
+ &weechat_tcl_unload,
+ &weechat_tcl_load,
+ &tcl_action_install_list);
+ }
+ else if (data == &tcl_action_remove_list)
+ {
+ script_action_remove (weechat_tcl_plugin,
+ tcl_scripts,
+ &weechat_tcl_unload,
+ &tcl_action_remove_list);
+ }
+ }
+
+ return WEECHAT_RC_OK;
+}
+
+/*
+ * weechat_tcl_signal_script_action_cb: callback called when a script action
+ * is asked (install/remove a script)
+ */
+
+int
+weechat_tcl_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, "tcl_script_install") == 0)
+ {
+ script_action_add (&tcl_action_install_list,
+ (const char *)signal_data);
+ weechat_hook_timer (1, 0, 1,
+ &weechat_tcl_timer_action_cb,
+ &tcl_action_install_list);
+ }
+ else if (strcmp (signal, "tcl_script_remove") == 0)
+ {
+ script_action_add (&tcl_action_remove_list,
+ (const char *)signal_data);
+ weechat_hook_timer (1, 0, 1,
+ &weechat_tcl_timer_action_cb,
+ &tcl_action_remove_list);
+ }
+ }
+
+ return WEECHAT_RC_OK;
+}
+
+/*
* weechat_plugin_init: initialize Tcl plugin
*/
@@ -469,8 +551,9 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[])
&weechat_tcl_command_cb,
&weechat_tcl_completion_cb,
&weechat_tcl_infolist_cb,
- &weechat_tcl_debug_dump_cb,
- &weechat_tcl_buffer_closed_cb,
+ &weechat_tcl_signal_debug_dump_cb,
+ &weechat_tcl_signal_buffer_closed_cb,
+ &weechat_tcl_signal_script_action_cb,
&weechat_tcl_load_cb);
tcl_quiet = 0;