diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2005-10-17 14:30:03 +0000 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2005-10-17 14:30:03 +0000 |
commit | 357d7c5a2fdc42eb9dc72413767280c0ffe94e0f (patch) | |
tree | b9360f1e0c0b76058241e3e0e5f2b13018e25c8a /src | |
parent | b2ec60110c17716c9b7ad2e07ece6734db1c82e8 (diff) | |
download | weechat-357d7c5a2fdc42eb9dc72413767280c0ffe94e0f.zip |
Changes in plugins and scripts plugins:
- get_info("version") now returns only version
- added get_config() function to read config options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/plugins.c | 167 | ||||
-rw-r--r-- | src/plugins/scripts/perl/weechat-perl.c | 39 | ||||
-rw-r--r-- | src/plugins/scripts/python/weechat-python.c | 39 | ||||
-rw-r--r-- | src/plugins/weechat-plugin.h | 52 |
4 files changed, 251 insertions, 46 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 */ |