summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2007-12-07 15:01:37 +0100
committerSebastien Helleu <flashcode@flashtux.org>2007-12-07 15:01:37 +0100
commit72a694ed4c78df15b68ef4698b16f7072919f3ee (patch)
tree499e976612d6fe1d92675149707350c38b74758b /src/plugins
parent495e6bd5df9163148676821d610c9ef863326f70 (diff)
downloadweechat-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.c29
-rw-r--r--src/plugins/plugin-api.c15
-rw-r--r--src/plugins/plugin-api.h4
-rw-r--r--src/plugins/plugin.c1
-rw-r--r--src/plugins/weechat-plugin.h6
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() \