summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/plugins.c167
-rw-r--r--src/plugins/scripts/perl/weechat-perl.c39
-rw-r--r--src/plugins/scripts/python/weechat-python.c39
-rw-r--r--src/plugins/weechat-plugin.h52
-rw-r--r--weechat/src/plugins/plugins.c167
-rw-r--r--weechat/src/plugins/scripts/perl/weechat-perl.c39
-rw-r--r--weechat/src/plugins/scripts/python/weechat-python.c39
-rw-r--r--weechat/src/plugins/weechat-plugin.h52
8 files changed, 502 insertions, 92 deletions
diff --git a/src/plugins/plugins.c b/src/plugins/plugins.c
index cfba9067d..c326c9298 100644
--- a/src/plugins/plugins.c
+++ b/src/plugins/plugins.c
@@ -644,6 +644,9 @@ plugin_load (char *filename)
new_plugin->version = strdup (version);
/* functions */
+ new_plugin->ascii_strcasecmp = &weechat_ascii_strcasecmp;
+ new_plugin->explode_string = &weechat_explode_string;
+ new_plugin->free_exploded_string = &weechat_free_exploded_string;
new_plugin->mkdir_home = &weechat_plugin_mkdir_home;
new_plugin->exec_on_files = &weechat_plugin_exec_on_files;
new_plugin->msg_handler_add = &weechat_plugin_msg_handler_add;
@@ -659,9 +662,7 @@ plugin_load (char *filename)
new_plugin->get_info = &weechat_plugin_get_info;
new_plugin->get_dcc_info = &weechat_plugin_get_dcc_info;
new_plugin->free_dcc_info = &weechat_plugin_free_dcc_info;
- new_plugin->explode_string = &weechat_explode_string;
- new_plugin->free_exploded_string = &weechat_free_exploded_string;
- new_plugin->ascii_strcasecmp = &weechat_ascii_strcasecmp;
+ new_plugin->get_config = &weechat_plugin_get_config;
/* handlers */
new_plugin->msg_handlers = NULL;
@@ -919,6 +920,51 @@ plugin_end ()
/*************************** Public plugin interface **************************/
/*
+ * weechat_ascii_strcasecmp: locale and case independent string comparison
+ */
+
+int
+weechat_ascii_strcasecmp (t_weechat_plugin *plugin,
+ char *string1, char *string2)
+{
+ /* make gcc happy */
+ (void) plugin;
+
+ return ascii_strcasecmp (string1, string2);
+}
+
+/*
+ * weechat_explode_string: explode a string
+ */
+
+char **
+weechat_explode_string (t_weechat_plugin *plugin, char *string,
+ char *separators, int num_items_max,
+ int *num_items)
+{
+ /* make gcc happy */
+ (void) plugin;
+
+ if (!plugin || !string || !separators || !num_items)
+ return NULL;
+
+ return explode_string (string, separators, num_items_max, num_items);
+}
+
+/*
+ * weechat_free_exploded_string: free exploded string
+ */
+
+void
+weechat_free_exploded_string (t_weechat_plugin *plugin, char **exploded_string)
+{
+ /* make gcc happy */
+ (void) plugin;
+
+ free_exploded_string (exploded_string);
+}
+
+/*
* weechat_plugin_mkdir_home: create a directory for script in WeeChat home
*/
@@ -1151,7 +1197,7 @@ weechat_plugin_get_info (t_weechat_plugin *plugin, char *info, char *server, cha
if (ascii_strcasecmp (info, "version") == 0)
{
- return strdup (PACKAGE_STRING);
+ return strdup (PACKAGE_VERSION);
}
else if (ascii_strcasecmp (info, "nick") == 0)
{
@@ -1291,46 +1337,105 @@ weechat_plugin_free_dcc_info (t_weechat_plugin *plugin, t_plugin_dcc_info *dcc_i
}
/*
- * weechat_explode_string: explode a string
+ * weechat_plugin_get_config_str_value: return string value for any option
+ * This function should never be called directly
+ * (only used by weechat_get_config)
*/
-char **
-weechat_explode_string (t_weechat_plugin *plugin, char *string,
- char *separators, int num_items_max,
- int *num_items)
+char *
+weechat_plugin_get_config_str_value (t_config_option *option, void *value)
{
- /* make gcc happy */
- (void) plugin;
+ char buf_temp[1024], *color_name;
- if (!plugin || !string || !separators || !num_items)
- return NULL;
+ if (!value)
+ {
+ if (option->option_type == OPTION_TYPE_STRING)
+ value = option->ptr_string;
+ else
+ value = option->ptr_int;
+ }
- return explode_string (string, separators, num_items_max, num_items);
-}
-
-/*
- * weechat_free_exploded_string: free exploded string
- */
-
-void
-weechat_free_exploded_string (t_weechat_plugin *plugin, char **exploded_string)
-{
- /* make gcc happy */
- (void) plugin;
+ switch (option->option_type)
+ {
+ case OPTION_TYPE_BOOLEAN:
+ return (*((int *)value)) ?
+ strdup ("on") : strdup ("off");
+ break;
+ case OPTION_TYPE_INT:
+ snprintf (buf_temp, sizeof (buf_temp), "%d",
+ *((int *)value));
+ return strdup (buf_temp);
+ break;
+ case OPTION_TYPE_INT_WITH_STRING:
+ return option->array_values[*((int *)value)];
+ break;
+ case OPTION_TYPE_COLOR:
+ color_name = gui_get_color_by_value (*((int *)value));
+ return (color_name) ? strdup (color_name) : strdup ("");
+ break;
+ case OPTION_TYPE_STRING:
+ return (*((char **)value)) ? strdup (*((char **)value)) : strdup ("");
+ break;
+ }
- free_exploded_string (exploded_string);
+ /* should never be executed! */
+ return NULL;
}
/*
- * weechat_ascii_strcasecmp: locale and case independent string comparison
+ * weechat_get_config: get value of a config option
*/
-int
-weechat_ascii_strcasecmp (t_weechat_plugin *plugin,
- char *string1, char *string2)
+char *
+weechat_plugin_get_config (t_weechat_plugin *plugin, char *option)
{
+ int i, j;
+ t_irc_server *ptr_server;
+ char option_name[256];
+ void *ptr_option_value;
+
/* make gcc happy */
(void) plugin;
- return ascii_strcasecmp (string1, string2);
+ for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
+ {
+ if ((i != CONFIG_SECTION_KEYS) && (i != CONFIG_SECTION_ALIAS)
+ && (i != CONFIG_SECTION_IGNORE) && (i != CONFIG_SECTION_SERVER))
+ {
+ for (j = 0; weechat_options[i][j].option_name; j++)
+ {
+ if ((!option) ||
+ ((option) && (option[0])
+ && (strstr (weechat_options[i][j].option_name, option) != NULL)))
+ {
+ return weechat_plugin_get_config_str_value (&weechat_options[i][j], NULL);
+ }
+ }
+ }
+ }
+ for (ptr_server = irc_servers; ptr_server;
+ ptr_server = ptr_server->next_server)
+ {
+ for (i = 0; weechat_options[CONFIG_SECTION_SERVER][i].option_name; i++)
+ {
+ snprintf (option_name, sizeof (option_name), "%s.%s",
+ ptr_server->name,
+ weechat_options[CONFIG_SECTION_SERVER][i].option_name);
+ if ((!option) ||
+ ((option) && (option[0])
+ && (strstr (option_name, option) != NULL)))
+ {
+ ptr_option_value = config_get_server_option_ptr (ptr_server,
+ weechat_options[CONFIG_SECTION_SERVER][i].option_name);
+ if (ptr_option_value)
+ {
+ return weechat_plugin_get_config_str_value (&weechat_options[CONFIG_SECTION_SERVER][i],
+ ptr_option_value);
+ }
+ }
+ }
+ }
+
+ /* option not found */
+ return NULL;
}
diff --git a/src/plugins/scripts/perl/weechat-perl.c b/src/plugins/scripts/perl/weechat-perl.c
index 543c39ba5..a39437958 100644
--- a/src/plugins/scripts/perl/weechat-perl.c
+++ b/src/plugins/scripts/perl/weechat-perl.c
@@ -452,6 +452,44 @@ static XS (XS_weechat_get_dcc_info)
}
/*
+ * weechat::get_config: get value of a config option
+ */
+
+static XS (XS_weechat_get_config)
+{
+ char *option, *value;
+ unsigned int integer;
+ dXSARGS;
+
+ /* make gcc happy */
+ (void) cv;
+
+ if (items != 1)
+ {
+ perl_plugin->printf_server (perl_plugin,
+ "Perl error: wrong parameters for "
+ "\"get_config\" function");
+ XSRETURN_NO;
+ }
+
+ option = SvPV (ST (0), integer);
+ if (option)
+ {
+ value = perl_plugin->get_config (perl_plugin, option);
+
+ if (value)
+ {
+ XST_mPV (0, value);
+ free (value);
+ }
+ else
+ XST_mPV (0, "");
+ }
+
+ XSRETURN (1);
+}
+
+/*
* weechat_perl_xs_init: initialize subroutines
*/
@@ -468,6 +506,7 @@ weechat_perl_xs_init (pTHX)
newXS ("weechat::add_command_handler", XS_weechat_add_command_handler, "weechat");
newXS ("weechat::get_info", XS_weechat_get_info, "weechat");
newXS ("weechat::get_dcc_info", XS_weechat_get_dcc_info, "weechat");
+ newXS ("weechat::get_config", XS_weechat_get_config, "weechat");
}
/*
diff --git a/src/plugins/scripts/python/weechat-python.c b/src/plugins/scripts/python/weechat-python.c
index 5a900ee31..45bc2bcd6 100644
--- a/src/plugins/scripts/python/weechat-python.c
+++ b/src/plugins/scripts/python/weechat-python.c
@@ -456,6 +456,44 @@ weechat_python_get_dcc_info (PyObject *self, PyObject *args)
return list;
}
+
+/*
+ * weechat.get_config: get value of a config option
+ */
+
+static PyObject *
+weechat_python_get_config (PyObject *self, PyObject *args)
+{
+ char *option, *value;
+ PyObject *object;
+
+ /* make gcc happy */
+ (void) self;
+
+ if (!PyArg_ParseTuple (args, "s", &option))
+ {
+ python_plugin->printf_server (python_plugin,
+ "Python error: wrong parameters for "
+ "\"get_config\" function");
+ return NULL;
+ }
+
+ if (option)
+ {
+ value = python_plugin->get_config (python_plugin, option);
+
+ if (value)
+ {
+ object = Py_BuildValue ("s", value);
+ free (value);
+ return object;
+ }
+ else
+ return Py_BuildValue ("s", "");
+ }
+
+ return Py_BuildValue ("i", 1);
+}
/*
* Python subroutines
@@ -471,6 +509,7 @@ PyMethodDef weechat_funcs[] = {
{ "add_command_handler", weechat_python_add_command_handler, METH_VARARGS, "" },
{ "get_info", weechat_python_get_info, METH_VARARGS, "" },
{ "get_dcc_info", weechat_python_get_dcc_info, METH_VARARGS, "" },
+ { "get_config", weechat_python_get_config, METH_VARARGS, "" },
{ NULL, NULL, 0, NULL }
};
diff --git a/src/plugins/weechat-plugin.h b/src/plugins/weechat-plugin.h
index 78a7eecc4..b90b4f113 100644
--- a/src/plugins/weechat-plugin.h
+++ b/src/plugins/weechat-plugin.h
@@ -99,10 +99,29 @@ struct t_weechat_plugin
char *description; /* plugin description */
char *version; /* plugin version */
+ /* plugin handlers */
+ t_plugin_msg_handler *msg_handlers; /* IRC message handlers */
+ t_plugin_msg_handler *last_msg_handler;
+ t_plugin_cmd_handler *cmd_handlers; /* command handlers */
+ t_plugin_cmd_handler *last_cmd_handler;
+
+ /* links to previous/next plugins */
+ t_weechat_plugin *prev_plugin; /* link to previous plugin */
+ t_weechat_plugin *next_plugin; /* link to next plugin */
+
/* plugin functions (interface) */
+
+ /* IMPORTANT NOTE for WeeChat developers: always add new interface functions
+ at the END of functions, for keeping backward compatibility with
+ existing plugins */
+
+ int (*ascii_strcasecmp) (t_weechat_plugin *, char *, char *);
+ char **(*explode_string) (t_weechat_plugin *, char *, char *, int, int *);
+ void (*free_exploded_string) (t_weechat_plugin *, char **);
int (*mkdir_home) (t_weechat_plugin *, char *);
void (*exec_on_files) (t_weechat_plugin *, char *,
int (*)(t_weechat_plugin *, char *));
+
t_plugin_msg_handler *(*msg_handler_add) (t_weechat_plugin *, char *,
t_plugin_handler_func *,
char *, void *);
@@ -114,31 +133,30 @@ struct t_weechat_plugin
char *, void *);
void (*cmd_handler_remove) (t_weechat_plugin *, t_plugin_cmd_handler *);
void (*cmd_handler_remove_all) (t_weechat_plugin *);
+
void (*printf) (t_weechat_plugin *, char *, char *, char *, ...);
void (*printf_server) (t_weechat_plugin *, char *, ...);
void (*infobar_printf) (t_weechat_plugin *, int, char *, ...);
+
void (*exec_command) (t_weechat_plugin *, char *, char *, char *);
char *(*get_info) (t_weechat_plugin *, char *, char *, char *);
t_plugin_dcc_info *(*get_dcc_info) (t_weechat_plugin *);
void (*free_dcc_info) (t_weechat_plugin *, t_plugin_dcc_info *);
- char **(*explode_string) (t_weechat_plugin *, char *, char *, int, int *);
- void (*free_exploded_string) (t_weechat_plugin *, char **);
- int (*ascii_strcasecmp) (t_weechat_plugin *, char *, char *);
- /* plugin handlers */
- t_plugin_msg_handler *msg_handlers; /* IRC message handlers */
- t_plugin_msg_handler *last_msg_handler;
- t_plugin_cmd_handler *cmd_handlers; /* command handlers */
- t_plugin_cmd_handler *last_cmd_handler;
-
- /* links to previous/next plugins */
- t_weechat_plugin *prev_plugin; /* link to previous plugin */
- t_weechat_plugin *next_plugin; /* link to next plugin */
+ char *(*get_config) (t_weechat_plugin *, char *);
+
+ /* WeeChat developers: ALWAYS add new functions at the end */
};
+/* general useful functions */
+extern int weechat_ascii_strcasecmp (t_weechat_plugin *,char *, char *);
+extern char **weechat_explode_string (t_weechat_plugin *, char *, char *, int, int *);
+extern void weechat_free_exploded_string (t_weechat_plugin *, char **);
extern int weechat_plugin_mkdir_home (t_weechat_plugin *, char *);
extern void weechat_plugin_exec_on_files (t_weechat_plugin *, char *,
int (*)(t_weechat_plugin *, char *));
+
+/* handler functions */
extern t_plugin_msg_handler *weechat_plugin_msg_handler_add (t_weechat_plugin *, char *,
t_plugin_handler_func *,
char *, void *);
@@ -150,15 +168,19 @@ extern t_plugin_cmd_handler *weechat_plugin_cmd_handler_add (t_weechat_plugin *,
char *, void *);
extern void weechat_plugin_cmd_handler_remove (t_weechat_plugin *, t_plugin_cmd_handler *);
extern void weechat_plugin_cmd_handler_remove_all (t_weechat_plugin *);
+
+/* display functions */
extern void weechat_plugin_printf (t_weechat_plugin *, char *, char *, char *, ...);
extern void weechat_plugin_printf_server (t_weechat_plugin *, char *, ...);
extern void weechat_plugin_infobar_printf (t_weechat_plugin *, int, char *, ...);
+
+/* IRC functions */
extern void weechat_plugin_exec_command (t_weechat_plugin *, char *, char *, char *);
extern char *weechat_plugin_get_info (t_weechat_plugin *, char *, char *, char *);
extern t_plugin_dcc_info *weechat_plugin_get_dcc_info (t_weechat_plugin *);
extern void weechat_plugin_free_dcc_info (t_weechat_plugin *, t_plugin_dcc_info *);
-extern char **weechat_explode_string (t_weechat_plugin *, char *, char *, int, int *);
-extern void weechat_free_exploded_string (t_weechat_plugin *, char **);
-extern int weechat_ascii_strcasecmp (t_weechat_plugin *,char *, char *);
+
+/* other functions */
+extern char *weechat_plugin_get_config (t_weechat_plugin *, char *);
#endif /* weechat-plugin.h */
diff --git a/weechat/src/plugins/plugins.c b/weechat/src/plugins/plugins.c
index cfba9067d..c326c9298 100644
--- a/weechat/src/plugins/plugins.c
+++ b/weechat/src/plugins/plugins.c
@@ -644,6 +644,9 @@ plugin_load (char *filename)
new_plugin->version = strdup (version);
/* functions */
+ new_plugin->ascii_strcasecmp = &weechat_ascii_strcasecmp;
+ new_plugin->explode_string = &weechat_explode_string;
+ new_plugin->free_exploded_string = &weechat_free_exploded_string;
new_plugin->mkdir_home = &weechat_plugin_mkdir_home;
new_plugin->exec_on_files = &weechat_plugin_exec_on_files;
new_plugin->msg_handler_add = &weechat_plugin_msg_handler_add;
@@ -659,9 +662,7 @@ plugin_load (char *filename)
new_plugin->get_info = &weechat_plugin_get_info;
new_plugin->get_dcc_info = &weechat_plugin_get_dcc_info;
new_plugin->free_dcc_info = &weechat_plugin_free_dcc_info;
- new_plugin->explode_string = &weechat_explode_string;
- new_plugin->free_exploded_string = &weechat_free_exploded_string;
- new_plugin->ascii_strcasecmp = &weechat_ascii_strcasecmp;
+ new_plugin->get_config = &weechat_plugin_get_config;
/* handlers */
new_plugin->msg_handlers = NULL;
@@ -919,6 +920,51 @@ plugin_end ()
/*************************** Public plugin interface **************************/
/*
+ * weechat_ascii_strcasecmp: locale and case independent string comparison
+ */
+
+int
+weechat_ascii_strcasecmp (t_weechat_plugin *plugin,
+ char *string1, char *string2)
+{
+ /* make gcc happy */
+ (void) plugin;
+
+ return ascii_strcasecmp (string1, string2);
+}
+
+/*
+ * weechat_explode_string: explode a string
+ */
+
+char **
+weechat_explode_string (t_weechat_plugin *plugin, char *string,
+ char *separators, int num_items_max,
+ int *num_items)
+{
+ /* make gcc happy */
+ (void) plugin;
+
+ if (!plugin || !string || !separators || !num_items)
+ return NULL;
+
+ return explode_string (string, separators, num_items_max, num_items);
+}
+
+/*
+ * weechat_free_exploded_string: free exploded string
+ */
+
+void
+weechat_free_exploded_string (t_weechat_plugin *plugin, char **exploded_string)
+{
+ /* make gcc happy */
+ (void) plugin;
+
+ free_exploded_string (exploded_string);
+}
+
+/*
* weechat_plugin_mkdir_home: create a directory for script in WeeChat home
*/
@@ -1151,7 +1197,7 @@ weechat_plugin_get_info (t_weechat_plugin *plugin, char *info, char *server, cha
if (ascii_strcasecmp (info, "version") == 0)
{
- return strdup (PACKAGE_STRING);
+ return strdup (PACKAGE_VERSION);
}
else if (ascii_strcasecmp (info, "nick") == 0)
{
@@ -1291,46 +1337,105 @@ weechat_plugin_free_dcc_info (t_weechat_plugin *plugin, t_plugin_dcc_info *dcc_i
}
/*
- * weechat_explode_string: explode a string
+ * weechat_plugin_get_config_str_value: return string value for any option
+ * This function should never be called directly
+ * (only used by weechat_get_config)
*/
-char **
-weechat_explode_string (t_weechat_plugin *plugin, char *string,
- char *separators, int num_items_max,
- int *num_items)
+char *
+weechat_plugin_get_config_str_value (t_config_option *option, void *value)
{
- /* make gcc happy */
- (void) plugin;
+ char buf_temp[1024], *color_name;
- if (!plugin || !string || !separators || !num_items)
- return NULL;
+ if (!value)
+ {
+ if (option->option_type == OPTION_TYPE_STRING)
+ value = option->ptr_string;
+ else
+ value = option->ptr_int;
+ }
- return explode_string (string, separators, num_items_max, num_items);
-}
-
-/*
- * weechat_free_exploded_string: free exploded string
- */
-
-void
-weechat_free_exploded_string (t_weechat_plugin *plugin, char **exploded_string)
-{
- /* make gcc happy */
- (void) plugin;
+ switch (option->option_type)
+ {
+ case OPTION_TYPE_BOOLEAN:
+ return (*((int *)value)) ?
+ strdup ("on") : strdup ("off");
+ break;
+ case OPTION_TYPE_INT:
+ snprintf (buf_temp, sizeof (buf_temp), "%d",
+ *((int *)value));
+ return strdup (buf_temp);
+ break;
+ case OPTION_TYPE_INT_WITH_STRING:
+ return option->array_values[*((int *)value)];
+ break;
+ case OPTION_TYPE_COLOR:
+ color_name = gui_get_color_by_value (*((int *)value));
+ return (color_name) ? strdup (color_name) : strdup ("");
+ break;
+ case OPTION_TYPE_STRING:
+ return (*((char **)value)) ? strdup (*((char **)value)) : strdup ("");
+ break;
+ }
- free_exploded_string (exploded_string);
+ /* should never be executed! */
+ return NULL;
}
/*
- * weechat_ascii_strcasecmp: locale and case independent string comparison
+ * weechat_get_config: get value of a config option
*/
-int
-weechat_ascii_strcasecmp (t_weechat_plugin *plugin,
- char *string1, char *string2)
+char *
+weechat_plugin_get_config (t_weechat_plugin *plugin, char *option)
{
+ int i, j;
+ t_irc_server *ptr_server;
+ char option_name[256];
+ void *ptr_option_value;
+
/* make gcc happy */
(void) plugin;
- return ascii_strcasecmp (string1, string2);
+ for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
+ {
+ if ((i != CONFIG_SECTION_KEYS) && (i != CONFIG_SECTION_ALIAS)
+ && (i != CONFIG_SECTION_IGNORE) && (i != CONFIG_SECTION_SERVER))
+ {
+ for (j = 0; weechat_options[i][j].option_name; j++)
+ {
+ if ((!option) ||
+ ((option) && (option[0])
+ && (strstr (weechat_options[i][j].option_name, option) != NULL)))
+ {
+ return weechat_plugin_get_config_str_value (&weechat_options[i][j], NULL);
+ }
+ }
+ }
+ }
+ for (ptr_server = irc_servers; ptr_server;
+ ptr_server = ptr_server->next_server)
+ {
+ for (i = 0; weechat_options[CONFIG_SECTION_SERVER][i].option_name; i++)
+ {
+ snprintf (option_name, sizeof (option_name), "%s.%s",
+ ptr_server->name,
+ weechat_options[CONFIG_SECTION_SERVER][i].option_name);
+ if ((!option) ||
+ ((option) && (option[0])
+ && (strstr (option_name, option) != NULL)))
+ {
+ ptr_option_value = config_get_server_option_ptr (ptr_server,
+ weechat_options[CONFIG_SECTION_SERVER][i].option_name);
+ if (ptr_option_value)
+ {
+ return weechat_plugin_get_config_str_value (&weechat_options[CONFIG_SECTION_SERVER][i],
+ ptr_option_value);
+ }
+ }
+ }
+ }
+
+ /* option not found */
+ return NULL;
}
diff --git a/weechat/src/plugins/scripts/perl/weechat-perl.c b/weechat/src/plugins/scripts/perl/weechat-perl.c
index 543c39ba5..a39437958 100644
--- a/weechat/src/plugins/scripts/perl/weechat-perl.c
+++ b/weechat/src/plugins/scripts/perl/weechat-perl.c
@@ -452,6 +452,44 @@ static XS (XS_weechat_get_dcc_info)
}
/*
+ * weechat::get_config: get value of a config option
+ */
+
+static XS (XS_weechat_get_config)
+{
+ char *option, *value;
+ unsigned int integer;
+ dXSARGS;
+
+ /* make gcc happy */
+ (void) cv;
+
+ if (items != 1)
+ {
+ perl_plugin->printf_server (perl_plugin,
+ "Perl error: wrong parameters for "
+ "\"get_config\" function");
+ XSRETURN_NO;
+ }
+
+ option = SvPV (ST (0), integer);
+ if (option)
+ {
+ value = perl_plugin->get_config (perl_plugin, option);
+
+ if (value)
+ {
+ XST_mPV (0, value);
+ free (value);
+ }
+ else
+ XST_mPV (0, "");
+ }
+
+ XSRETURN (1);
+}
+
+/*
* weechat_perl_xs_init: initialize subroutines
*/
@@ -468,6 +506,7 @@ weechat_perl_xs_init (pTHX)
newXS ("weechat::add_command_handler", XS_weechat_add_command_handler, "weechat");
newXS ("weechat::get_info", XS_weechat_get_info, "weechat");
newXS ("weechat::get_dcc_info", XS_weechat_get_dcc_info, "weechat");
+ newXS ("weechat::get_config", XS_weechat_get_config, "weechat");
}
/*
diff --git a/weechat/src/plugins/scripts/python/weechat-python.c b/weechat/src/plugins/scripts/python/weechat-python.c
index 5a900ee31..45bc2bcd6 100644
--- a/weechat/src/plugins/scripts/python/weechat-python.c
+++ b/weechat/src/plugins/scripts/python/weechat-python.c
@@ -456,6 +456,44 @@ weechat_python_get_dcc_info (PyObject *self, PyObject *args)
return list;
}
+
+/*
+ * weechat.get_config: get value of a config option
+ */
+
+static PyObject *
+weechat_python_get_config (PyObject *self, PyObject *args)
+{
+ char *option, *value;
+ PyObject *object;
+
+ /* make gcc happy */
+ (void) self;
+
+ if (!PyArg_ParseTuple (args, "s", &option))
+ {
+ python_plugin->printf_server (python_plugin,
+ "Python error: wrong parameters for "
+ "\"get_config\" function");
+ return NULL;
+ }
+
+ if (option)
+ {
+ value = python_plugin->get_config (python_plugin, option);
+
+ if (value)
+ {
+ object = Py_BuildValue ("s", value);
+ free (value);
+ return object;
+ }
+ else
+ return Py_BuildValue ("s", "");
+ }
+
+ return Py_BuildValue ("i", 1);
+}
/*
* Python subroutines
@@ -471,6 +509,7 @@ PyMethodDef weechat_funcs[] = {
{ "add_command_handler", weechat_python_add_command_handler, METH_VARARGS, "" },
{ "get_info", weechat_python_get_info, METH_VARARGS, "" },
{ "get_dcc_info", weechat_python_get_dcc_info, METH_VARARGS, "" },
+ { "get_config", weechat_python_get_config, METH_VARARGS, "" },
{ NULL, NULL, 0, NULL }
};
diff --git a/weechat/src/plugins/weechat-plugin.h b/weechat/src/plugins/weechat-plugin.h
index 78a7eecc4..b90b4f113 100644
--- a/weechat/src/plugins/weechat-plugin.h
+++ b/weechat/src/plugins/weechat-plugin.h
@@ -99,10 +99,29 @@ struct t_weechat_plugin
char *description; /* plugin description */
char *version; /* plugin version */
+ /* plugin handlers */
+ t_plugin_msg_handler *msg_handlers; /* IRC message handlers */
+ t_plugin_msg_handler *last_msg_handler;
+ t_plugin_cmd_handler *cmd_handlers; /* command handlers */
+ t_plugin_cmd_handler *last_cmd_handler;
+
+ /* links to previous/next plugins */
+ t_weechat_plugin *prev_plugin; /* link to previous plugin */
+ t_weechat_plugin *next_plugin; /* link to next plugin */
+
/* plugin functions (interface) */
+
+ /* IMPORTANT NOTE for WeeChat developers: always add new interface functions
+ at the END of functions, for keeping backward compatibility with
+ existing plugins */
+
+ int (*ascii_strcasecmp) (t_weechat_plugin *, char *, char *);
+ char **(*explode_string) (t_weechat_plugin *, char *, char *, int, int *);
+ void (*free_exploded_string) (t_weechat_plugin *, char **);
int (*mkdir_home) (t_weechat_plugin *, char *);
void (*exec_on_files) (t_weechat_plugin *, char *,
int (*)(t_weechat_plugin *, char *));
+
t_plugin_msg_handler *(*msg_handler_add) (t_weechat_plugin *, char *,
t_plugin_handler_func *,
char *, void *);
@@ -114,31 +133,30 @@ struct t_weechat_plugin
char *, void *);
void (*cmd_handler_remove) (t_weechat_plugin *, t_plugin_cmd_handler *);
void (*cmd_handler_remove_all) (t_weechat_plugin *);
+
void (*printf) (t_weechat_plugin *, char *, char *, char *, ...);
void (*printf_server) (t_weechat_plugin *, char *, ...);
void (*infobar_printf) (t_weechat_plugin *, int, char *, ...);
+
void (*exec_command) (t_weechat_plugin *, char *, char *, char *);
char *(*get_info) (t_weechat_plugin *, char *, char *, char *);
t_plugin_dcc_info *(*get_dcc_info) (t_weechat_plugin *);
void (*free_dcc_info) (t_weechat_plugin *, t_plugin_dcc_info *);
- char **(*explode_string) (t_weechat_plugin *, char *, char *, int, int *);
- void (*free_exploded_string) (t_weechat_plugin *, char **);
- int (*ascii_strcasecmp) (t_weechat_plugin *, char *, char *);
- /* plugin handlers */
- t_plugin_msg_handler *msg_handlers; /* IRC message handlers */
- t_plugin_msg_handler *last_msg_handler;
- t_plugin_cmd_handler *cmd_handlers; /* command handlers */
- t_plugin_cmd_handler *last_cmd_handler;
-
- /* links to previous/next plugins */
- t_weechat_plugin *prev_plugin; /* link to previous plugin */
- t_weechat_plugin *next_plugin; /* link to next plugin */
+ char *(*get_config) (t_weechat_plugin *, char *);
+
+ /* WeeChat developers: ALWAYS add new functions at the end */
};
+/* general useful functions */
+extern int weechat_ascii_strcasecmp (t_weechat_plugin *,char *, char *);
+extern char **weechat_explode_string (t_weechat_plugin *, char *, char *, int, int *);
+extern void weechat_free_exploded_string (t_weechat_plugin *, char **);
extern int weechat_plugin_mkdir_home (t_weechat_plugin *, char *);
extern void weechat_plugin_exec_on_files (t_weechat_plugin *, char *,
int (*)(t_weechat_plugin *, char *));
+
+/* handler functions */
extern t_plugin_msg_handler *weechat_plugin_msg_handler_add (t_weechat_plugin *, char *,
t_plugin_handler_func *,
char *, void *);
@@ -150,15 +168,19 @@ extern t_plugin_cmd_handler *weechat_plugin_cmd_handler_add (t_weechat_plugin *,
char *, void *);
extern void weechat_plugin_cmd_handler_remove (t_weechat_plugin *, t_plugin_cmd_handler *);
extern void weechat_plugin_cmd_handler_remove_all (t_weechat_plugin *);
+
+/* display functions */
extern void weechat_plugin_printf (t_weechat_plugin *, char *, char *, char *, ...);
extern void weechat_plugin_printf_server (t_weechat_plugin *, char *, ...);
extern void weechat_plugin_infobar_printf (t_weechat_plugin *, int, char *, ...);
+
+/* IRC functions */
extern void weechat_plugin_exec_command (t_weechat_plugin *, char *, char *, char *);
extern char *weechat_plugin_get_info (t_weechat_plugin *, char *, char *, char *);
extern t_plugin_dcc_info *weechat_plugin_get_dcc_info (t_weechat_plugin *);
extern void weechat_plugin_free_dcc_info (t_weechat_plugin *, t_plugin_dcc_info *);
-extern char **weechat_explode_string (t_weechat_plugin *, char *, char *, int, int *);
-extern void weechat_free_exploded_string (t_weechat_plugin *, char **);
-extern int weechat_ascii_strcasecmp (t_weechat_plugin *,char *, char *);
+
+/* other functions */
+extern char *weechat_plugin_get_config (t_weechat_plugin *, char *);
#endif /* weechat-plugin.h */