1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-26 12:56:37 +02:00
Files
weechat/src/plugins/irc/irc-command.h
T
Sébastien Helleu cf6aca1619 core: add pointer in some callbacks (closes #406)
This pointer is the first argument received by callbacks, and the
existing argument "data" is now automatically freed by WeeChat when the
object containing the callback is removed.

With this new pointer, the linked list of callbacks in scripts has been
removed. This will improve speed of scripts (using a lot of hooks),
reduce memory used by scripts and reduce time to unload scripts.

Following functions are affected in the C API:

* exec_on_files
* config_new
* config_new_section
* config_new_option
* hook_command
* hook_command_run
* hook_timer
* hook_fd
* hook_process
* hook_process_hashtable
* hook_connect
* hook_print
* hook_signal
* hook_hsignal
* hook_config
* hook_completion
* hook_modifier
* hook_info
* hook_info_hashtable
* hook_infolist
* hook_hdata
* hook_focus
* unhook_all_plugin
* buffer_new
* bar_item_new
* upgrade_new
* upgrade_read
2016-03-21 18:11:21 +01:00

81 lines
4.0 KiB
C

/*
* Copyright (C) 2003-2016 Sébastien Helleu <flashcode@flashtux.org>
*
* This file is part of WeeChat, the extensible chat client.
*
* WeeChat is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* WeeChat is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with WeeChat. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef WEECHAT_IRC_COMMAND_H
#define WEECHAT_IRC_COMMAND_H 1
struct t_irc_server;
struct t_irc_channel;
#define IRC_COMMAND_CALLBACK(__command) \
int \
irc_command_##__command (const void *pointer, void *data, \
struct t_gui_buffer *buffer, \
int argc, char **argv, char **argv_eol)
#define IRC_COMMAND_CHECK_SERVER(__command, __check_connection) \
if (!ptr_server) \
{ \
weechat_printf (NULL, \
_("%s%s: command \"%s\" must be executed on " \
"irc buffer (server or channel)"), \
weechat_prefix ("error"), IRC_PLUGIN_NAME, \
__command); \
return WEECHAT_RC_OK; \
} \
if (__check_connection && !ptr_server->is_connected) \
{ \
weechat_printf (NULL, \
_("%s%s: command \"%s\" must be executed on " \
"connected irc server"), \
weechat_prefix ("error"), IRC_PLUGIN_NAME, \
__command); \
return WEECHAT_RC_OK; \
}
/* list of supported capabilities (for completion in command /cap) */
#define IRC_COMMAND_CAP_SUPPORTED_COMPLETION \
"account-notify|away-notify|cap-notify|extended-join|" \
"multi-prefix|server-time|userhost-in-names|%*"
/* list of supported CTCPs (for completion in command /ctcp) */
#define IRC_COMMAND_CTCP_SUPPORTED_COMPLETION \
"action|clientinfo|finger|ping|source|time|userinfo|version"
extern void irc_command_away_server (struct t_irc_server *server,
const char *arguments,
int reset_unread_marker);
extern void irc_command_join_server (struct t_irc_server *server,
const char *arguments,
int manual_join,
int noswitch);
extern void irc_command_mode_server (struct t_irc_server *server,
const char *command,
struct t_irc_channel *channel,
const char *arguments,
int flags);
extern void irc_command_part_channel (struct t_irc_server *server,
const char *channel_name,
const char *part_message);
extern void irc_command_quit_server (struct t_irc_server *server,
const char *arguments);
extern void irc_command_init ();
#endif /* WEECHAT_IRC_COMMAND_H */