diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2007-12-07 15:01:37 +0100 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2007-12-07 15:01:37 +0100 |
commit | 72a694ed4c78df15b68ef4698b16f7072919f3ee (patch) | |
tree | 499e976612d6fe1d92675149707350c38b74758b /src/plugins | |
parent | 495e6bd5df9163148676821d610c9ef863326f70 (diff) | |
download | weechat-72a694ed4c78df15b68ef4698b16f7072919f3ee.zip |
Added completion hook, to let plugins add custom completions for commands
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/alias/alias.c | 29 | ||||
-rw-r--r-- | src/plugins/plugin-api.c | 15 | ||||
-rw-r--r-- | src/plugins/plugin-api.h | 4 | ||||
-rw-r--r-- | src/plugins/plugin.c | 1 | ||||
-rw-r--r-- | src/plugins/weechat-plugin.h | 6 |
5 files changed, 54 insertions, 1 deletions
diff --git a/src/plugins/alias/alias.c b/src/plugins/alias/alias.c index cee9e7b22..b7a74be8e 100644 --- a/src/plugins/alias/alias.c +++ b/src/plugins/alias/alias.c @@ -43,6 +43,7 @@ struct t_alias *last_alias = NULL; struct t_hook *alias_command = NULL; struct t_hook *unalias_command = NULL; struct t_hook *config_reload = NULL; +struct t_hook *completion = NULL; /* @@ -691,6 +692,28 @@ unalias_command_cb (void *data, void *buffer, int argc, char **argv, } /* + * alias_completion_cb: callback for completion + */ + +int +alias_completion_cb (void *data, char *completion, void *list) +{ + struct t_alias *ptr_alias; + + /* make C compiler happy */ + (void) data; + (void) completion; + + for (ptr_alias = alias_list; ptr_alias; + ptr_alias = ptr_alias->next_alias) + { + weechat_list_add (list, ptr_alias->name, "sort"); + } + + return PLUGIN_RC_SUCCESS; +} + +/* * weechat_plugin_init: initialize alias plugin */ @@ -734,12 +757,15 @@ weechat_plugin_init (struct t_weechat_plugin *plugin) N_("alias_name"), N_("alias_name: name of alias to " "remove"), - "%h", + "%(alias)", unalias_command_cb, NULL); config_reload = weechat_hook_event ("config_reload", alias_config_reload_event_cb, NULL); + completion = weechat_hook_completion ("alias", + alias_completion_cb, NULL); + return PLUGIN_RC_SUCCESS; } @@ -756,6 +782,7 @@ weechat_plugin_end () weechat_unhook (alias_command); weechat_unhook (unalias_command); weechat_unhook (config_reload); + weechat_unhook (completion); return PLUGIN_RC_SUCCESS; } diff --git a/src/plugins/plugin-api.c b/src/plugins/plugin-api.c index 88b712983..d16e4e520 100644 --- a/src/plugins/plugin-api.c +++ b/src/plugins/plugin-api.c @@ -1186,6 +1186,21 @@ plugin_api_hook_config (struct t_weechat_plugin *plugin, char *config_type, } /* + * plugin_api_hook_completion: hook a completion + */ + +struct t_hook * +plugin_api_hook_completion (struct t_weechat_plugin *plugin, char *completion, + int (*callback)(void *, char *, void *), + void *data) +{ + if (plugin && callback) + return hook_completion (plugin, completion, callback, data); + + return NULL; +} + +/* * plugin_api_unhook: unhook something */ diff --git a/src/plugins/plugin-api.h b/src/plugins/plugin-api.h index d1ceda88d..7b0b83ae3 100644 --- a/src/plugins/plugin-api.h +++ b/src/plugins/plugin-api.h @@ -146,6 +146,10 @@ extern struct t_hook *plugin_api_hook_config (struct t_weechat_plugin *, char *, char *, int (*)(void *, char *, char *, char *), void *); +extern struct t_hook *plugin_api_hook_completion (struct t_weechat_plugin *, + char *, + int (*)(void *, char *, void *), + void *); extern void plugin_api_unhook (struct t_weechat_plugin *, void *); extern void plugin_api_unhook_all (struct t_weechat_plugin *); diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c index 09b481734..f1057c3cf 100644 --- a/src/plugins/plugin.c +++ b/src/plugins/plugin.c @@ -289,6 +289,7 @@ plugin_load (char *filename) new_plugin->hook_print = &plugin_api_hook_print; new_plugin->hook_event = &plugin_api_hook_event; new_plugin->hook_config = &plugin_api_hook_config; + new_plugin->hook_completion = &plugin_api_hook_completion; new_plugin->unhook = &plugin_api_unhook; new_plugin->unhook_all = &plugin_api_unhook_all; diff --git a/src/plugins/weechat-plugin.h b/src/plugins/weechat-plugin.h index 115c9f032..3bdbc2b39 100644 --- a/src/plugins/weechat-plugin.h +++ b/src/plugins/weechat-plugin.h @@ -155,6 +155,9 @@ struct t_weechat_plugin struct t_hook *(*hook_config) (struct t_weechat_plugin *, char *, char *, int (*)(void *, char *, char *, char *), void *); + struct t_hook *(*hook_completion) (struct t_weechat_plugin *, char *, + int (*)(void *, char *, void *), + void *); void (*unhook) (struct t_weechat_plugin *, void *); void (*unhook_all) (struct t_weechat_plugin *); @@ -364,6 +367,9 @@ struct t_weechat_plugin #define weechat_hook_config(__type, __option, __callback, __data) \ weechat_plugin->hook_config(weechat_plugin, __type, __option, \ __callback, __data) +#define weechat_hook_completion(__completion, __callback, __data) \ + weechat_plugin->hook_completion(weechat_plugin, __completion, \ + __callback, __data) #define weechat_unhook(__hook) \ weechat_plugin->unhook(weechat_plugin, __hook) #define weechat_unhook_all() \ |