summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/scripts/lua/weechat-lua.c25
-rw-r--r--src/plugins/scripts/perl/weechat-perl.c25
-rw-r--r--src/plugins/scripts/python/weechat-python.c25
-rw-r--r--src/plugins/scripts/ruby/weechat-ruby.c25
-rw-r--r--src/plugins/scripts/script.c132
-rw-r--r--src/plugins/scripts/script.h12
-rw-r--r--src/plugins/scripts/tcl/weechat-tcl.c35
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,