summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/wee-command.c129
-rw-r--r--src/core/wee-hook.c395
-rw-r--r--src/core/wee-hook.h75
3 files changed, 361 insertions, 238 deletions
diff --git a/src/core/wee-command.c b/src/core/wee-command.c
index 2b68be93a..41b3bfeb1 100644
--- a/src/core/wee-command.c
+++ b/src/core/wee-command.c
@@ -41,7 +41,9 @@
#include "wee-list.h"
#include "../gui/gui-chat.h"
#include "../gui/gui-history.h"
+#include "../gui/gui-input.h"
#include "../gui/gui-keyboard.h"
+#include "../gui/gui-status.h"
#include "../gui/gui-window.h"
#include "../plugins/plugin.h"
#include "../plugins/plugin-config.h"
@@ -520,6 +522,20 @@ command_buffer (struct t_gui_buffer *buffer,
return -1;
}
}
+ else if (string_strcasecmp (argv[0], "close") == 0)
+ {
+ if (!buffer->plugin)
+ {
+ gui_chat_printf (NULL,
+ _("%sError: WeeChat main buffer can't be "
+ "closed"),
+ gui_chat_prefix[GUI_CHAT_PREFIX_ERROR]);
+ return -1;
+ }
+ gui_buffer_free (buffer, 1);
+ gui_status_draw (gui_current_window->buffer, 1);
+ gui_input_draw (gui_current_window->buffer, 1);
+ }
else if (string_strcasecmp (argv[0], "notify") == 0)
{
if (argc < 2)
@@ -1276,54 +1292,6 @@ command_plugin_list (char *name, int full)
}
}
- /* prints hooked */
- hook_found = 0;
- for (ptr_hook = weechat_hooks; ptr_hook;
- ptr_hook = ptr_hook->next_hook)
- {
- if ((ptr_hook->plugin == ptr_plugin)
- && (ptr_hook->type == HOOK_TYPE_PRINT))
- {
- if (!hook_found)
- gui_chat_printf (NULL, _(" prints hooked:"));
- hook_found = 1;
- if (HOOK_PRINT(ptr_hook, buffer))
- gui_chat_printf (NULL,
- _(" buffer: %s / %s, message: \"%s\""),
- HOOK_PRINT(ptr_hook, buffer)->category,
- HOOK_PRINT(ptr_hook, buffer)->name,
- HOOK_PRINT(ptr_hook, message) ?
- HOOK_PRINT(ptr_hook, message) : _("(none)"));
- else
- gui_chat_printf (NULL,
- _(" message: \"%s\""),
- HOOK_PRINT(ptr_hook, message) ?
- HOOK_PRINT(ptr_hook, message) : _("(none)"));
- }
- }
-
- /* config options hooked */
- hook_found = 0;
- for (ptr_hook = weechat_hooks; ptr_hook;
- ptr_hook = ptr_hook->next_hook)
- {
- if ((ptr_hook->plugin == ptr_plugin)
- && (ptr_hook->type == HOOK_TYPE_CONFIG))
- {
- if (!hook_found)
- gui_chat_printf (NULL,
- _(" configuration otions "
- "hooked:"));
- hook_found = 1;
- gui_chat_printf (NULL,
- " (%s) %s",
- HOOK_CONFIG(ptr_hook, type) ?
- HOOK_CONFIG(ptr_hook, type) : "*",
- HOOK_CONFIG(ptr_hook, option) ?
- HOOK_CONFIG(ptr_hook, option) : "*");
- }
- }
-
/* timers hooked */
hook_found = 0;
for (ptr_hook = weechat_hooks; ptr_hook;
@@ -1385,18 +1353,71 @@ command_plugin_list (char *name, int full)
}
}
- /* keyboards hooked */
+ /* prints hooked */
+ hook_found = 0;
+ for (ptr_hook = weechat_hooks; ptr_hook;
+ ptr_hook = ptr_hook->next_hook)
+ {
+ if ((ptr_hook->plugin == ptr_plugin)
+ && (ptr_hook->type == HOOK_TYPE_PRINT))
+ {
+ if (!hook_found)
+ gui_chat_printf (NULL, _(" prints hooked:"));
+ hook_found = 1;
+ if (HOOK_PRINT(ptr_hook, buffer))
+ gui_chat_printf (NULL,
+ _(" buffer: %s / %s, message: \"%s\""),
+ HOOK_PRINT(ptr_hook, buffer)->category,
+ HOOK_PRINT(ptr_hook, buffer)->name,
+ HOOK_PRINT(ptr_hook, message) ?
+ HOOK_PRINT(ptr_hook, message) : _("(none)"));
+ else
+ gui_chat_printf (NULL,
+ _(" message: \"%s\""),
+ HOOK_PRINT(ptr_hook, message) ?
+ HOOK_PRINT(ptr_hook, message) : _("(none)"));
+ }
+ }
+
+ /* events hooked */
hook_found = 0;
for (ptr_hook = weechat_hooks; ptr_hook;
ptr_hook = ptr_hook->next_hook)
{
if ((ptr_hook->plugin == ptr_plugin)
- && (ptr_hook->type == HOOK_TYPE_KEYBOARD))
- hook_found++;
+ && (ptr_hook->type == HOOK_TYPE_EVENT))
+ {
+ if (!hook_found)
+ gui_chat_printf (NULL, _(" events hooked:"));
+ hook_found = 1;
+ gui_chat_printf (NULL,
+ _(" event: %s"),
+ HOOK_EVENT(ptr_hook, event) ?
+ HOOK_EVENT(ptr_hook, event) : _("(all)"));
+ }
+ }
+
+ /* config options hooked */
+ hook_found = 0;
+ for (ptr_hook = weechat_hooks; ptr_hook;
+ ptr_hook = ptr_hook->next_hook)
+ {
+ if ((ptr_hook->plugin == ptr_plugin)
+ && (ptr_hook->type == HOOK_TYPE_CONFIG))
+ {
+ if (!hook_found)
+ gui_chat_printf (NULL,
+ _(" configuration otions "
+ "hooked:"));
+ hook_found = 1;
+ gui_chat_printf (NULL,
+ " (%s) %s",
+ HOOK_CONFIG(ptr_hook, type) ?
+ HOOK_CONFIG(ptr_hook, type) : "*",
+ HOOK_CONFIG(ptr_hook, option) ?
+ HOOK_CONFIG(ptr_hook, option) : "*");
+ }
}
- if (hook_found)
- gui_chat_printf (NULL, _(" %d keyboards hooked"),
- hook_found);
}
}
}
diff --git a/src/core/wee-hook.c b/src/core/wee-hook.c
index 6f7763cba..e8452b6dc 100644
--- a/src/core/wee-hook.c
+++ b/src/core/wee-hook.c
@@ -34,6 +34,7 @@
#include "wee-log.h"
#include "wee-string.h"
#include "wee-util.h"
+#include "../gui/gui-color.h"
#include "../plugins/plugin.h"
@@ -222,140 +223,6 @@ hook_command_exec (void *plugin, char *string)
}
/*
- * hook_print: hook a message printed by WeeChat
- */
-
-struct t_hook *
-hook_print (void *plugin, void *buffer, char *message,
- t_hook_callback_print *callback, void *callback_data)
-{
- struct t_hook *new_hook;
- struct t_hook_print *new_hook_print;
-
- new_hook = (struct t_hook *)malloc (sizeof (struct t_hook));
- if (!new_hook)
- return NULL;
- new_hook_print = (struct t_hook_print *)malloc (sizeof (struct t_hook_print));
- if (!new_hook_print)
- {
- free (new_hook);
- return NULL;
- }
-
- hook_init (new_hook, plugin, HOOK_TYPE_PRINT, callback_data);
-
- new_hook->hook_data = new_hook_print;
- new_hook_print->callback = callback;
- new_hook_print->buffer = (struct t_gui_buffer *)buffer;
- new_hook_print->message = (message) ? strdup (message) : NULL;
-
- hook_add_to_list (new_hook);
-
- return new_hook;
-}
-
-/*
- * hook_print_exec: execute print hook
- */
-
-void
-hook_print_exec (void *buffer, time_t date, char *prefix, char *message)
-{
- struct t_hook *ptr_hook, *next_hook;
-
- if (!message || !message[0])
- return;
-
- ptr_hook = weechat_hooks;
- while (ptr_hook)
- {
- next_hook = ptr_hook->next_hook;
-
- if ((ptr_hook->type == HOOK_TYPE_PRINT)
- && (!ptr_hook->running)
- && (!HOOK_PRINT(ptr_hook, buffer)
- || ((struct t_gui_buffer *)buffer == HOOK_PRINT(ptr_hook, buffer)))
- && (string_strcasestr (message, HOOK_PRINT(ptr_hook, message))))
- {
- ptr_hook->running = 1;
- (void) (HOOK_PRINT(ptr_hook, callback))
- (ptr_hook->callback_data, buffer, date, prefix, message);
- if (hook_valid (ptr_hook))
- ptr_hook->running = 0;
- }
-
- ptr_hook = next_hook;
- }
-}
-
-/*
- * hook_config: hook a config option
- */
-
-struct t_hook *
-hook_config (void *plugin, char *type, char *option,
- t_hook_callback_config *callback, void *callback_data)
-{
- struct t_hook *new_hook;
- struct t_hook_config *new_hook_config;
-
- new_hook = (struct t_hook *)malloc (sizeof (struct t_hook));
- if (!new_hook)
- return NULL;
- new_hook_config = (struct t_hook_config *)malloc (sizeof (struct t_hook_config));
- if (!new_hook_config)
- {
- free (new_hook);
- return NULL;
- }
-
- hook_init (new_hook, plugin, HOOK_TYPE_CONFIG, callback_data);
-
- new_hook->hook_data = new_hook_config;
- new_hook_config->callback = callback;
- new_hook_config->type = (type) ? strdup (type) : strdup ("");
- new_hook_config->option = (option) ? strdup (option) : strdup ("");
-
- hook_add_to_list (new_hook);
-
- return new_hook;
-}
-
-/*
- * hook_config_exec: execute config hooks
- */
-
-void
-hook_config_exec (char *type, char *option, char *value)
-{
- struct t_hook *ptr_hook, *next_hook;
-
- ptr_hook = weechat_hooks;
- while (ptr_hook)
- {
- next_hook = ptr_hook->next_hook;
-
- if ((ptr_hook->type == HOOK_TYPE_CONFIG)
- && (!ptr_hook->running)
- && (!HOOK_CONFIG(ptr_hook, type)
- || (string_strcasecmp (HOOK_CONFIG(ptr_hook, type),
- type) == 0))
- && (!HOOK_CONFIG(ptr_hook, option)
- || (string_strcasecmp (HOOK_CONFIG(ptr_hook, option),
- option) == 0)))
- {
- ptr_hook->running = 1;
- (void) (HOOK_CONFIG(ptr_hook, callback))
- (ptr_hook->callback_data, type, option, value);
- if (hook_valid (ptr_hook))
- ptr_hook->running = 0;
- }
-
- ptr_hook = next_hook;
- }
-}
-
-/*
* hook_timer: hook a timer
*/
@@ -550,6 +417,222 @@ hook_fd_exec (fd_set *read_fds, fd_set *write_fds, fd_set *except_fds)
}
/*
+ * hook_print: hook a message printed by WeeChat
+ */
+
+struct t_hook *
+hook_print (void *plugin, void *buffer, char *message, int strip_colors,
+ t_hook_callback_print *callback, void *callback_data)
+{
+ struct t_hook *new_hook;
+ struct t_hook_print *new_hook_print;
+
+ new_hook = (struct t_hook *)malloc (sizeof (struct t_hook));
+ if (!new_hook)
+ return NULL;
+ new_hook_print = (struct t_hook_print *)malloc (sizeof (struct t_hook_print));
+ if (!new_hook_print)
+ {
+ free (new_hook);
+ return NULL;
+ }
+
+ hook_init (new_hook, plugin, HOOK_TYPE_PRINT, callback_data);
+
+ new_hook->hook_data = new_hook_print;
+ new_hook_print->callback = callback;
+ new_hook_print->buffer = (struct t_gui_buffer *)buffer;
+ new_hook_print->message = (message) ? strdup (message) : NULL;
+ new_hook_print->strip_colors = strip_colors;
+
+ hook_add_to_list (new_hook);
+
+ return new_hook;
+}
+
+/*
+ * hook_print_exec: execute print hook
+ */
+
+void
+hook_print_exec (void *buffer, time_t date, char *prefix, char *message)
+{
+ struct t_hook *ptr_hook, *next_hook;
+ char *prefix_no_color, *message_no_color;
+
+ if (!message || !message[0])
+ return;
+
+ prefix_no_color = (char *)gui_color_decode ((unsigned char *)prefix);
+ if (!prefix_no_color)
+ return;
+
+ message_no_color = (char *)gui_color_decode ((unsigned char *)message);
+ if (!message_no_color)
+ {
+ free (prefix_no_color);
+ return;
+ }
+
+ ptr_hook = weechat_hooks;
+ while (ptr_hook)
+ {
+ next_hook = ptr_hook->next_hook;
+
+ if ((ptr_hook->type == HOOK_TYPE_PRINT)
+ && (!ptr_hook->running)
+ && (!HOOK_PRINT(ptr_hook, buffer)
+ || ((struct t_gui_buffer *)buffer == HOOK_PRINT(ptr_hook, buffer)))
+ && (!HOOK_PRINT(ptr_hook, message)
+ || string_strcasestr (prefix_no_color, HOOK_PRINT(ptr_hook, message))
+ || string_strcasestr (message_no_color, HOOK_PRINT(ptr_hook, message))))
+ {
+ ptr_hook->running = 1;
+ (void) (HOOK_PRINT(ptr_hook, callback))
+ (ptr_hook->callback_data, buffer, date,
+ (HOOK_PRINT(ptr_hook, strip_colors)) ? prefix_no_color : prefix,
+ (HOOK_PRINT(ptr_hook, strip_colors)) ? message_no_color : message);
+ if (hook_valid (ptr_hook))
+ ptr_hook->running = 0;
+ }
+
+ ptr_hook = next_hook;
+ }
+}
+
+/*
+ * hook_event: hook an event
+ */
+
+struct t_hook *
+hook_event (void *plugin, char *event,
+ t_hook_callback_event *callback, void *callback_data)
+{
+ struct t_hook *new_hook;
+ struct t_hook_event *new_hook_event;
+
+ if (!event || !event[0])
+ return NULL;
+
+ new_hook = (struct t_hook *)malloc (sizeof (struct t_hook));
+ if (!new_hook)
+ return NULL;
+ new_hook_event = (struct t_hook_event *)malloc (sizeof (struct t_hook_event));
+ if (!new_hook_event)
+ {
+ free (new_hook);
+ return NULL;
+ }
+
+ hook_init (new_hook, plugin, HOOK_TYPE_EVENT, callback_data);
+
+ new_hook->hook_data = new_hook_event;
+ new_hook_event->callback = callback;
+ new_hook_event->event = strdup (event);
+
+ hook_add_to_list (new_hook);
+
+ return new_hook;
+}
+
+/*
+ * hook_event_exec: execute event hook
+ */
+
+void
+hook_event_exec (char *event, void *pointer)
+{
+ struct t_hook *ptr_hook, *next_hook;
+
+ ptr_hook = weechat_hooks;
+ while (ptr_hook)
+ {
+ next_hook = ptr_hook->next_hook;
+
+ if ((ptr_hook->type == HOOK_TYPE_EVENT)
+ && (!ptr_hook->running)
+ && ((string_strcasecmp (HOOK_EVENT(ptr_hook, event), "*") == 0)
+ || (string_strcasecmp (HOOK_EVENT(ptr_hook, event), event) == 0)))
+ {
+ ptr_hook->running = 1;
+ (void) (HOOK_EVENT(ptr_hook, callback))
+ (ptr_hook->callback_data, event, pointer);
+ if (hook_valid (ptr_hook))
+ ptr_hook->running = 0;
+ }
+
+ ptr_hook = next_hook;
+ }
+}
+
+/*
+ * hook_config: hook a config option
+ */
+
+struct t_hook *
+hook_config (void *plugin, char *type, char *option,
+ t_hook_callback_config *callback, void *callback_data)
+{
+ struct t_hook *new_hook;
+ struct t_hook_config *new_hook_config;
+
+ new_hook = (struct t_hook *)malloc (sizeof (struct t_hook));
+ if (!new_hook)
+ return NULL;
+ new_hook_config = (struct t_hook_config *)malloc (sizeof (struct t_hook_config));
+ if (!new_hook_config)
+ {
+ free (new_hook);
+ return NULL;
+ }
+
+ hook_init (new_hook, plugin, HOOK_TYPE_CONFIG, callback_data);
+
+ new_hook->hook_data = new_hook_config;
+ new_hook_config->callback = callback;
+ new_hook_config->type = (type) ? strdup (type) : strdup ("");
+ new_hook_config->option = (option) ? strdup (option) : strdup ("");
+
+ hook_add_to_list (new_hook);
+
+ return new_hook;
+}
+
+/*
+ * hook_config_exec: execute config hooks
+ */
+
+void
+hook_config_exec (char *type, char *option, char *value)
+{
+ struct t_hook *ptr_hook, *next_hook;
+
+ ptr_hook = weechat_hooks;
+ while (ptr_hook)
+ {
+ next_hook = ptr_hook->next_hook;
+
+ if ((ptr_hook->type == HOOK_TYPE_CONFIG)
+ && (!ptr_hook->running)
+ && (!HOOK_CONFIG(ptr_hook, type)
+ || (string_strcasecmp (HOOK_CONFIG(ptr_hook, type),
+ type) == 0))
+ && (!HOOK_CONFIG(ptr_hook, option)
+ || (string_strcasecmp (HOOK_CONFIG(ptr_hook, option),
+ option) == 0)))
+ {
+ ptr_hook->running = 1;
+ (void) (HOOK_CONFIG(ptr_hook, callback))
+ (ptr_hook->callback_data, type, option, value);
+ if (hook_valid (ptr_hook))
+ ptr_hook->running = 0;
+ }
+
+ ptr_hook = next_hook;
+ }
+}
+
+/*
* unhook: unhook something
*/
@@ -579,11 +662,22 @@ unhook (struct t_hook *hook)
free (HOOK_COMMAND(hook, completion));
free ((struct t_hook_command *)hook->hook_data);
break;
+ case HOOK_TYPE_TIMER:
+ free ((struct t_hook_timer *)hook->hook_data);
+ break;
+ case HOOK_TYPE_FD:
+ free ((struct t_hook_fd *)hook->hook_data);
+ break;
case HOOK_TYPE_PRINT:
if (HOOK_PRINT(hook, message))
free (HOOK_PRINT(hook, message));
free ((struct t_hook_print *)hook->hook_data);
break;
+ case HOOK_TYPE_EVENT:
+ if (HOOK_EVENT(hook, event))
+ free (HOOK_EVENT(hook, event));
+ free ((struct t_hook_event *)hook->hook_data);
+ break;
case HOOK_TYPE_CONFIG:
if (HOOK_CONFIG(hook, type))
free (HOOK_CONFIG(hook, type));
@@ -591,14 +685,6 @@ unhook (struct t_hook *hook)
free (HOOK_CONFIG(hook, option));
free ((struct t_hook_config *)hook->hook_data);
break;
- case HOOK_TYPE_TIMER:
- free ((struct t_hook_timer *)hook->hook_data);
- break;
- case HOOK_TYPE_FD:
- free ((struct t_hook_fd *)hook->hook_data);
- break;
- case HOOK_TYPE_KEYBOARD:
- break;
}
}
@@ -681,16 +767,6 @@ hook_print_log ()
weechat_log_printf (" command_args_desc. . : '%s'\n", HOOK_COMMAND(ptr_hook, args_description));
weechat_log_printf (" command_completion . : '%s'\n", HOOK_COMMAND(ptr_hook, completion));
break;
- case HOOK_TYPE_PRINT:
- weechat_log_printf (" print data:\n");
- weechat_log_printf (" buffer . . . . . . . : 0x%X\n", HOOK_PRINT(ptr_hook, buffer));
- weechat_log_printf (" message. . . . . . . : '%s'\n", HOOK_PRINT(ptr_hook, message));
- break;
- case HOOK_TYPE_CONFIG:
- weechat_log_printf (" config data:\n");
- weechat_log_printf (" type . . . . . . . . : '%s'\n", HOOK_CONFIG(ptr_hook, type));
- weechat_log_printf (" option . . . . . . . : '%s'\n", HOOK_CONFIG(ptr_hook, option));
- break;
case HOOK_TYPE_TIMER:
weechat_log_printf (" timer data:\n");
weechat_log_printf (" interval . . . . . . : %ld\n", HOOK_TIMER(ptr_hook, interval));
@@ -702,8 +778,19 @@ hook_print_log ()
weechat_log_printf (" fd . . . . . . . . . : %ld\n", HOOK_FD(ptr_hook, fd));
weechat_log_printf (" flags. . . . . . . . : %ld\n", HOOK_FD(ptr_hook, flags));
break;
- case HOOK_TYPE_KEYBOARD:
- weechat_log_printf (" keyboard data:\n");
+ case HOOK_TYPE_PRINT:
+ weechat_log_printf (" print data:\n");
+ weechat_log_printf (" buffer . . . . . . . : 0x%X\n", HOOK_PRINT(ptr_hook, buffer));
+ weechat_log_printf (" message. . . . . . . : '%s'\n", HOOK_PRINT(ptr_hook, message));
+ break;
+ case HOOK_TYPE_EVENT:
+ weechat_log_printf (" event data:\n");
+ weechat_log_printf (" event. . . . . . . . : '%s'\n", HOOK_EVENT(ptr_hook, event));
+ break;
+ case HOOK_TYPE_CONFIG:
+ weechat_log_printf (" config data:\n");
+ weechat_log_printf (" type . . . . . . . . : '%s'\n", HOOK_CONFIG(ptr_hook, type));
+ weechat_log_printf (" option . . . . . . . : '%s'\n", HOOK_CONFIG(ptr_hook, option));
break;
}
weechat_log_printf (" running. . . . . . . . : %d\n", ptr_hook->running);
diff --git a/src/core/wee-hook.h b/src/core/wee-hook.h
index 38784a11a..ece199fb6 100644
--- a/src/core/wee-hook.h
+++ b/src/core/wee-hook.h
@@ -25,11 +25,11 @@
enum t_hook_type
{
HOOK_TYPE_COMMAND = 0, /* new command */
- HOOK_TYPE_PRINT, /* printed messages */
- HOOK_TYPE_CONFIG, /* config option */
HOOK_TYPE_TIMER, /* timer */
HOOK_TYPE_FD, /* socket of file descriptor */
- HOOK_TYPE_KEYBOARD, /* keyboard handler */
+ HOOK_TYPE_PRINT, /* printed message */
+ HOOK_TYPE_EVENT, /* event */
+ HOOK_TYPE_CONFIG, /* config option */
};
#define HOOK_FD_FLAG_READ 1
@@ -37,10 +37,11 @@ enum t_hook_type
#define HOOK_FD_FLAG_EXCEPTION 4
#define HOOK_COMMAND(hook, var) (((struct t_hook_command *)hook->hook_data)->var)
-#define HOOK_PRINT(hook, var) (((struct t_hook_print *)hook->hook_data)->var)
-#define HOOK_CONFIG(hook, var) (((struct t_hook_config *)hook->hook_data)->var)
#define HOOK_TIMER(hook, var) (((struct t_hook_timer *)hook->hook_data)->var)
#define HOOK_FD(hook, var) (((struct t_hook_fd *)hook->hook_data)->var)
+#define HOOK_PRINT(hook, var) (((struct t_hook_print *)hook->hook_data)->var)
+#define HOOK_EVENT(hook, var) (((struct t_hook_event *)hook->hook_data)->var)
+#define HOOK_CONFIG(hook, var) (((struct t_hook_config *)hook->hook_data)->var)
struct t_hook
{
@@ -70,25 +71,6 @@ struct t_hook_command
char *completion; /* template for completion */
};
-typedef int (t_hook_callback_print)(void *, void *, time_t, char *, char *);
-
-struct t_hook_print
-{
- t_hook_callback_print *callback; /* print callback */
- struct t_gui_buffer *buffer; /* buffer selected (NULL = all) */
- char *message; /* part of message (NULL/empty = all)*/
-};
-
-typedef int (t_hook_callback_config)(void *, char *, char *, char *);
-
-struct t_hook_config
-{
- t_hook_callback_config *callback; /* config callback */
- char *type; /* "weechat" or "plugin" */
- char *option; /* config option for hook */
- /* (NULL = hook for all options) */
-};
-
typedef int (t_hook_callback_timer)(void *);
struct t_hook_timer
@@ -108,6 +90,34 @@ struct t_hook_fd
int flags; /* fd flags (read,write,..) */
};
+typedef int (t_hook_callback_print)(void *, void *, time_t, char *, char *);
+
+struct t_hook_print
+{
+ t_hook_callback_print *callback; /* print callback */
+ struct t_gui_buffer *buffer; /* buffer selected (NULL = all) */
+ char *message; /* part of message (NULL/empty = all)*/
+ int strip_colors; /* strip colors in msg for callback? */
+};
+
+typedef int (t_hook_callback_event)(void *, char *, void *);
+
+struct t_hook_event
+{
+ t_hook_callback_event *callback; /* event callback */
+ char *event; /* event selected ("*" = any event) */
+};
+
+typedef int (t_hook_callback_config)(void *, char *, char *, char *);
+
+struct t_hook_config
+{
+ t_hook_callback_config *callback; /* config callback */
+ char *type; /* "weechat" or "plugin" */
+ char *option; /* config option for hook */
+ /* (NULL = hook for all options) */
+};
+
/* hook variables */
extern struct t_hook *weechat_hooks;
@@ -117,21 +127,26 @@ extern struct t_hook *last_weechat_hook;
extern int hook_valid (struct t_hook *);
extern int hook_valid_for_plugin (void *, struct t_hook *);
+
extern struct t_hook *hook_command (void *, char *, char *, char *, char *,
char *, t_hook_callback_command *, void *);
extern int hook_command_exec (void *, char *);
-extern struct t_hook *hook_print (void *, void *, char *,
- t_hook_callback_print *, void *);
-extern void hook_print_exec (void *, time_t, char *, char *);
-extern struct t_hook *hook_config (void *, char *, char *,
- t_hook_callback_config *, void *);
-extern void hook_config_exec (char *, char *, char *);
extern struct t_hook *hook_timer (void *, long, int, t_hook_callback_timer *,
void *);
extern void hook_timer_exec (struct timeval *);
extern struct t_hook *hook_fd (void *, int, int, t_hook_callback_fd *,void *);
extern void hook_fd_set (fd_set *, fd_set *, fd_set *);
extern void hook_fd_exec (fd_set *, fd_set *, fd_set *);
+extern struct t_hook *hook_print (void *, void *, char *, int,
+ t_hook_callback_print *, void *);
+extern void hook_print_exec (void *, time_t, char *, char *);
+extern struct t_hook *hook_event (void *, char *,
+ t_hook_callback_event *, void *);
+extern void hook_event_exec (char *, void *);
+extern struct t_hook *hook_config (void *, char *, char *,
+ t_hook_callback_config *, void *);
+extern void hook_config_exec (char *, char *, char *);
+
extern void unhook (struct t_hook *);
extern void unhook_all_plugin (void *);
extern void unhook_all ();