diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/scripts/lua/weechat-lua.c | 25 | ||||
-rw-r--r-- | src/plugins/scripts/perl/weechat-perl.c | 25 | ||||
-rw-r--r-- | src/plugins/scripts/python/weechat-python.c | 25 | ||||
-rw-r--r-- | src/plugins/scripts/ruby/weechat-ruby.c | 25 | ||||
-rw-r--r-- | src/plugins/scripts/script.c | 132 | ||||
-rw-r--r-- | src/plugins/scripts/script.h | 12 | ||||
-rw-r--r-- | src/plugins/scripts/tcl/weechat-tcl.c | 35 |
7 files changed, 272 insertions, 7 deletions
diff --git a/src/plugins/scripts/lua/weechat-lua.c b/src/plugins/scripts/lua/weechat-lua.c index 2f8a918f6..943b4cf43 100644 --- a/src/plugins/scripts/lua/weechat-lua.c +++ b/src/plugins/scripts/lua/weechat-lua.c @@ -450,6 +450,30 @@ weechat_lua_completion_cb (void *data, const char *completion_item, } /* + * weechat_lua_infolist_cb: callback for infolist + */ + +struct t_infolist * +weechat_lua_infolist_cb (void *data, const char *infolist_name, + void *pointer, const char *arguments) +{ + /* make C compiler happy */ + (void) data; + (void) arguments; + + if (!infolist_name || !infolist_name[0]) + return NULL; + + if (weechat_strcasecmp (infolist_name, "lua_script") == 0) + { + return script_infolist_list_scripts (weechat_lua_plugin, + lua_scripts, pointer); + } + + return NULL; +} + +/* * weechat_lua_debug_dump_cb: dump Lua plugin data in WeeChat log file */ @@ -504,6 +528,7 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[]) script_init (weechat_lua_plugin, &weechat_lua_command_cb, &weechat_lua_completion_cb, + &weechat_lua_infolist_cb, &weechat_lua_debug_dump_cb, &weechat_lua_buffer_closed_cb, &weechat_lua_load_cb); diff --git a/src/plugins/scripts/perl/weechat-perl.c b/src/plugins/scripts/perl/weechat-perl.c index 04c0437ad..50fcc8a83 100644 --- a/src/plugins/scripts/perl/weechat-perl.c +++ b/src/plugins/scripts/perl/weechat-perl.c @@ -595,6 +595,30 @@ weechat_perl_completion_cb (void *data, const char *completion_item, } /* + * weechat_perl_infolist_cb: callback for infolist + */ + +struct t_infolist * +weechat_perl_infolist_cb (void *data, const char *infolist_name, + void *pointer, const char *arguments) +{ + /* make C compiler happy */ + (void) data; + (void) arguments; + + if (!infolist_name || !infolist_name[0]) + return NULL; + + if (weechat_strcasecmp (infolist_name, "perl_script") == 0) + { + return script_infolist_list_scripts (weechat_perl_plugin, + perl_scripts, pointer); + } + + return NULL; +} + +/* * weechat_perl_debug_dump_cb: dump Perl plugin data in WeeChat log file */ @@ -680,6 +704,7 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[]) script_init (weechat_perl_plugin, &weechat_perl_command_cb, &weechat_perl_completion_cb, + &weechat_perl_infolist_cb, &weechat_perl_debug_dump_cb, &weechat_perl_buffer_closed_cb, &weechat_perl_load_cb); diff --git a/src/plugins/scripts/python/weechat-python.c b/src/plugins/scripts/python/weechat-python.c index 2f4aa68e3..8fcb5b465 100644 --- a/src/plugins/scripts/python/weechat-python.c +++ b/src/plugins/scripts/python/weechat-python.c @@ -663,6 +663,30 @@ weechat_python_completion_cb (void *data, const char *completion_item, } /* + * weechat_python_infolist_cb: callback for infolist + */ + +struct t_infolist * +weechat_python_infolist_cb (void *data, const char *infolist_name, + void *pointer, const char *arguments) +{ + /* make C compiler happy */ + (void) data; + (void) arguments; + + if (!infolist_name || !infolist_name[0]) + return NULL; + + if (weechat_strcasecmp (infolist_name, "python_script") == 0) + { + return script_infolist_list_scripts (weechat_python_plugin, + python_scripts, pointer); + } + + return NULL; +} + +/* * weechat_python_debug_dump_cb: dump Python plugin data in WeeChat log file */ @@ -744,6 +768,7 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[]) script_init (weechat_python_plugin, &weechat_python_command_cb, &weechat_python_completion_cb, + &weechat_python_infolist_cb, &weechat_python_debug_dump_cb, &weechat_python_buffer_closed_cb, &weechat_python_load_cb); diff --git a/src/plugins/scripts/ruby/weechat-ruby.c b/src/plugins/scripts/ruby/weechat-ruby.c index 18f1d5398..78a3965a4 100644 --- a/src/plugins/scripts/ruby/weechat-ruby.c +++ b/src/plugins/scripts/ruby/weechat-ruby.c @@ -649,6 +649,30 @@ weechat_ruby_completion_cb (void *data, const char *completion_item, } /* + * weechat_ruby_infolist_cb: callback for infolist + */ + +struct t_infolist * +weechat_ruby_infolist_cb (void *data, const char *infolist_name, + void *pointer, const char *arguments) +{ + /* make C compiler happy */ + (void) data; + (void) arguments; + + if (!infolist_name || !infolist_name[0]) + return NULL; + + if (weechat_strcasecmp (infolist_name, "ruby_script") == 0) + { + return script_infolist_list_scripts (weechat_ruby_plugin, + ruby_scripts, pointer); + } + + return NULL; +} + +/* * weechat_ruby_debug_dump_cb: dump Ruby plugin data in WeeChat log file */ @@ -785,6 +809,7 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[]) script_init (weechat_ruby_plugin, &weechat_ruby_command_cb, &weechat_ruby_completion_cb, + &weechat_ruby_infolist_cb, &weechat_ruby_debug_dump_cb, &weechat_ruby_buffer_closed_cb, &weechat_ruby_load_cb); diff --git a/src/plugins/scripts/script.c b/src/plugins/scripts/script.c index 9b633d371..ede725dcd 100644 --- a/src/plugins/scripts/script.c +++ b/src/plugins/scripts/script.c @@ -87,6 +87,10 @@ script_init (struct t_weechat_plugin *weechat_plugin, int (*callback_completion)(void *data, const char *completion_item, struct t_gui_buffer *buffer, struct t_gui_completion *completion), + struct t_infolist *(*callback_infolist)(void *data, + const char *infolist_name, + void *pointer, + const char *arguments), int (*callback_signal_debug_dump)(void *data, const char *signal, const char *type_data, void *signal_data), @@ -96,6 +100,7 @@ script_init (struct t_weechat_plugin *weechat_plugin, void (*callback_load_file)(void *data, const char *filename)) { char *string, *completion = "list|listfull|load|autoload|reload|unload %f"; + char infolist_description[512]; int length; /* read script configuration */ @@ -144,14 +149,19 @@ script_init (struct t_weechat_plugin *weechat_plugin, callback_command, NULL); if (string) free (string); - - /* add completion */ + + /* add completion and infolist */ length = strlen (weechat_plugin->name) + 16; string = malloc (length); if (string) { snprintf (string, length, "%s_script", weechat_plugin->name); weechat_hook_completion (string, callback_completion, NULL); + snprintf (infolist_description, sizeof (infolist_description), + /* TRANSLATORS: %s is language (for example "perl") */ + _("list of %s scripts"), weechat_plugin->name); + weechat_hook_infolist (string, infolist_description, + callback_infolist, NULL); free (string); } @@ -166,6 +176,32 @@ script_init (struct t_weechat_plugin *weechat_plugin, } /* + * script_valid: check if a script pointer exists + * return 1 if script exists + * 0 if script is not found + */ + +int +script_valid (struct t_plugin_script *scripts, + struct t_plugin_script *script) +{ + struct t_plugin_script *ptr_script; + + if (!script) + return 0; + + for (ptr_script = scripts; ptr_script; + ptr_script = ptr_script->next_script) + { + if (ptr_script == script) + return 1; + } + + /* script not found */ + return 0; +} + +/* * script_ptr2str: convert pointer to string for usage in a script * (any language) * WARNING: result has to be free() after use @@ -700,6 +736,98 @@ script_display_short_list (struct t_weechat_plugin *weechat_plugin, } /* + * script_add_to_infolist: add a script in an infolist + * return 1 if ok, 0 if error + */ + +int +script_add_to_infolist (struct t_weechat_plugin *weechat_plugin, + struct t_infolist *infolist, + struct t_plugin_script *script) +{ + struct t_infolist_item *ptr_item; + + if (!infolist || !script) + return 0; + + ptr_item = weechat_infolist_new_item (infolist); + if (!ptr_item) + return 0; + + if (!weechat_infolist_new_var_pointer (ptr_item, "pointer", script)) + return 0; + if (!weechat_infolist_new_var_string (ptr_item, "filename", script->filename)) + return 0; + if (!weechat_infolist_new_var_pointer (ptr_item, "interpreter", script->interpreter)) + return 0; + if (!weechat_infolist_new_var_string (ptr_item, "name", script->name)) + return 0; + if (!weechat_infolist_new_var_string (ptr_item, "author", script->author)) + return 0; + if (!weechat_infolist_new_var_string (ptr_item, "version", script->version)) + return 0; + if (!weechat_infolist_new_var_string (ptr_item, "license", script->license)) + return 0; + if (!weechat_infolist_new_var_string (ptr_item, "description", script->description)) + return 0; + if (!weechat_infolist_new_var_string (ptr_item, "shutdown_func", script->shutdown_func)) + return 0; + if (!weechat_infolist_new_var_string (ptr_item, "charset", script->charset)) + return 0; + + return 1; +} + +/* + * script_infolist_list_scripts: build infolist with list of scripts + */ + +struct t_infolist * +script_infolist_list_scripts (struct t_weechat_plugin *weechat_plugin, + struct t_plugin_script *scripts, + void *pointer) +{ + struct t_infolist *ptr_infolist; + struct t_plugin_script *ptr_script; + + if (pointer && !script_valid (scripts, pointer)) + return NULL; + + ptr_infolist = weechat_infolist_new (); + if (ptr_infolist) + { + if (pointer) + { + /* build list with only one script */ + if (!script_add_to_infolist (weechat_plugin, + ptr_infolist, pointer)) + { + weechat_infolist_free (ptr_infolist); + return NULL; + } + return ptr_infolist; + } + else + { + /* build list with all scripts */ + for (ptr_script = scripts; ptr_script; + ptr_script = ptr_script->next_script) + { + if (!script_add_to_infolist (weechat_plugin, + ptr_infolist, ptr_script)) + { + weechat_infolist_free (ptr_infolist); + return NULL; + } + } + return ptr_infolist; + } + } + + return NULL; +} + +/* * script_print_log: print script infos in log (usually for crash dump) */ diff --git a/src/plugins/scripts/script.h b/src/plugins/scripts/script.h index 8e05401a1..159519749 100644 --- a/src/plugins/scripts/script.h +++ b/src/plugins/scripts/script.h @@ -65,6 +65,10 @@ extern void script_init (struct t_weechat_plugin *weechat_plugin, const char *completion_item, struct t_gui_buffer *buffer, struct t_gui_completion *completion), + struct t_infolist *(*callback_infolist)(void *data, + const char *infolist_name, + void *pointer, + const char *arguments), int (*callback_signal_debug_dump)(void *data, const char *signal, const char *type_data, @@ -74,6 +78,8 @@ extern void script_init (struct t_weechat_plugin *weechat_plugin, const char *type_data, void *signal_data), void (*callback_load_file)(void *data, const char *filename)); +extern int script_valid (struct t_plugin_script *scripts, + struct t_plugin_script *script); extern char *script_ptr2str (void *pointer); extern void *script_str2ptr (const char *pointer_str); extern void script_auto_load (struct t_weechat_plugin *weechat_plugin, @@ -104,6 +110,12 @@ extern void script_display_list (struct t_weechat_plugin *weechat_plugin, const char *name, int full); extern void script_display_short_list (struct t_weechat_plugin *weechat_plugin, struct t_plugin_script *scripts); +extern int script_add_to_infolist (struct t_weechat_plugin *weechat_plugin, + struct t_infolist *infolist, + struct t_plugin_script *script); +extern struct t_infolist *script_infolist_list_scripts (struct t_weechat_plugin *weechat_plugin, + struct t_plugin_script *scripts, + void *pointer); extern void script_print_log (struct t_weechat_plugin *weechat_plugin, struct t_plugin_script *scripts); diff --git a/src/plugins/scripts/tcl/weechat-tcl.c b/src/plugins/scripts/tcl/weechat-tcl.c index 910e20551..f1c9da394 100644 --- a/src/plugins/scripts/tcl/weechat-tcl.c +++ b/src/plugins/scripts/tcl/weechat-tcl.c @@ -390,6 +390,30 @@ weechat_tcl_completion_cb (void *data, const char *completion_item, } /* + * weechat_tcl_infolist_cb: callback for infolist + */ + +struct t_infolist * +weechat_tcl_infolist_cb (void *data, const char *infolist_name, + void *pointer, const char *arguments) +{ + /* make C compiler happy */ + (void) data; + (void) arguments; + + if (!infolist_name || !infolist_name[0]) + return NULL; + + if (weechat_strcasecmp (infolist_name, "tcl_script") == 0) + { + return script_infolist_list_scripts (weechat_tcl_plugin, + tcl_scripts, pointer); + } + + return NULL; +} + +/* * weechat_tcl_debug_dump_cb: dump Tcl plugin data in WeeChat log file */ @@ -442,11 +466,12 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[]) tcl_quiet = 1; script_init (weechat_tcl_plugin, - weechat_tcl_command_cb, - weechat_tcl_completion_cb, - weechat_tcl_debug_dump_cb, - weechat_tcl_buffer_closed_cb, - weechat_tcl_load_cb); + &weechat_tcl_command_cb, + &weechat_tcl_completion_cb, + &weechat_tcl_infolist_cb, + &weechat_tcl_debug_dump_cb, + &weechat_tcl_buffer_closed_cb, + &weechat_tcl_load_cb); tcl_quiet = 0; script_display_short_list (weechat_tcl_plugin, |