summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--doc/de/autogen/plugin_api/hdata.txt659
-rw-r--r--doc/de/autogen/user/weechat_commands.txt3
-rw-r--r--doc/docgen.pl166
-rw-r--r--doc/en/autogen/plugin_api/hdata.txt659
-rw-r--r--doc/en/autogen/user/weechat_commands.txt3
-rw-r--r--doc/en/weechat_plugin_api.en.txt910
-rw-r--r--doc/fr/autogen/plugin_api/hdata.txt659
-rw-r--r--doc/fr/autogen/user/weechat_commands.txt3
-rw-r--r--doc/fr/weechat_plugin_api.fr.txt925
-rw-r--r--doc/it/autogen/plugin_api/hdata.txt659
-rw-r--r--doc/it/autogen/user/weechat_commands.txt3
-rw-r--r--doc/it/weechat_plugin_api.it.txt931
-rw-r--r--po/cs.po168
-rw-r--r--po/de.po168
-rw-r--r--po/es.po168
-rw-r--r--po/fr.po153
-rw-r--r--po/hu.po165
-rw-r--r--po/it.po168
-rw-r--r--po/pl.po168
-rw-r--r--po/pt_BR.po158
-rw-r--r--po/ru.po165
-rw-r--r--po/weechat.pot148
-rw-r--r--src/core/CMakeLists.txt1
-rw-r--r--src/core/Makefile.am2
-rw-r--r--src/core/wee-command.c8
-rw-r--r--src/core/wee-config-file.c125
-rw-r--r--src/core/wee-config-file.h6
-rw-r--r--src/core/wee-debug.c111
-rw-r--r--src/core/wee-debug.h1
-rw-r--r--src/core/wee-hdata.c400
-rw-r--r--src/core/wee-hdata.h77
-rw-r--r--src/core/wee-hook.c669
-rw-r--r--src/core/wee-hook.h55
-rw-r--r--src/gui/gui-bar-item.c35
-rw-r--r--src/gui/gui-bar-item.h2
-rw-r--r--src/gui/gui-bar.c40
-rw-r--r--src/gui/gui-bar.h2
-rw-r--r--src/gui/gui-buffer.c197
-rw-r--r--src/gui/gui-buffer.h6
-rw-r--r--src/gui/gui-completion.c76
-rw-r--r--src/gui/gui-completion.h4
-rw-r--r--src/gui/gui-filter.c42
-rw-r--r--src/gui/gui-filter.h2
-rw-r--r--src/gui/gui-history.c31
-rw-r--r--src/gui/gui-history.h2
-rw-r--r--src/gui/gui-input.c8
-rw-r--r--src/gui/gui-keyboard.c35
-rw-r--r--src/gui/gui-keyboard.h2
-rw-r--r--src/gui/gui-line.c100
-rw-r--r--src/gui/gui-line.h6
-rw-r--r--src/gui/gui-nicklist.c71
-rw-r--r--src/gui/gui-nicklist.h4
-rw-r--r--src/gui/gui-window.c118
-rw-r--r--src/gui/gui-window.h6
-rw-r--r--src/plugins/irc/irc-channel.c80
-rw-r--r--src/plugins/irc/irc-channel.h4
-rw-r--r--src/plugins/irc/irc-ignore.c35
-rw-r--r--src/plugins/irc/irc-ignore.h2
-rw-r--r--src/plugins/irc/irc-info.c21
-rw-r--r--src/plugins/irc/irc-nick.c35
-rw-r--r--src/plugins/irc/irc-nick.h2
-rw-r--r--src/plugins/irc/irc-notify.c34
-rw-r--r--src/plugins/irc/irc-notify.h2
-rw-r--r--src/plugins/irc/irc-redirect.c79
-rw-r--r--src/plugins/irc/irc-redirect.h4
-rw-r--r--src/plugins/irc/irc-server.c89
-rw-r--r--src/plugins/irc/irc-server.h2
-rw-r--r--src/plugins/plugin-api.c79
-rw-r--r--src/plugins/plugin-api.h6
-rw-r--r--src/plugins/plugin.c20
-rw-r--r--src/plugins/scripts/lua/weechat-lua-api.c422
-rw-r--r--src/plugins/scripts/perl/weechat-perl-api.c405
-rw-r--r--src/plugins/scripts/python/weechat-python-api.c396
-rw-r--r--src/plugins/scripts/ruby/weechat-ruby-api.c435
-rw-r--r--src/plugins/scripts/tcl/weechat-tcl-api.c670
-rw-r--r--src/plugins/weechat-plugin.h97
77 files changed, 12094 insertions, 281 deletions
diff --git a/ChangeLog b/ChangeLog
index 18edf4e78..1c9fbf2cc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,12 +1,13 @@
WeeChat ChangeLog
=================
Sébastien Helleu <flashcode@flashtux.org>
-v0.3.6-dev, 2011-06-01
+v0.3.6-dev, 2011-06-13
Version 0.3.6 (under dev!)
--------------------------
+* core: add "hdata" (direct access to WeeChat/plugin data)
* core: fix bug with new line inserted at end of each line displayed (set
eat_newline_glitch to 0 if available)
* core: add option "infolists" for command /debug
diff --git a/doc/de/autogen/plugin_api/hdata.txt b/doc/de/autogen/plugin_api/hdata.txt
new file mode 100644
index 000000000..00b2711d3
--- /dev/null
+++ b/doc/de/autogen/plugin_api/hdata.txt
@@ -0,0 +1,659 @@
+[width="100%",cols="^1,^2,5,5,5",options="header"]
+|========================================
+| Erweiterung | Name | Beschreibung | Variables | Lists
+
+| irc | irc_channel | irc channel |
+ 'type' (integer) +
+ 'name' (string) +
+ 'topic' (string) +
+ 'modes' (string) +
+ 'limit' (integer) +
+ 'key' (string) +
+ 'checking_away' (integer) +
+ 'away_message' (string) +
+ 'has_quit_server' (integer) +
+ 'cycle' (integer) +
+ 'part' (integer) +
+ 'display_creation_date' (integer) +
+ 'nick_completion_reset' (integer) +
+ 'pv_remote_nick_color' (string) +
+ 'hook_autorejoin' (pointer) +
+ 'nicks_count' (integer) +
+ 'nicks' (pointer) +
+ 'last_nick' (pointer) +
+ 'nicks_speaking' (pointer) +
+ 'nicks_speaking_time' (pointer) +
+ 'last_nick_speaking_time' (pointer) +
+ 'buffer' (pointer) +
+ 'buffer_as_string' (string) +
+ 'prev_channel' (pointer) +
+ 'next_channel' (pointer) |
+ -
+
+| irc | irc_channel_speaking | irc channel_speaking |
+ 'nick' (string) +
+ 'time_last_message' (time) +
+ 'prev_nick' (pointer) +
+ 'next_nick' (pointer) |
+ -
+
+| irc | irc_ignore | irc ignore |
+ 'number' (integer) +
+ 'mask' (string) +
+ 'regex_mask' (pointer) +
+ 'server' (string) +
+ 'channel' (string) +
+ 'prev_ignore' (pointer) +
+ 'next_ignore' (pointer) |
+ 'irc_ignore_list' +
+ 'last_irc_ignore'
+
+| irc | irc_nick | irc nick |
+ 'name' (string) +
+ 'host' (string) +
+ 'prefixes' (string) +
+ 'prefix' (string) +
+ 'away' (integer) +
+ 'color' (string) +
+ 'prev_nick' (pointer) +
+ 'next_nick' (pointer) |
+ -
+
+| irc | irc_notify | irc notify |
+ 'server' (pointer) +
+ 'nick' (string) +
+ 'check_away' (integer) +
+ 'is_on_server' (integer) +
+ 'away_message' (string) +
+ 'ison_received' (integer) +
+ 'prev_notify' (pointer) +
+ 'next_notify' (pointer) |
+ -
+
+| irc | irc_redirect | irc redirect |
+ 'server' (pointer) +
+ 'pattern' (string) +
+ 'signal' (string) +
+ 'count' (integer) +
+ 'current_count' (integer) +
+ 'string' (string) +
+ 'timeout' (integer) +
+ 'command' (string) +
+ 'start_time' (time) +
+ 'cmd_start' (pointer) +
+ 'cmd_stop' (pointer) +
+ 'cmd_extra' (pointer) +
+ 'cmd_start_received' (integer) +
+ 'cmd_stop_received' (integer) +
+ 'cmd_filter' (pointer) +
+ 'output' (string) +
+ 'output_size' (integer) +
+ 'prev_redirect' (pointer) +
+ 'next_redirect' (pointer) |
+ -
+
+| irc | irc_redirect_pattern | pattern for irc redirect |
+ 'name' (string) +
+ 'temp_pattern' (integer) +
+ 'timeout' (integer) +
+ 'cmd_start' (string) +
+ 'cmd_stop' (string) +
+ 'cmd_extra' (string) +
+ 'prev_redirect' (pointer) +
+ 'next_redirect' (pointer) |
+ 'irc_redirect_patterns' +
+ 'last_irc_redirect_pattern'
+
+| irc | irc_server | irc server |
+ 'name' (string) +
+ 'options' (pointer) +
+ 'temp_server' (integer) +
+ 'reloading_from_config' (integer) +
+ 'reloaded_from_config' (integer) +
+ 'addresses_count' (integer) +
+ 'addresses_array' (pointer) +
+ 'ports_array' (pointer) +
+ 'index_current_address' (integer) +
+ 'current_address' (string) +
+ 'current_ip' (string) +
+ 'current_port' (integer) +
+ 'sock' (integer) +
+ 'hook_connect' (pointer) +
+ 'hook_fd' (pointer) +
+ 'hook_timer_connection' (pointer) +
+ 'hook_timer_sasl' (pointer) +
+ 'is_connected' (integer) +
+ 'ssl_connected' (integer) +
+ 'gnutls_sess' (other) +
+ 'tls_cert' (other) +
+ 'tls_cert_key' (other) +
+ 'unterminated_message' (string) +
+ 'nicks_count' (integer) +
+ 'nicks_array' (pointer) +
+ 'nick_first_tried' (integer) +
+ 'nick' (string) +
+ 'nick_modes' (string) +
+ 'isupport' (string) +
+ 'prefix_modes' (string) +
+ 'prefix_chars' (string) +
+ 'reconnect_delay' (integer) +
+ 'reconnect_start' (time) +
+ 'command_time' (time) +
+ 'reconnect_join' (integer) +
+ 'disable_autojoin' (integer) +
+ 'is_away' (integer) +
+ 'away_message' (string) +
+ 'away_time' (time) +
+ 'lag' (integer) +
+ 'lag_check_time' (other) +
+ 'lag_next_check' (time) +
+ 'lag_last_refresh' (time) +
+ 'cmd_list_regexp' (pointer) +
+ 'last_user_message' (time) +
+ 'last_away_check' (time) +
+ 'outqueue' (pointer) +
+ 'last_outqueue' (pointer) +
+ 'redirects' (pointer) +
+ 'last_redirect' (pointer) +
+ 'notify_list' (pointer) +
+ 'last_notify' (pointer) +
+ 'manual_joins' (pointer) +
+ 'buffer' (pointer) +
+ 'buffer_as_string' (string) +
+ 'channels' (pointer) +
+ 'last_channel' (pointer) +
+ 'prev_server' (pointer) +
+ 'next_server' (pointer) |
+ 'irc_servers' +
+ 'last_irc_server'
+
+| weechat | bar | bar |
+ 'name' (string) +
+ 'options' (pointer) +
+ 'conditions_count' (integer) +
+ 'conditions_array' (pointer) +
+ 'items_count' (integer) +
+ 'items_subcount' (pointer) +
+ 'items_array' (pointer) +
+ 'bar_window' (pointer) +
+ 'bar_refresh_needed' (integer) +
+ 'prev_bar' (pointer) +
+ 'next_bar' (pointer) |
+ 'gui_bars' +
+ 'last_gui_bar'
+
+| weechat | bar_item | bar item |
+ 'plugin' (pointer) +
+ 'name' (string) +
+ 'build_callback' (pointer) +
+ 'build_callback_data' (pointer) +
+ 'prev_item' (pointer) +
+ 'next_item' (pointer) |
+ 'gui_bar_items' +
+ 'last_gui_bar_item'
+
+| weechat | buffer | buffer |
+ 'plugin' (pointer) +
+ 'plugin_name_for_upgrade' (string) +
+ 'merge_for_upgrade' (pointer) +
+ 'number' (integer) +
+ 'layout_number' (integer) +
+ 'layout_applied' (integer) +
+ 'name' (string) +
+ 'short_name' (string) +
+ 'type' (integer) +
+ 'notify' (integer) +
+ 'num_displayed' (integer) +
+ 'active' (integer) +
+ 'print_hooks_enabled' (integer) +
+ 'close_callback' (pointer) +
+ 'close_callback_data' (pointer) +
+ 'title' (string) +
+ 'own_lines' (pointer) +
+ 'mixed_lines' (pointer) +
+ 'lines' (pointer) +
+ 'time_for_each_line' (integer) +
+ 'chat_refresh_needed' (integer) +
+ 'nicklist' (integer) +
+ 'nicklist_case_sensitive' (integer) +
+ 'nicklist_root' (pointer) +
+ 'nicklist_max_length' (integer) +
+ 'nicklist_display_groups' (integer) +
+ 'nicklist_visible_count' (integer) +
+ 'input' (integer) +
+ 'input_callback' (pointer) +
+ 'input_callback_data' (pointer) +
+ 'input_get_unknown_commands' (integer) +
+ 'input_buffer' (string) +
+ 'input_buffer_alloc' (integer) +
+ 'input_buffer_size' (integer) +
+ 'input_buffer_length' (integer) +
+ 'input_buffer_pos' (integer) +
+ 'input_buffer_1st_display' (integer) +
+ 'input_undo_snap' (pointer) +
+ 'input_undo' (pointer) +
+ 'last_input_undo' (pointer) +
+ 'ptr_input_undo' (pointer) +
+ 'input_undo_count' (integer) +
+ 'completion' (pointer) +
+ 'history' (pointer) +
+ 'last_history' (pointer) +
+ 'ptr_history' (pointer) +
+ 'num_history' (integer) +
+ 'text_search' (integer) +
+ 'text_search_exact' (integer) +
+ 'text_search_found' (integer) +
+ 'text_search_input' (string) +
+ 'highlight_words' (string) +
+ 'highlight_tags' (string) +
+ 'highlight_tags_count' (integer) +
+ 'highlight_tags_array' (pointer) +
+ 'hotlist_max_level_nicks' (pointer) +
+ 'keys' (pointer) +
+ 'last_key' (pointer) +
+ 'keys_count' (integer) +
+ 'local_variables' (pointer) +
+ 'prev_buffer' (pointer) +
+ 'next_buffer' (pointer) |
+ 'gui_buffers' +
+ 'last_gui_buffer'
+
+| weechat | completion | completion |
+ 'buffer' (pointer) +
+ 'context' (integer) +
+ 'base_command' (string) +
+ 'base_command_arg_index' (integer) +
+ 'base_word' (string) +
+ 'base_word_pos' (integer) +
+ 'position' (integer) +
+ 'args' (string) +
+ 'direction' (integer) +
+ 'add_space' (integer) +
+ 'force_partial_completion' (integer) +
+ 'completion_list' (pointer) +
+ 'word_found' (string) +
+ 'word_found_is_nick' (integer) +
+ 'position_replace' (integer) +
+ 'diff_size' (integer) +
+ 'diff_length' (integer) +
+ 'partial_completion_list' (pointer) +
+ 'last_partial_completion' (pointer) |
+ -
+
+| weechat | completion_partial | partial completion |
+ 'word' (string) +
+ 'count' (integer) +
+ 'prev_item' (pointer) +
+ 'next_item' (pointer) |
+ -
+
+| weechat | config_file | config file |
+ 'plugin' (pointer) +
+ 'name' (string) +
+ 'filename' (string) +
+ 'file' (pointer) +
+ 'callback_reload' (pointer) +
+ 'callback_reload_data' (pointer) +
+ 'sections' (pointer) +
+ 'last_section' (pointer) +
+ 'prev_config' (pointer) +
+ 'next_config' (pointer) |
+ 'config_files' +
+ 'last_config_file'
+
+| weechat | config_option | config option |
+ 'config_file' (pointer) +
+ 'section' (pointer) +
+ 'name' (string) +
+ 'type' (integer) +
+ 'description' (string) +
+ 'string_values' (pointer) +
+ 'min' (integer) +
+ 'max' (integer) +
+ 'default_value' (pointer) +
+ 'value' (pointer) +
+ 'null_value_allowed' (integer) +
+ 'callback_check_value' (pointer) +
+ 'callback_check_value_data' (pointer) +
+ 'callback_change' (pointer) +
+ 'callback_change_data' (pointer) +
+ 'callback_delete' (pointer) +
+ 'callback_delete_data' (pointer) +
+ 'loaded' (integer) +
+ 'prev_option' (pointer) +
+ 'next_option' (pointer) |
+ -
+
+| weechat | config_section | config section |
+ 'config_file' (pointer) +
+ 'name' (string) +
+ 'user_can_add_options' (integer) +
+ 'user_can_delete_options' (integer) +
+ 'callback_read' (pointer) +
+ 'callback_read_data' (pointer) +
+ 'callback_write' (pointer) +
+ 'callback_write_data' (pointer) +
+ 'callback_write_default' (pointer) +
+ 'callback_write_default_data' (pointer) +
+ 'callback_create_option' (pointer) +
+ 'callback_create_option_data' (pointer) +
+ 'callback_delete_option' (pointer) +
+ 'callback_delete_option_data' (pointer) +
+ 'options' (pointer) +
+ 'last_option' (pointer) +
+ 'prev_section' (pointer) +
+ 'next_section' (pointer) |
+ -
+
+| weechat | filter | filter |
+ 'enabled' (integer) +
+ 'name' (string) +
+ 'buffer_name' (string) +
+ 'num_buffers' (integer) +
+ 'buffers' (pointer) +
+ 'tags' (string) +
+ 'tags_count' (integer) +
+ 'tags_array' (pointer) +
+ 'regex' (string) +
+ 'regex_prefix' (pointer) +
+ 'regex_message' (pointer) +
+ 'prev_filter' (pointer) +
+ 'next_filter' (pointer) |
+ 'gui_filters' +
+ 'last_gui_filter'
+
+| weechat | history | history of commands in buffer |
+ 'text' (string) +
+ 'next_history' (pointer) +
+ 'prev_history' (pointer) |
+ -
+
+| weechat | hook | hook (variables common to all hook types) |
+ 'plugin' (pointer) +
+ 'type' (integer) +
+ 'deleted' (integer) +
+ 'running' (integer) +
+ 'priority' (integer) +
+ 'callback_data' (pointer) +
+ 'hook_data' (pointer) +
+ 'prev_hook' (pointer) +
+ 'next_hook' (pointer) |
+ -
+
+| weechat | hook_command | hook of type "command" |
+ 'callback' (pointer) +
+ 'command' (string) +
+ 'description' (string) +
+ 'args' (string) +
+ 'args_description' (string) +
+ 'completion' (string) +
+ 'cplt_num_templates' (integer) +
+ 'cplt_templates' (pointer) +
+ 'cplt_templates_static' (pointer) +
+ 'cplt_template_num_args' (pointer) +
+ 'cplt_template_args' (pointer) +
+ 'cplt_template_num_args_concat' (integer) +
+ 'cplt_template_args_concat' (pointer) |
+ 'last_weechat_hook_command' +
+ 'weechat_hooks_command'
+
+| weechat | hook_command_run | hook of type "command_run" |
+ 'callback' (pointer) +
+ 'command' (string) |
+ 'last_weechat_hook_command_run' +
+ 'weechat_hooks_command_run'
+
+| weechat | hook_completion | hook of type "completion" |
+ 'callback' (pointer) +
+ 'completion_item' (string) +
+ 'description' (string) |
+ 'last_weechat_hook_completion' +
+ 'weechat_hooks_completion'
+
+| weechat | hook_config | hook of type "config" |
+ 'callback' (pointer) +
+ 'option' (string) |
+ 'last_weechat_hook_config' +
+ 'weechat_hooks_config'
+
+| weechat | hook_connect | hook of type "connect" |
+ 'callback' (pointer) +
+ 'proxy' (string) +
+ 'address' (string) +
+ 'port' (integer) +
+ 'sock' (integer) +
+ 'ipv6' (integer) +
+ 'gnutls_sess' (pointer) +
+ 'gnutls_cb' (pointer) +
+ 'gnutls_dhkey_size' (integer) +
+ 'gnutls_priorities' (string) +
+ 'local_hostname' (string) +
+ 'child_read' (integer) +
+ 'child_write' (integer) +
+ 'child_pid' (other) +
+ 'hook_fd' (pointer) +
+ 'handshake_hook_fd' (pointer) +
+ 'handshake_hook_timer' (pointer) +
+ 'handshake_fd_flags' (integer) +
+ 'handshake_ip_address' (string) |
+ 'last_weechat_hook_connect' +
+ 'weechat_hooks_connect'
+
+| weechat | hook_fd | hook of type "fd" |
+ 'callback' (pointer) +
+ 'fd' (integer) +
+ 'flags' (integer) |
+ 'last_weechat_hook_fd' +
+ 'weechat_hooks_fd'
+
+| weechat | hook_hdata | hook of type "hdata" |
+ 'callback' (pointer) +
+ 'hdata_name' (string) +
+ 'description' (string) |
+ 'last_weechat_hook_hdata' +
+ 'weechat_hooks_hdata'
+
+| weechat | hook_hsignal | hook of type "hsignal" |
+ 'callback' (pointer) +
+ 'signal' (string) |
+ 'last_weechat_hook_hsignal' +
+ 'weechat_hooks_hsignal'
+
+| weechat | hook_info | hook of type "info" |
+ 'callback' (pointer) +
+ 'info_name' (string) +
+ 'description' (string) +
+ 'args_description' (string) |
+ 'last_weechat_hook_info' +
+ 'weechat_hooks_info'
+
+| weechat | hook_info_hashtable | hook of type "info_hashtable" |
+ 'callback' (pointer) +
+ 'info_name' (string) +
+ 'description' (string) +
+ 'args_description' (string) +
+ 'output_description' (string) |
+ 'last_weechat_hook_info_hashtable' +
+ 'weechat_hooks_info_hashtable'
+
+| weechat | hook_infolist | hook of type "infolist" |
+ 'callback' (pointer) +
+ 'infolist_name' (string) +
+ 'description' (string) +
+ 'pointer_description' (string) +
+ 'args_description' (string) |
+ 'last_weechat_hook_infolist' +
+ 'weechat_hooks_infolist'
+
+| weechat | hook_modifier | hook of type "modifier" |
+ 'callback' (pointer) +
+ 'modifier' (string) |
+ 'last_weechat_hook_modifier' +
+ 'weechat_hooks_modifier'
+
+| weechat | hook_print | hook of type "print" |
+ 'callback' (pointer) +
+ 'buffer' (pointer) +
+ 'tags_count' (integer) +
+ 'tags_array' (pointer) +
+ 'message' (string) +
+ 'strip_colors' (integer) |
+ 'last_weechat_hook_print' +
+ 'weechat_hooks_print'
+
+| weechat | hook_process | hook of type "process" |
+ 'callback' (pointer) +
+ 'command' (string) +
+ 'timeout' (long) +
+ 'child_read' (pointer) +
+ 'child_write' (pointer) +
+ 'child_pid' (other) +
+ 'hook_fd' (pointer) +
+ 'hook_timer' (pointer) +
+ 'buffer' (pointer) +
+ 'buffer_size' (pointer) |
+ 'last_weechat_hook_process' +
+ 'weechat_hooks_process'
+
+| weechat | hook_signal | hook of type "signal" |
+ 'callback' (pointer) +
+ 'signal' (string) |
+ 'last_weechat_hook_signal' +
+ 'weechat_hooks_signal'
+
+| weechat | hook_timer | hook of type "timer" |
+ 'callback' (pointer) +
+ 'interval' (long) +
+ 'align_second' (integer) +
+ 'remaining_calls' (integer) +
+ 'last_exec' (other) +
+ 'next_exec' (other) |
+ 'last_weechat_hook_timer' +
+ 'weechat_hooks_timer'
+
+| weechat | input_undo | undo for input line |
+ 'data' (string) +
+ 'pos' (integer) +
+ 'prev_undo' (pointer) +
+ 'next_undo' (pointer) |
+ -
+
+| weechat | key | key |
+ 'key' (string) +
+ 'command' (string) +
+ 'prev_key' (pointer) +
+ 'next_key' (pointer) |
+ 'gui_default_keys' +
+ 'gui_keys' +
+ 'last_gui_default_key' +
+ 'last_gui_key'
+
+| weechat | line | line |
+ 'data' (pointer) +
+ 'prev_line' (pointer) +
+ 'next_line' (pointer) |
+ -
+
+| weechat | line_data | line data |
+ 'buffer' (pointer) +
+ 'y' (integer) +
+ 'date' (time) +
+ 'date_printed' (time) +
+ 'str_time' (string) +
+ 'tags_count' (integer) +
+ 'tags_array' (pointer) +
+ 'displayed' (integer) +
+ 'highlight' (integer) +
+ 'refresh_needed' (integer) +
+ 'prefix' (string) +
+ 'prefix_length' (integer) +
+ 'message' (string) |
+ -
+
+| weechat | lines | lines |
+ 'first_line' (pointer) +
+ 'last_line' (pointer) +
+ 'last_read_line' (pointer) +
+ 'lines_count' (integer) +
+ 'first_line_not_read' (integer) +
+ 'lines_hidden' (integer) +
+ 'buffer_max_length' (integer) +
+ 'prefix_max_length' (integer) |
+ -
+
+| weechat | nick | nick in nicklist |
+ 'group' (pointer) +
+ 'name' (string) +
+ 'color' (string) +
+ 'prefix' (string) +
+ 'prefix_color' (string) +
+ 'visible' (integer) +
+ 'prev_nick' (pointer) +
+ 'next_nick' (pointer) |
+ -
+
+| weechat | nick_group | group in nicklist |
+ 'name' (string) +
+ 'color' (string) +
+ 'visible' (integer) +
+ 'level' (integer) +
+ 'parent' (pointer) +
+ 'childs' (pointer) +
+ 'last_child' (pointer) +
+ 'nicks' (pointer) +
+ 'last_nick' (pointer) +
+ 'prev_group' (pointer) +
+ 'next_group' (pointer) |
+ -
+
+| weechat | window | window |
+ 'win_x' (integer) +
+ 'win_y' (integer) +
+ 'win_width' (integer) +
+ 'win_height' (integer) +
+ 'win_width_pct' (integer) +
+ 'win_height_pct' (integer) +
+ 'win_chat_x' (integer) +
+ 'win_chat_y' (integer) +
+ 'win_chat_width' (integer) +
+ 'win_chat_height' (integer) +
+ 'win_chat_cursor_x' (integer) +
+ 'win_chat_cursor_y' (integer) +
+ 'bar_windows' (pointer) +
+ 'last_bar_window' (pointer) +
+ 'refresh_needed' (integer) +
+ 'gui_objects' (pointer) +
+ 'buffer' (pointer) +
+ 'layout_plugin_name' (string) +
+ 'layout_buffer_name' (string) +
+ 'scroll' (pointer) +
+ 'ptr_tree' (pointer) +
+ 'prev_window' (pointer) +
+ 'next_window' (pointer) |
+ 'gui_current_window' +
+ 'gui_windows' +
+ 'last_gui_window'
+
+| weechat | window_scroll | scroll info in window |
+ 'buffer' (pointer) +
+ 'first_line_displayed' (integer) +
+ 'start_line' (pointer) +
+ 'start_line_pos' (integer) +
+ 'scrolling' (integer) +
+ 'start_col' (integer) +
+ 'lines_after' (integer) +
+ 'reset_allowed' (integer) +
+ 'prev_scroll' (pointer) +
+ 'next_scroll' (pointer) |
+ -
+
+| weechat | window_tree | tree of windows |
+ 'parent_node' (pointer) +
+ 'split_pct' (integer) +
+ 'split_horizontal' (integer) +
+ 'child1' (pointer) +
+ 'child2' (pointer) +
+ 'window' (pointer) |
+ 'gui_windows_tree'
+
+|========================================
diff --git a/doc/de/autogen/user/weechat_commands.txt b/doc/de/autogen/user/weechat_commands.txt
index 4e47e76f6..c999e32ba 100644
--- a/doc/de/autogen/user/weechat_commands.txt
+++ b/doc/de/autogen/user/weechat_commands.txt
@@ -145,7 +145,7 @@ Erweiterung: Name der Erweiterung ('weechat' für interne WeeChat Befehle)
/debug list
set <plugin> <level>
dump [<plugin>]
- buffer|color|infolists|memory|term|windows
+ buffer|color|hdata|infolists|memory|term|windows
list: list plugins with debug levels
set: set debug level for plugin
@@ -154,6 +154,7 @@ Erweiterung: Name der Erweiterung ('weechat' für interne WeeChat Befehle)
dump: save memory dump in WeeChat log file (same dump is written when WeeChat crashes)
buffer: dump buffer content with hexadecimal values in log file
color: display infos about current color pairs
+ hdata: display infos about hdata
infolists: display infos about infolists
memory: display infos about memory usage
term: display infos about terminal
diff --git a/doc/docgen.pl b/doc/docgen.pl
index 9b9d15658..47627137c 100644
--- a/doc/docgen.pl
+++ b/doc/docgen.pl
@@ -42,7 +42,7 @@ my $version = "0.1";
# -------------------------------[ config ]------------------------------------
-# default path where doc XML files will be written (should be doc/ in sources
+# default path where doc files will be written (should be doc/ in sources
# package tree)
# path must have subdirectories with languages and autogen directory:
# path
@@ -53,7 +53,7 @@ my $version = "0.1";
# ...
my $default_path = "~/src/weechat/doc";
-# list of locales for which we want to build XML doc files to include
+# list of locales for which we want to build doc files to include
my @all_locale_list = qw(en_US fr_FR it_IT de_DE);
# all commands/options/.. of following plugins will produce a file
@@ -101,6 +101,9 @@ my @ignore_infos_hashtable_plugins = ();
# infolists to ignore
my @ignore_infolists_plugins = ();
+# hdata to ignore
+my @ignore_hdata_plugins = ();
+
# completions to ignore
my @ignore_completions_plugins = ();
my @ignore_completions_items = ("docgen.*",
@@ -291,6 +294,78 @@ sub get_infolists
return %infolists;
}
+# get list of hdata hooked by plugins in a hash with 3 indexes: plugin, name, xxx
+sub get_hdata
+{
+ my %hdata;
+
+ # get hdata hooked
+ my $infolist = weechat::infolist_get("hook", "", "hdata");
+ while (weechat::infolist_next($infolist))
+ {
+ my $hdata_name = weechat::infolist_string($infolist, "hdata_name");
+ my $plugin = weechat::infolist_string($infolist, "plugin_name");
+ $plugin = "weechat" if ($plugin eq "");
+
+ # check if hdata is ignored or not
+ my $ignore = 0;
+ foreach my $mask (@ignore_hdata_plugins)
+ {
+ $ignore = 1 if ($plugin =~ /${mask}/);
+ }
+
+ if ($ignore ne 1)
+ {
+ $hdata{$plugin}{$hdata_name}{"description"} = weechat::infolist_string($infolist, "description");
+
+ my $vars = "";
+ my $lists = "";
+ my $ptr_hdata = weechat::hdata_get($hdata_name);
+ if ($ptr_hdata ne "")
+ {
+ my $str = weechat::hdata_get_string($ptr_hdata, "var_keys_values");
+ my @items = split(/,/, $str);
+ my %hdata2;
+ foreach my $item (@items)
+ {
+ my ($key, $value) = split(/:/, $item);
+ my $type = int($value) >> 16;
+ my $offset = int($value) & 0xFFFF;
+ my $stroffset = sprintf("%08d", $offset);
+ $hdata2{$stroffset} = "'".$key."' (".weechat::hdata_get_var_type_string($ptr_hdata, $key).")";
+ }
+ foreach my $offset (sort keys %hdata2)
+ {
+ $vars .= " +\n" if ($vars ne "");
+ $vars .= " ".$hdata2{$offset};
+ }
+ $hdata{$plugin}{$hdata_name}{"vars"} = "\n".$vars;
+
+ $str = weechat::hdata_get_string($ptr_hdata, "list_keys");
+ if ($str ne "")
+ {
+ my @items = split(/,/, $str);
+ @items = sort(@items);
+ foreach my $item (@items)
+ {
+ $lists .= " +\n" if ($lists ne "");
+ $lists .= " '".$item."'";
+ }
+ $lists = "\n".$lists;
+ }
+ else
+ {
+ $lists = "\n -";
+ }
+ $hdata{$plugin}{$hdata_name}{"lists"} = $lists;
+ }
+ }
+ }
+ weechat::infolist_free($infolist);
+
+ return %hdata;
+}
+
# get list of completions hooked by plugins in a hash with 3 indexes: plugin, item, xxx
sub get_completions
{
@@ -339,7 +414,7 @@ sub escape_table
return $str;
}
-# build XML doc files (command /docgen)
+# build doc files (command /docgen)
sub docgen
{
my ($data, $buffer, $args) = ($_[0], $_[1], $_[2]);
@@ -352,6 +427,7 @@ sub docgen
my %plugin_infos = get_infos();
my %plugin_infos_hashtable = get_infos_hashtable();
my %plugin_infolists = get_infolists();
+ my %plugin_hdata = get_hdata();
my %plugin_completions = get_completions();
# get path and replace ~ by home if needed
@@ -377,6 +453,8 @@ sub docgen
my $num_files_infos_hashtable_updated = 0;
my $num_files_infolists = 0;
my $num_files_infolists_updated = 0;
+ my $num_files_hdata = 0;
+ my $num_files_hdata_updated = 0;
my $num_files_completions = 0;
my $num_files_completions_updated = 0;
@@ -678,6 +756,50 @@ sub docgen
weechat::print("", weechat::prefix("error")."docgen error: unable to write file '$filename'");
}
+ # write hdata hooked
+ $filename = $dir."plugin_api/hdata.txt";
+ if (open(FILE, ">".$filename.".tmp"))
+ {
+ print FILE "[width=\"100%\",cols=\"^1,^2,5,5,5\",options=\"header\"]\n";
+ print FILE "|========================================\n";
+ print FILE "| ".weechat_gettext("Plugin")." | ".weechat_gettext("Name")
+ ." | ".weechat_gettext("Description")." | ".weechat_gettext("Variables")
+ ." | ".weechat_gettext("Lists")."\n\n";
+ foreach my $plugin (sort keys %plugin_hdata)
+ {
+ foreach my $hdata (sort keys %{$plugin_hdata{$plugin}})
+ {
+ my $description = $plugin_hdata{$plugin}{$hdata}{"description"};
+ $description = $d->get($description) if ($description ne "");
+ my $vars = $plugin_hdata{$plugin}{$hdata}{"vars"};
+ my $lists = $plugin_hdata{$plugin}{$hdata}{"lists"};
+ print FILE "| ".escape_table($plugin)." | ".escape_table($hdata)
+ ." | ".escape_table($description)." | ".escape_table($vars)
+ ." | ".escape_table($lists)."\n\n";
+ }
+ }
+ print FILE "|========================================\n";
+ #weechat::print("", "docgen: file ok: '$filename'");
+ my $rc = system("diff ".$filename." ".$filename.".tmp >/dev/null 2>&1");
+ if ($rc != 0)
+ {
+ system("mv -f ".$filename.".tmp ".$filename);
+ $num_files_updated++;
+ $num_files_hdata_updated++;
+ }
+ else
+ {
+ system("rm ".$filename.".tmp");
+ }
+ $num_files++;
+ $num_files_hdata++;
+ close(FILE);
+ }
+ else
+ {
+ weechat::print("", weechat::prefix("error")."docgen error: unable to write file '$filename'");
+ }
+
# write completions hooked
$filename = $dir."plugin_api/completions.txt";
if (open(FILE, ">".$filename.".tmp"))
@@ -725,27 +847,31 @@ sub docgen
}
my $total_files = $num_files_commands + $num_files_options
+ $num_files_infos + $num_files_infos_hashtable
- + $num_files_infolists + $num_files_completions;
+ + $num_files_infolists + $num_files_hdata + $num_files_completions;
my $total_files_updated = $num_files_commands_updated
+ $num_files_options_updated + $num_files_infos_updated
+ $num_files_infos_hashtable_updated + $num_files_infolists_updated
- + $num_files_completions_updated;
- weechat::print("", "docgen: ".$locale.": ".$total_files." files ("
- .$num_files_commands." cmd, "
- .$num_files_options." opt, "
- .$num_files_infos." infos, "
- .$num_files_infos." infos (hashtable), "
- .$num_files_infolists." infolists, "
- .$num_files_completions." complt) -- "
- .$total_files_updated." updated ("
- .$num_files_commands_updated." cmd, "
- .$num_files_options_updated." opt, "
- .$num_files_infos_updated." infos, "
- .$num_files_infos_hashtable_updated." infos (hashtable), "
- .$num_files_infolists_updated." infolists, "
- .$num_files_completions_updated." complt)");
+ + $num_files_hdata_updated + $num_files_completions_updated;
+ weechat::print("",
+ sprintf ("docgen: %s: %3d files (%2d cmd, %2d opt, %2d infos, "
+ ."%2d infos_hash, %2d infolists, %2d hdata, "
+ ."%2d complt)",
+ $locale, $total_files, $num_files_commands,
+ $num_files_options, $num_files_infos, $num_files_infos,
+ $num_files_infolists, $num_files_hdata,
+ $num_files_completions));
+ weechat::print("",
+ sprintf (" %3d updated (%2d cmd, %2d opt, %2d infos, "
+ ."%2d infos_hash, %2d infolists, %2d hdata, "
+ ."%2d complt)",
+ $total_files_updated, $num_files_commands_updated,
+ $num_files_options_updated, $num_files_infos_updated,
+ $num_files_infos_updated, $num_files_infolists_updated,
+ $num_files_hdata_updated, $num_files_completions_updated));
}
- weechat::print("", "docgen: total: ".$num_files." files (".$num_files_updated." updated)");
+ weechat::print("",
+ sprintf ("docgen: total: %d files, %d updated",
+ $num_files, $num_files_updated));
setlocale(LC_MESSAGES, $old_locale);
diff --git a/doc/en/autogen/plugin_api/hdata.txt b/doc/en/autogen/plugin_api/hdata.txt
new file mode 100644
index 000000000..e6a8bcc54
--- /dev/null
+++ b/doc/en/autogen/plugin_api/hdata.txt
@@ -0,0 +1,659 @@
+[width="100%",cols="^1,^2,5,5,5",options="header"]
+|========================================
+| Plugin | Name | Description | Variables | Lists
+
+| irc | irc_channel | irc channel |
+ 'type' (integer) +
+ 'name' (string) +
+ 'topic' (string) +
+ 'modes' (string) +
+ 'limit' (integer) +
+ 'key' (string) +
+ 'checking_away' (integer) +
+ 'away_message' (string) +
+ 'has_quit_server' (integer) +
+ 'cycle' (integer) +
+ 'part' (integer) +
+ 'display_creation_date' (integer) +
+ 'nick_completion_reset' (integer) +
+ 'pv_remote_nick_color' (string) +
+ 'hook_autorejoin' (pointer) +
+ 'nicks_count' (integer) +
+ 'nicks' (pointer) +
+ 'last_nick' (pointer) +
+ 'nicks_speaking' (pointer) +
+ 'nicks_speaking_time' (pointer) +
+ 'last_nick_speaking_time' (pointer) +
+ 'buffer' (pointer) +
+ 'buffer_as_string' (string) +
+ 'prev_channel' (pointer) +
+ 'next_channel' (pointer) |
+ -
+
+| irc | irc_channel_speaking | irc channel_speaking |
+ 'nick' (string) +
+ 'time_last_message' (time) +
+ 'prev_nick' (pointer) +
+ 'next_nick' (pointer) |
+ -
+
+| irc | irc_ignore | irc ignore |
+ 'number' (integer) +
+ 'mask' (string) +
+ 'regex_mask' (pointer) +
+ 'server' (string) +
+ 'channel' (string) +
+ 'prev_ignore' (pointer) +
+ 'next_ignore' (pointer) |
+ 'irc_ignore_list' +
+ 'last_irc_ignore'
+
+| irc | irc_nick | irc nick |
+ 'name' (string) +
+ 'host' (string) +
+ 'prefixes' (string) +
+ 'prefix' (string) +
+ 'away' (integer) +
+ 'color' (string) +
+ 'prev_nick' (pointer) +
+ 'next_nick' (pointer) |
+ -
+
+| irc | irc_notify | irc notify |
+ 'server' (pointer) +
+ 'nick' (string) +
+ 'check_away' (integer) +
+ 'is_on_server' (integer) +
+ 'away_message' (string) +
+ 'ison_received' (integer) +
+ 'prev_notify' (pointer) +
+ 'next_notify' (pointer) |
+ -
+
+| irc | irc_redirect | irc redirect |
+ 'server' (pointer) +
+ 'pattern' (string) +
+ 'signal' (string) +
+ 'count' (integer) +
+ 'current_count' (integer) +
+ 'string' (string) +
+ 'timeout' (integer) +
+ 'command' (string) +
+ 'start_time' (time) +
+ 'cmd_start' (pointer) +
+ 'cmd_stop' (pointer) +
+ 'cmd_extra' (pointer) +
+ 'cmd_start_received' (integer) +
+ 'cmd_stop_received' (integer) +
+ 'cmd_filter' (pointer) +
+ 'output' (string) +
+ 'output_size' (integer) +
+ 'prev_redirect' (pointer) +
+ 'next_redirect' (pointer) |
+ -
+
+| irc | irc_redirect_pattern | pattern for irc redirect |
+ 'name' (string) +
+ 'temp_pattern' (integer) +
+ 'timeout' (integer) +
+ 'cmd_start' (string) +
+ 'cmd_stop' (string) +
+ 'cmd_extra' (string) +
+ 'prev_redirect' (pointer) +
+ 'next_redirect' (pointer) |
+ 'irc_redirect_patterns' +
+ 'last_irc_redirect_pattern'
+
+| irc | irc_server | irc server |
+ 'name' (string) +
+ 'options' (pointer) +
+ 'temp_server' (integer) +
+ 'reloading_from_config' (integer) +
+ 'reloaded_from_config' (integer) +
+ 'addresses_count' (integer) +
+ 'addresses_array' (pointer) +
+ 'ports_array' (pointer) +
+ 'index_current_address' (integer) +
+ 'current_address' (string) +
+ 'current_ip' (string) +
+ 'current_port' (integer) +
+ 'sock' (integer) +
+ 'hook_connect' (pointer) +
+ 'hook_fd' (pointer) +
+ 'hook_timer_connection' (pointer) +
+ 'hook_timer_sasl' (pointer) +
+ 'is_connected' (integer) +
+ 'ssl_connected' (integer) +
+ 'gnutls_sess' (other) +
+ 'tls_cert' (other) +
+ 'tls_cert_key' (other) +
+ 'unterminated_message' (string) +
+ 'nicks_count' (integer) +
+ 'nicks_array' (pointer) +
+ 'nick_first_tried' (integer) +
+ 'nick' (string) +
+ 'nick_modes' (string) +
+ 'isupport' (string) +
+ 'prefix_modes' (string) +
+ 'prefix_chars' (string) +
+ 'reconnect_delay' (integer) +
+ 'reconnect_start' (time) +
+ 'command_time' (time) +
+ 'reconnect_join' (integer) +
+ 'disable_autojoin' (integer) +
+ 'is_away' (integer) +
+ 'away_message' (string) +
+ 'away_time' (time) +
+ 'lag' (integer) +
+ 'lag_check_time' (other) +
+ 'lag_next_check' (time) +
+ 'lag_last_refresh' (time) +
+ 'cmd_list_regexp' (pointer) +
+ 'last_user_message' (time) +
+ 'last_away_check' (time) +
+ 'outqueue' (pointer) +
+ 'last_outqueue' (pointer) +
+ 'redirects' (pointer) +
+ 'last_redirect' (pointer) +
+ 'notify_list' (pointer) +
+ 'last_notify' (pointer) +
+ 'manual_joins' (pointer) +
+ 'buffer' (pointer) +
+ 'buffer_as_string' (string) +
+ 'channels' (pointer) +
+ 'last_channel' (pointer) +
+ 'prev_server' (pointer) +
+ 'next_server' (pointer) |
+ 'irc_servers' +
+ 'last_irc_server'
+
+| weechat | bar | bar |
+ 'name' (string) +
+ 'options' (pointer) +
+ 'conditions_count' (integer) +
+ 'conditions_array' (pointer) +
+ 'items_count' (integer) +
+ 'items_subcount' (pointer) +
+ 'items_array' (pointer) +
+ 'bar_window' (pointer) +
+ 'bar_refresh_needed' (integer) +
+ 'prev_bar' (pointer) +
+ 'next_bar' (pointer) |
+ 'gui_bars' +
+ 'last_gui_bar'
+
+| weechat | bar_item | bar item |
+ 'plugin' (pointer) +
+ 'name' (string) +
+ 'build_callback' (pointer) +
+ 'build_callback_data' (pointer) +
+ 'prev_item' (pointer) +
+ 'next_item' (pointer) |
+ 'gui_bar_items' +
+ 'last_gui_bar_item'
+
+| weechat | buffer | buffer |
+ 'plugin' (pointer) +
+ 'plugin_name_for_upgrade' (string) +
+ 'merge_for_upgrade' (pointer) +
+ 'number' (integer) +
+ 'layout_number' (integer) +
+ 'layout_applied' (integer) +
+ 'name' (string) +
+ 'short_name' (string) +
+ 'type' (integer) +
+ 'notify' (integer) +
+ 'num_displayed' (integer) +
+ 'active' (integer) +
+ 'print_hooks_enabled' (integer) +
+ 'close_callback' (pointer) +
+ 'close_callback_data' (pointer) +
+ 'title' (string) +
+ 'own_lines' (pointer) +
+ 'mixed_lines' (pointer) +
+ 'lines' (pointer) +
+ 'time_for_each_line' (integer) +
+ 'chat_refresh_needed' (integer) +
+ 'nicklist' (integer) +
+ 'nicklist_case_sensitive' (integer) +
+ 'nicklist_root' (pointer) +
+ 'nicklist_max_length' (integer) +
+ 'nicklist_display_groups' (integer) +
+ 'nicklist_visible_count' (integer) +
+ 'input' (integer) +
+ 'input_callback' (pointer) +
+ 'input_callback_data' (pointer) +
+ 'input_get_unknown_commands' (integer) +
+ 'input_buffer' (string) +
+ 'input_buffer_alloc' (integer) +
+ 'input_buffer_size' (integer) +
+ 'input_buffer_length' (integer) +
+ 'input_buffer_pos' (integer) +
+ 'input_buffer_1st_display' (integer) +
+ 'input_undo_snap' (pointer) +
+ 'input_undo' (pointer) +
+ 'last_input_undo' (pointer) +
+ 'ptr_input_undo' (pointer) +
+ 'input_undo_count' (integer) +
+ 'completion' (pointer) +
+ 'history' (pointer) +
+ 'last_history' (pointer) +
+ 'ptr_history' (pointer) +
+ 'num_history' (integer) +
+ 'text_search' (integer) +
+ 'text_search_exact' (integer) +
+ 'text_search_found' (integer) +
+ 'text_search_input' (string) +
+ 'highlight_words' (string) +
+ 'highlight_tags' (string) +
+ 'highlight_tags_count' (integer) +
+ 'highlight_tags_array' (pointer) +
+ 'hotlist_max_level_nicks' (pointer) +
+ 'keys' (pointer) +
+ 'last_key' (pointer) +
+ 'keys_count' (integer) +
+ 'local_variables' (pointer) +
+ 'prev_buffer' (pointer) +
+ 'next_buffer' (pointer) |
+ 'gui_buffers' +
+ 'last_gui_buffer'
+
+| weechat | completion | completion |
+ 'buffer' (pointer) +
+ 'context' (integer) +
+ 'base_command' (string) +
+ 'base_command_arg_index' (integer) +
+ 'base_word' (string) +
+ 'base_word_pos' (integer) +
+ 'position' (integer) +
+ 'args' (string) +
+ 'direction' (integer) +
+ 'add_space' (integer) +
+ 'force_partial_completion' (integer) +
+ 'completion_list' (pointer) +
+ 'word_found' (string) +
+ 'word_found_is_nick' (integer) +
+ 'position_replace' (integer) +
+ 'diff_size' (integer) +
+ 'diff_length' (integer) +
+ 'partial_completion_list' (pointer) +
+ 'last_partial_completion' (pointer) |
+ -
+
+| weechat | completion_partial | partial completion |
+ 'word' (string) +
+ 'count' (integer) +
+ 'prev_item' (pointer) +
+ 'next_item' (pointer) |
+ -
+
+| weechat | config_file | config file |
+ 'plugin' (pointer) +
+ 'name' (string) +
+ 'filename' (string) +
+ 'file' (pointer) +
+ 'callback_reload' (pointer) +
+ 'callback_reload_data' (pointer) +
+ 'sections' (pointer) +
+ 'last_section' (pointer) +
+ 'prev_config' (pointer) +
+ 'next_config' (pointer) |
+ 'config_files' +
+ 'last_config_file'
+
+| weechat | config_option | config option |
+ 'config_file' (pointer) +
+ 'section' (pointer) +
+ 'name' (string) +
+ 'type' (integer) +
+ 'description' (string) +
+ 'string_values' (pointer) +
+ 'min' (integer) +
+ 'max' (integer) +
+ 'default_value' (pointer) +
+ 'value' (pointer) +
+ 'null_value_allowed' (integer) +
+ 'callback_check_value' (pointer) +
+ 'callback_check_value_data' (pointer) +
+ 'callback_change' (pointer) +
+ 'callback_change_data' (pointer) +
+ 'callback_delete' (pointer) +
+ 'callback_delete_data' (pointer) +
+ 'loaded' (integer) +
+ 'prev_option' (pointer) +
+ 'next_option' (pointer) |
+ -
+
+| weechat | config_section | config section |
+ 'config_file' (pointer) +
+ 'name' (string) +
+ 'user_can_add_options' (integer) +
+ 'user_can_delete_options' (integer) +
+ 'callback_read' (pointer) +
+ 'callback_read_data' (pointer) +
+ 'callback_write' (pointer) +
+ 'callback_write_data' (pointer) +
+ 'callback_write_default' (pointer) +
+ 'callback_write_default_data' (pointer) +
+ 'callback_create_option' (pointer) +
+ 'callback_create_option_data' (pointer) +
+ 'callback_delete_option' (pointer) +
+ 'callback_delete_option_data' (pointer) +
+ 'options' (pointer) +
+ 'last_option' (pointer) +
+ 'prev_section' (pointer) +
+ 'next_section' (pointer) |
+ -
+
+| weechat | filter | filter |
+ 'enabled' (integer) +
+ 'name' (string) +
+ 'buffer_name' (string) +
+ 'num_buffers' (integer) +
+ 'buffers' (pointer) +
+ 'tags' (string) +
+ 'tags_count' (integer) +
+ 'tags_array' (pointer) +
+ 'regex' (string) +
+ 'regex_prefix' (pointer) +
+ 'regex_message' (pointer) +
+ 'prev_filter' (pointer) +
+ 'next_filter' (pointer) |
+ 'gui_filters' +
+ 'last_gui_filter'
+
+| weechat | history | history of commands in buffer |
+ 'text' (string) +
+ 'next_history' (pointer) +
+ 'prev_history' (pointer) |
+ -
+
+| weechat | hook | hook (variables common to all hook types) |
+ 'plugin' (pointer) +
+ 'type' (integer) +
+ 'deleted' (integer) +
+ 'running' (integer) +
+ 'priority' (integer) +
+ 'callback_data' (pointer) +
+ 'hook_data' (pointer) +
+ 'prev_hook' (pointer) +
+ 'next_hook' (pointer) |
+ -
+
+| weechat | hook_command | hook of type "command" |
+ 'callback' (pointer) +
+ 'command' (string) +
+ 'description' (string) +
+ 'args' (string) +
+ 'args_description' (string) +
+ 'completion' (string) +
+ 'cplt_num_templates' (integer) +
+ 'cplt_templates' (pointer) +
+ 'cplt_templates_static' (pointer) +
+ 'cplt_template_num_args' (pointer) +
+ 'cplt_template_args' (pointer) +
+ 'cplt_template_num_args_concat' (integer) +
+ 'cplt_template_args_concat' (pointer) |
+ 'last_weechat_hook_command' +
+ 'weechat_hooks_command'
+
+| weechat | hook_command_run | hook of type "command_run" |
+ 'callback' (pointer) +
+ 'command' (string) |
+ 'last_weechat_hook_command_run' +
+ 'weechat_hooks_command_run'
+
+| weechat | hook_completion | hook of type "completion" |
+ 'callback' (pointer) +
+ 'completion_item' (string) +
+ 'description' (string) |
+ 'last_weechat_hook_completion' +
+ 'weechat_hooks_completion'
+
+| weechat | hook_config | hook of type "config" |
+ 'callback' (pointer) +
+ 'option' (string) |
+ 'last_weechat_hook_config' +
+ 'weechat_hooks_config'
+
+| weechat | hook_connect | hook of type "connect" |
+ 'callback' (pointer) +
+ 'proxy' (string) +
+ 'address' (string) +
+ 'port' (integer) +
+ 'sock' (integer) +
+ 'ipv6' (integer) +
+ 'gnutls_sess' (pointer) +
+ 'gnutls_cb' (pointer) +
+ 'gnutls_dhkey_size' (integer) +
+ 'gnutls_priorities' (string) +
+ 'local_hostname' (string) +
+ 'child_read' (integer) +
+ 'child_write' (integer) +
+ 'child_pid' (other) +
+ 'hook_fd' (pointer) +
+ 'handshake_hook_fd' (pointer) +
+ 'handshake_hook_timer' (pointer) +
+ 'handshake_fd_flags' (integer) +
+ 'handshake_ip_address' (string) |
+ 'last_weechat_hook_connect' +
+ 'weechat_hooks_connect'
+
+| weechat | hook_fd | hook of type "fd" |
+ 'callback' (pointer) +
+ 'fd' (integer) +
+ 'flags' (integer) |
+ 'last_weechat_hook_fd' +
+ 'weechat_hooks_fd'
+
+| weechat | hook_hdata | hook of type "hdata" |
+ 'callback' (pointer) +
+ 'hdata_name' (string) +
+ 'description' (string) |
+ 'last_weechat_hook_hdata' +
+ 'weechat_hooks_hdata'
+
+| weechat | hook_hsignal | hook of type "hsignal" |
+ 'callback' (pointer) +
+ 'signal' (string) |
+ 'last_weechat_hook_hsignal' +
+ 'weechat_hooks_hsignal'
+
+| weechat | hook_info | hook of type "info" |
+ 'callback' (pointer) +
+ 'info_name' (string) +
+ 'description' (string) +
+ 'args_description' (string) |
+ 'last_weechat_hook_info' +
+ 'weechat_hooks_info'
+
+| weechat | hook_info_hashtable | hook of type "info_hashtable" |
+ 'callback' (pointer) +
+ 'info_name' (string) +
+ 'description' (string) +
+ 'args_description' (string) +
+ 'output_description' (string) |
+ 'last_weechat_hook_info_hashtable' +
+ 'weechat_hooks_info_hashtable'
+
+| weechat | hook_infolist | hook of type "infolist" |
+ 'callback' (pointer) +
+ 'infolist_name' (string) +
+ 'description' (string) +
+ 'pointer_description' (string) +
+ 'args_description' (string) |
+ 'last_weechat_hook_infolist' +
+ 'weechat_hooks_infolist'
+
+| weechat | hook_modifier | hook of type "modifier" |
+ 'callback' (pointer) +
+ 'modifier' (string) |
+ 'last_weechat_hook_modifier' +
+ 'weechat_hooks_modifier'
+
+| weechat | hook_print | hook of type "print" |
+ 'callback' (pointer) +
+ 'buffer' (pointer) +
+ 'tags_count' (integer) +
+ 'tags_array' (pointer) +
+ 'message' (string) +
+ 'strip_colors' (integer) |
+ 'last_weechat_hook_print' +
+ 'weechat_hooks_print'
+
+| weechat | hook_process | hook of type "process" |
+ 'callback' (pointer) +
+ 'command' (string) +
+ 'timeout' (long) +
+ 'child_read' (pointer) +
+ 'child_write' (pointer) +
+ 'child_pid' (other) +
+ 'hook_fd' (pointer) +
+ 'hook_timer' (pointer) +
+ 'buffer' (pointer) +
+ 'buffer_size' (pointer) |
+ 'last_weechat_hook_process' +
+ 'weechat_hooks_process'
+
+| weechat | hook_signal | hook of type "signal" |
+ 'callback' (pointer) +
+ 'signal' (string) |
+ 'last_weechat_hook_signal' +
+ 'weechat_hooks_signal'
+
+| weechat | hook_timer | hook of type "timer" |
+ 'callback' (pointer) +
+ 'interval' (long) +
+ 'align_second' (integer) +
+ 'remaining_calls' (integer) +
+ 'last_exec' (other) +
+ 'next_exec' (other) |
+ 'last_weechat_hook_timer' +
+ 'weechat_hooks_timer'
+
+| weechat | input_undo | undo for input line |
+ 'data' (string) +
+ 'pos' (integer) +
+ 'prev_undo' (pointer) +
+ 'next_undo' (pointer) |
+ -
+
+| weechat | key | key |
+ 'key' (string) +
+ 'command' (string) +
+ 'prev_key' (pointer) +
+ 'next_key' (pointer) |
+ 'gui_default_keys' +
+ 'gui_keys' +
+ 'last_gui_default_key' +
+ 'last_gui_key'
+
+| weechat | line | line |
+ 'data' (pointer) +
+ 'prev_line' (pointer) +
+ 'next_line' (pointer) |
+ -
+
+| weechat | line_data | line data |
+ 'buffer' (pointer) +
+ 'y' (integer) +
+ 'date' (time) +
+ 'date_printed' (time) +
+ 'str_time' (string) +
+ 'tags_count' (integer) +
+ 'tags_array' (pointer) +
+ 'displayed' (integer) +
+ 'highlight' (integer) +
+ 'refresh_needed' (integer) +
+ 'prefix' (string) +
+ 'prefix_length' (integer) +
+ 'message' (string) |
+ -
+
+| weechat | lines | lines |
+ 'first_line' (pointer) +
+ 'last_line' (pointer) +
+ 'last_read_line' (pointer) +
+ 'lines_count' (integer) +
+ 'first_line_not_read' (integer) +
+ 'lines_hidden' (integer) +
+ 'buffer_max_length' (integer) +
+ 'prefix_max_length' (integer) |
+ -
+
+| weechat | nick | nick in nicklist |
+ 'group' (pointer) +
+ 'name' (string) +
+ 'color' (string) +
+ 'prefix' (string) +
+ 'prefix_color' (string) +
+ 'visible' (integer) +
+ 'prev_nick' (pointer) +
+ 'next_nick' (pointer) |
+ -
+
+| weechat | nick_group | group in nicklist |
+ 'name' (string) +
+ 'color' (string) +
+ 'visible' (integer) +
+ 'level' (integer) +
+ 'parent' (pointer) +
+ 'childs' (pointer) +
+ 'last_child' (pointer) +
+ 'nicks' (pointer) +
+ 'last_nick' (pointer) +
+ 'prev_group' (pointer) +
+ 'next_group' (pointer) |
+ -
+
+| weechat | window | window |
+ 'win_x' (integer) +
+ 'win_y' (integer) +
+ 'win_width' (integer) +
+ 'win_height' (integer) +
+ 'win_width_pct' (integer) +
+ 'win_height_pct' (integer) +
+ 'win_chat_x' (integer) +
+ 'win_chat_y' (integer) +
+ 'win_chat_width' (integer) +
+ 'win_chat_height' (integer) +
+ 'win_chat_cursor_x' (integer) +
+ 'win_chat_cursor_y' (integer) +
+ 'bar_windows' (pointer) +
+ 'last_bar_window' (pointer) +
+ 'refresh_needed' (integer) +
+ 'gui_objects' (pointer) +
+ 'buffer' (pointer) +
+ 'layout_plugin_name' (string) +
+ 'layout_buffer_name' (string) +
+ 'scroll' (pointer) +
+ 'ptr_tree' (pointer) +
+ 'prev_window' (pointer) +
+ 'next_window' (pointer) |
+ 'gui_current_window' +
+ 'gui_windows' +
+ 'last_gui_window'
+
+| weechat | window_scroll | scroll info in window |
+ 'buffer' (pointer) +
+ 'first_line_displayed' (integer) +
+ 'start_line' (pointer) +
+ 'start_line_pos' (integer) +
+ 'scrolling' (integer) +
+ 'start_col' (integer) +
+ 'lines_after' (integer) +
+ 'reset_allowed' (integer) +
+ 'prev_scroll' (pointer) +
+ 'next_scroll' (pointer) |
+ -
+
+| weechat | window_tree | tree of windows |
+ 'parent_node' (pointer) +
+ 'split_pct' (integer) +
+ 'split_horizontal' (integer) +
+ 'child1' (pointer) +
+ 'child2' (pointer) +
+ 'window' (pointer) |
+ 'gui_windows_tree'
+
+|========================================
diff --git a/doc/en/autogen/user/weechat_commands.txt b/doc/en/autogen/user/weechat_commands.txt
index 90a830f37..ce6e4eb5c 100644
--- a/doc/en/autogen/user/weechat_commands.txt
+++ b/doc/en/autogen/user/weechat_commands.txt
@@ -145,7 +145,7 @@ command: command to execute (a '/' is automatically added if not found at beginn
/debug list
set <plugin> <level>
dump [<plugin>]
- buffer|color|infolists|memory|term|windows
+ buffer|color|hdata|infolists|memory|term|windows
list: list plugins with debug levels
set: set debug level for plugin
@@ -154,6 +154,7 @@ command: command to execute (a '/' is automatically added if not found at beginn
dump: save memory dump in WeeChat log file (same dump is written when WeeChat crashes)
buffer: dump buffer content with hexadecimal values in log file
color: display infos about current color pairs
+ hdata: display infos about hdata
infolists: display infos about infolists
memory: display infos about memory usage
term: display infos about terminal
diff --git a/doc/en/weechat_plugin_api.en.txt b/doc/en/weechat_plugin_api.en.txt
index 4631c6581..4000b3920 100644
--- a/doc/en/weechat_plugin_api.en.txt
+++ b/doc/en/weechat_plugin_api.en.txt
@@ -3247,7 +3247,7 @@ Prototype:
[source,C]
----------------------------------------
const char *weechat_hashtable_get_string (struct t_hashtable *hashtable,
- void *property);
+ const char *property);
----------------------------------------
Arguments:
@@ -6042,7 +6042,7 @@ weechat_hook_modifier ("2000|input_text_display", &modifier_cb, NULL);
----------------------------------------
Following hook types allow priority: command, command_run, signal, hsignal,
-config, completion, modifier, info, infolist.
+config, completion, modifier, info, info_hashtable, infolist, hdata.
weechat_hook_command
^^^^^^^^^^^^^^^^^^^^
@@ -8173,6 +8173,62 @@ hook = weechat.hook_infolist("my_infolist", "Infolist with some data",
"my_infolist_cb", "")
----------------------------------------
+weechat_hook_hdata
+^^^^^^^^^^^^^^^^^^
+
+Hook a hdata: callback will return pointer to hdata asked.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+struct t_hook *weechat_hook_hdata (const char *hdata_name,
+ const char *description,
+ struct t_hdata *(*callback)(void *data,
+ const char *hdata_name),
+ void *callback_data);
+----------------------------------------
+
+Arguments:
+
+* 'hdata_name': name of hdata
+ (priority allowed, see note about <<hook_priority,priority>>)
+* 'description': description
+* 'callback': function called when hdata is asked, arguments and return
+ value:
+** 'void *data': pointer
+** 'const char *hdata_name': name of hdata
+** return value: hdata asked
+* 'callback_data': pointer given to callback when it is called by WeeChat
+
+Return value:
+
+* pointer to new hook, NULL if error occured
+
+C example:
+
+[source,C]
+----------------------------------------
+struct t_hdata *
+my_hdata_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *my_hdata;
+
+ /* build hdata */
+ /* ... */
+
+ return my_hdata;
+}
+
+/* add hdata "my_hdata" */
+struct t_hook *my_hdata = weechat_hook_hdata ("my_hdata",
+ "Hdata for my structure",
+ &my_hdata_cb, NULL);
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
weechat_unhook
^^^^^^^^^^^^^^
@@ -11101,6 +11157,13 @@ weechat_infolist_get
Return infolist from WeeChat or a plugin.
+[IMPORTANT]
+Content of infolist is a duplication of actual data. So if you are asking
+infolist with lot of data (like "buffer_lines"), WeeChat will allocate memory
+to duplicate all data, and this can take some time. +
+Instead of using big infolist, it is preferable to use hdata (but infolist may
+have more info than hdata, which is raw data), see <<hdata,hdata>>.
+
Prototype:
[source,C]
@@ -11550,6 +11613,849 @@ weechat.infolist_free(infolist)
weechat.infolist_free(infolist)
----------------------------------------
+[[hdata]]
+Hdata
+~~~~~
+
+Functions for hdata (raw access to WeeChat or plugins data).
+
+[IMPORTANT]
+Hdata provides read-only access to data. It is *STRICTLY FORBIDDEN* to write
+something in memory pointed by hdata variables.
+
+weechat_hdata_new
+^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Create a new hdata.
+
+[NOTE]
+.hdata vs infolist
+========================================
+Hdata is a fast way to read WeeChat or plugins data. It is similar to
+infolist, but there are some differences:
+
+* it is faster and uses less memory: direct read of data without duplication
+* it may have different info than infolist: it only raw data in structures
+ (infolist may add some extra data for convenience)
+========================================
+
+Prototype:
+
+[source,C]
+----------------------------------------
+struct t_hdata *weechat_hdata_new (const char *hdata_name, const char *var_prev, const char *var_next);
+----------------------------------------
+
+Arguments:
+
+* 'hdata_name': name of hdata
+* 'var_prev': name of variable in structure which is a pointer to previous
+ element in list (may be NULL if no such variable is available)
+* 'var_next': name of variable in structure which is a pointer to next
+ element in list (may be NULL if no such variable is available)
+
+Return value:
+
+* pointer to new hdata
+
+C example:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next");
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+weechat_hdata_new_var
+^^^^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Create a new variable in hdata.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+void weechat_hdata_new_var (struct t_hdata *hdata, const char *name, int offset, int type);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'name': variable name
+* 'offset': offset of variable in structure
+* 'type': variable type, one of:
+** WEECHAT_HDATA_INTEGER
+** WEECHAT_HDATA_LONG
+** WEECHAT_HDATA_STRING
+** WEECHAT_HDATA_POINTER
+** WEECHAT_HDATA_TIME
+** WEECHAT_HDATA_OTHER
+
+C example:
+
+[source,C]
+----------------------------------------
+struct t_myplugin_list
+{
+ char *name;
+ struct t_gui_buffer *buffer;
+ int count;
+ struct t_myplugin_list *prev;
+ struct t_myplugin_list *next;
+};
+
+/* ... */
+
+struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next");
+weechat_hdata_new_var (hdata, "name", offsetof (struct t_myplugin_list, name), WEECHAT_HDATA_STRING);
+weechat_hdata_new_var (hdata, "buffer", offsetof (struct t_myplugin_list, buffer), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_var (hdata, "count", offsetof (struct t_myplugin_list, count), WEECHAT_HDATA_INTEGER);
+weechat_hdata_new_var (hdata, "prev", offsetof (struct t_myplugin_list, prev), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_var (hdata, "next", offsetof (struct t_myplugin_list, next), WEECHAT_HDATA_POINTER);
+----------------------------------------
+
+The macro "WEECHAT_HDATA_VAR" can be used to shorten code:
+
+[source,C]
+----------------------------------------
+WEECHAT_HDATA_VAR(struct t_myplugin_list, name, STRING);
+WEECHAT_HDATA_VAR(struct t_myplugin_list, buffer, POINTER);
+WEECHAT_HDATA_VAR(struct t_myplugin_list, count, INTEGER);
+WEECHAT_HDATA_VAR(struct t_myplugin_list, prev, POINTER);
+WEECHAT_HDATA_VAR(struct t_myplugin_list, next, POINTER);
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+weechat_hdata_new_list
+^^^^^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Create a new list pointer in hdata.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+void weechat_hdata_new_list (struct t_hdata *hdata, const char *name, void *pointer);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'name': variable name
+* 'pointer': list pointer
+
+C example:
+
+[source,C]
+----------------------------------------
+struct t_myplugin_list
+{
+ char *name;
+ struct t_gui_buffer *buffer;
+ int count;
+ struct t_myplugin_list *prev;
+ struct t_myplugin_list *next;
+};
+
+struct t_myplugin_list *buffers = NULL;
+struct t_myplugin_list *last_buffer = NULL;
+
+/* ... */
+
+struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next");
+weechat_hdata_new_var (hdata, "name", offsetof (struct t_myplugin_list, name), WEECHAT_HDATA_STRING);
+weechat_hdata_new_var (hdata, "buffer", offsetof (struct t_myplugin_list, buffer), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_var (hdata, "count", offsetof (struct t_myplugin_list, count), WEECHAT_HDATA_INTEGER);
+weechat_hdata_new_var (hdata, "prev", offsetof (struct t_myplugin_list, prev), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_var (hdata, "next", offsetof (struct t_myplugin_list, next), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_list (hdata, "buffers", &buffers);
+weechat_hdata_new_list (hdata, "last_buffer", &last_buffer);
+----------------------------------------
+
+The macro "WEECHAT_HDATA_LIST" can be used to shorten code:
+
+[source,C]
+----------------------------------------
+WEECHAT_HDATA_LIST(buffers);
+WEECHAT_HDATA_LIST(last_buffer);
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+weechat_hdata_get
+^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Return hdata for a WeeChat or plugin structure.
+
+[NOTE]
+Hdata does not contain data, it's only a hashtable with position of variables
+in structure. That means you will need this hdata and a pointer to a
+WeeChat/plugin object to read some data.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+struct t_hdata *weechat_hdata_get (const char *hdata_name);
+----------------------------------------
+
+Arguments:
+
+* 'hdata_name': name of hdata:
+include::autogen/plugin_api/hdata.txt[]
+
+Return value:
+
+* pointer to hdata, NULL if an error occured
+
+C example:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("irc_server");
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+hdata = weechat.hdata_get(hdata_name)
+
+# example
+hdata = weechat.hdata_get("irc_server")
+----------------------------------------
+
+weechat_hdata_get_var_offset
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Return offset of variable in hdata.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+int weechat_hdata_get_var_offset (struct t_hdata *hdata, const char *name);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'name': variable name
+
+Return value:
+
+* variable offset, 0 if an error occured
+
+C example:
+
+[source,C]
+----------------------------------------
+int offset = weechat_hdata_get_var_offset (hdata, "name");
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+weechat_hdata_get_var_type
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Return type of variable in hdata (as integer).
+
+Prototype:
+
+[source,C]
+----------------------------------------
+int weechat_hdata_get_var_type (struct t_hdata *hdata, const char *name);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'name': variable name
+
+Return value:
+
+* variable type, -1 if an error occured
+
+C example:
+
+[source,C]
+----------------------------------------
+int type = weechat_hdata_get_var_type (hdata, "name");
+switch (type)
+{
+ case WEECHAT_HDATA_INTEGER:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_LONG:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_STRING:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_POINTER:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_TIME:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_OTHER:
+ /* ... */
+ break;
+ default:
+ /* variable not found */
+ break;
+}
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+weechat_hdata_get_var_type_string
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Return type of variable in hdata (as string).
+
+Prototype:
+
+[source,C]
+----------------------------------------
+const char *weechat_hdata_get_var_type_string (struct t_hdata *hdata, const char *name);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'name': variable name
+
+Return value:
+
+* variable type, NULL if an error occured
+
+C example:
+
+[source,C]
+----------------------------------------
+weechat_printf (NULL, "type = %s",
+ weechat_hdata_get_var_type_string (hdata, "name"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+type = weechat.hdata_get_var_type_string(hdata, name)
+
+# example
+weechat.prnt("", "type = %s" % weechat.hdata_get_var_type_string("name"))
+----------------------------------------
+
+weechat_hdata_get_var
+^^^^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Return pointer to content of variable in hdata.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_get_var (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'name': variable name
+
+Return value:
+
+* pointer to content of variable, NULL if an error occured
+
+C example:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+void *pointer = weechat_hdata_get_var (hdata, buffer, "name");
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+weechat_hdata_get_var_at_offset
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Return pointer to content of variable in hdata, using offset.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_get_var_at_offset (struct t_hdata *hdata, void *pointer, int offset);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'offset': offset of variable
+
+Return value:
+
+* pointer to content of variable, NULL if an error occured
+
+C example:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+int offset = weechat_hdata_get_var_offset (hdata, "name");
+void *pointer = weechat_hdata_get_var_at_offset (hdata, buffer, offset);
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+weechat_hdata_get_list
+^^^^^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Return list pointer from hdata.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_get_list (struct t_hdata *hdata, const char *name);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'name': list name
+
+Return value:
+
+* list pointer, NULL if an error occured
+
+C example:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffers = weechat_hdata_get_list (hdata, "gui_buffers");
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+list = weechat.hdata_get_list(hdata, name)
+
+# example
+hdata = weechat.hdata_get("buffer")
+buffers = weechat.hdata_get_list(hdata, "gui_buffers")
+----------------------------------------
+
+weechat_hdata_move
+^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Move pointer to another element in list.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_move (struct t_hdata *hdata, void *pointer, int count);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to a WeeChat/plugin object
+* 'count': number of jump(s) to execute (negative or positive integer, different
+ from 0)
+
+Return value:
+
+* pointer to element reached, NULL if an error occured
+
+C example:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+
+/* move to next buffer, 2 times */
+buffer = weechat_hdata_move (hdata, buffer, 2);
+
+/* move to previous buffer */
+if (buffer)
+ buffer = weechat_hdata_move (hdata, buffer, -1);
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+pointer = weechat.hdata_move(hdata, pointer, count)
+
+# example
+hdata = weechat_hdata_get("buffer")
+buffer = weechat.buffer_search_main()
+
+# move to next buffer, 2 times
+buffer = weechat.hdata_move(hdata, buffer, 2)
+
+# move to previous buffer
+if buffer:
+ buffer = weechat.hdata_move(hdata, buffer, -1)
+----------------------------------------
+
+weechat_hdata_integer
+^^^^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Return value of integer variable in structure using hdata.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+int weechat_hdata_integer (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'name': variable name (must be type "integer")
+
+Return value:
+
+* integer value of variable
+
+C example:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+weechat_printf (NULL, "number = %d", weechat_hdata_integer (hdata, buffer, "number"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+value = weechat.hdata_integer(hdata, pointer, name)
+
+# example
+hdata = weechat.hdata_get("buffer")
+buffer = weechat.buffer_search_main()
+weechat.prnt("", "number = %d" % weechat.hdata_integer(hdata, buffer, "number"))
+----------------------------------------
+
+weechat_hdata_long
+^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Return value of long variable in structure using hdata.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+long weechat_hdata_long (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'name': variable name (must be type "long")
+
+Return value:
+
+* long value of variable
+
+C example:
+
+[source,C]
+----------------------------------------
+weechat_printf (NULL, "longvar = %ld", weechat_hdata_long (hdata, pointer, "longvar"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+value = weechat.hdata_long(hdata, pointer, name)
+
+# example
+weechat.prnt("", "longvar = %ld" % weechat.hdata_long(hdata, pointer, "longvar"))
+----------------------------------------
+
+weechat_hdata_string
+^^^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Return value of string variable in structure using hdata.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+const char *weechat_hdata_string (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'name': variable name (must be type "string")
+
+Return value:
+
+* string value of variable
+
+C example:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+weechat_printf (NULL, "name = %s", weechat_hdata_string (hdata, buffer, "name"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+value = weechat.hdata_string(hdata, pointer, name)
+
+# example
+hdata = weechat.hdata_get("buffer")
+buffer = weechat.buffer_search_main()
+weechat.prnt("", "name = %s" % weechat.hdata_string(hdata, buffer, "name"))
+----------------------------------------
+
+weechat_hdata_pointer
+^^^^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Return value of pointer variable in structure using hdata.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_pointer (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'name': variable name (must be type "pointer")
+
+Return value:
+
+* pointer value of variable
+
+C example:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+weechat_printf (NULL, "lines = %lx", weechat_hdata_pointer (hdata, buffer, "lines"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+value = weechat.hdata_pointer(hdata, pointer, name)
+
+# example
+hdata = weechat.hdata_get("buffer")
+buffer = weechat.buffer_search_main()
+weechat.prnt("", "lines = %lx" % weechat.hdata_pointer(hdata, buffer, "lines"))
+----------------------------------------
+
+weechat_hdata_time
+^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Return value of time variable in structure using hdata.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+time_t weechat_hdata_time (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'name': variable name (must be type "time")
+
+Return value:
+
+* time value of variable
+
+C example:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *ptr = weechat_buffer_search_main ();
+ptr = weechat_hdata_pointer (hdata, ptr, "lines");
+if (ptr)
+{
+ hdata = weechat_hdata_get ("lines");
+ ptr = weechat_hdata_pointer (hdata, ptr, "first_line");
+ if (ptr)
+ {
+ hdata = weechat_hdata_get ("line");
+ ptr = weechat_hdata_pointer (hdata, ptr, "data");
+ if (ptr)
+ {
+ hdata = weechat_hdata_get ("line_data");
+ time_t date = weechat_hdata_time (hdata, hdata, "date");
+ weechat_printf (NULL, "time of last line displayed = %s", ctime (&date));
+ }
+ }
+}
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+value = weechat.hdata_time(hdata, pointer, name)
+
+# example
+hdata = weechat.hdata_get("buffer")
+ptr = weechat.buffer_search_main()
+ptr = weechat.hdata_pointer(hdata, ptr, "lines")
+if ptr:
+ hdata = weechat.hdata_get("lines")
+ ptr = weechat.hdata_pointer(hdata, ptr, "first_line")
+ if ptr:
+ hdata = weechat.hdata_get("line")
+ ptr = weechat.hdata_pointer(hdata, ptr, "data")
+ if ptr:
+ hdata = weechat.hdata_get("line_data")
+ weechat.prnt("", "time of last line displayed = %s" % weechat.hdata_time(hdata, ptr, "date"))
+----------------------------------------
+
+weechat_hdata_get_string
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+_New in version 0.3.6._
+
+Return string value of a hdata property.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+const char *weechat_hdata_get_string (struct t_hdata *hdata, const char *property);
+----------------------------------------
+
+Arguments:
+
+* 'hdata': hdata pointer
+* 'property': property name:
+** 'var_keys': string with list of keys for variables in hdata
+ (format: "key1,key2,key3")
+** 'var_values': string with list of values for variables in hdata
+ (format: "value1,value2,value3")
+** 'var_keys_values': string with list of keys and values for variables in hdata
+ (format: "key1:value1,key2:value2,key3:value3")
+** 'var_prev': name of variable in structure which is a pointer to previous
+ element in list
+** 'var_next': name of variable in structure which is a pointer to next
+ element in list
+** 'list_keys': string with list of keys for lists in hdata
+ (format: "key1,key2,key3")
+** 'list_values': string with list of values for lists in hdata
+ (format: "value1,value2,value3")
+** 'list_keys_values': string with list of keys and values for lists in hdata
+ (format: "key1:value1,key2:value2,key3:value3")
+
+Return value:
+
+* string value of property
+
+C example:
+
+[source,C]
+----------------------------------------
+weechat_printf (NULL, "variables in hdata: %s" weechat_hdata_get_string (hdata, "var_keys"));
+weechat_printf (NULL, "lists in hdata: %s" weechat_hdata_get_string (hdata, "list_keys"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+value = weechat.hdata_get_string(hdata, property)
+
+# example
+weechat.prnt("", "variables in hdata: %s" % weechat.hdata_get_string(hdata, "var_keys"))
+weechat.prnt("", "lists in hdata: %s" % weechat.hdata_get_string(hdata, "list_keys"))
+----------------------------------------
+
[[upgrade]]
Upgrade
~~~~~~~
diff --git a/doc/fr/autogen/plugin_api/hdata.txt b/doc/fr/autogen/plugin_api/hdata.txt
new file mode 100644
index 000000000..65db2c5a3
--- /dev/null
+++ b/doc/fr/autogen/plugin_api/hdata.txt
@@ -0,0 +1,659 @@
+[width="100%",cols="^1,^2,5,5,5",options="header"]
+|========================================
+| Extension | Nom | Description | Variables | Listes
+
+| irc | irc_channel | canal irc |
+ 'type' (integer) +
+ 'name' (string) +
+ 'topic' (string) +
+ 'modes' (string) +
+ 'limit' (integer) +
+ 'key' (string) +
+ 'checking_away' (integer) +
+ 'away_message' (string) +
+ 'has_quit_server' (integer) +
+ 'cycle' (integer) +
+ 'part' (integer) +
+ 'display_creation_date' (integer) +
+ 'nick_completion_reset' (integer) +
+ 'pv_remote_nick_color' (string) +
+ 'hook_autorejoin' (pointer) +
+ 'nicks_count' (integer) +
+ 'nicks' (pointer) +
+ 'last_nick' (pointer) +
+ 'nicks_speaking' (pointer) +
+ 'nicks_speaking_time' (pointer) +
+ 'last_nick_speaking_time' (pointer) +
+ 'buffer' (pointer) +
+ 'buffer_as_string' (string) +
+ 'prev_channel' (pointer) +
+ 'next_channel' (pointer) |
+ -
+
+| irc | irc_channel_speaking | channel_speaking irc |
+ 'nick' (string) +
+ 'time_last_message' (time) +
+ 'prev_nick' (pointer) +
+ 'next_nick' (pointer) |
+ -
+
+| irc | irc_ignore | ignore irc |
+ 'number' (integer) +
+ 'mask' (string) +
+ 'regex_mask' (pointer) +
+ 'server' (string) +
+ 'channel' (string) +
+ 'prev_ignore' (pointer) +
+ 'next_ignore' (pointer) |
+ 'irc_ignore_list' +
+ 'last_irc_ignore'
+
+| irc | irc_nick | pseudo irc |
+ 'name' (string) +
+ 'host' (string) +
+ 'prefixes' (string) +
+ 'prefix' (string) +
+ 'away' (integer) +
+ 'color' (string) +
+ 'prev_nick' (pointer) +
+ 'next_nick' (pointer) |
+ -
+
+| irc | irc_notify | notify irc |
+ 'server' (pointer) +
+ 'nick' (string) +
+ 'check_away' (integer) +
+ 'is_on_server' (integer) +
+ 'away_message' (string) +
+ 'ison_received' (integer) +
+ 'prev_notify' (pointer) +
+ 'next_notify' (pointer) |
+ -
+
+| irc | irc_redirect | redirection irc |
+ 'server' (pointer) +
+ 'pattern' (string) +
+ 'signal' (string) +
+ 'count' (integer) +
+ 'current_count' (integer) +
+ 'string' (string) +
+ 'timeout' (integer) +
+ 'command' (string) +
+ 'start_time' (time) +
+ 'cmd_start' (pointer) +
+ 'cmd_stop' (pointer) +
+ 'cmd_extra' (pointer) +
+ 'cmd_start_received' (integer) +
+ 'cmd_stop_received' (integer) +
+ 'cmd_filter' (pointer) +
+ 'output' (string) +
+ 'output_size' (integer) +
+ 'prev_redirect' (pointer) +
+ 'next_redirect' (pointer) |
+ -
+
+| irc | irc_redirect_pattern | modèle pour une redirection irc |
+ 'name' (string) +
+ 'temp_pattern' (integer) +
+ 'timeout' (integer) +
+ 'cmd_start' (string) +
+ 'cmd_stop' (string) +
+ 'cmd_extra' (string) +
+ 'prev_redirect' (pointer) +
+ 'next_redirect' (pointer) |
+ 'irc_redirect_patterns' +
+ 'last_irc_redirect_pattern'
+
+| irc | irc_server | serveur irc |
+ 'name' (string) +
+ 'options' (pointer) +
+ 'temp_server' (integer) +
+ 'reloading_from_config' (integer) +
+ 'reloaded_from_config' (integer) +
+ 'addresses_count' (integer) +
+ 'addresses_array' (pointer) +
+ 'ports_array' (pointer) +
+ 'index_current_address' (integer) +
+ 'current_address' (string) +
+ 'current_ip' (string) +
+ 'current_port' (integer) +
+ 'sock' (integer) +
+ 'hook_connect' (pointer) +
+ 'hook_fd' (pointer) +
+ 'hook_timer_connection' (pointer) +
+ 'hook_timer_sasl' (pointer) +
+ 'is_connected' (integer) +
+ 'ssl_connected' (integer) +
+ 'gnutls_sess' (other) +
+ 'tls_cert' (other) +
+ 'tls_cert_key' (other) +
+ 'unterminated_message' (string) +
+ 'nicks_count' (integer) +
+ 'nicks_array' (pointer) +
+ 'nick_first_tried' (integer) +
+ 'nick' (string) +
+ 'nick_modes' (string) +
+ 'isupport' (string) +
+ 'prefix_modes' (string) +
+ 'prefix_chars' (string) +
+ 'reconnect_delay' (integer) +
+ 'reconnect_start' (time) +
+ 'command_time' (time) +
+ 'reconnect_join' (integer) +
+ 'disable_autojoin' (integer) +
+ 'is_away' (integer) +
+ 'away_message' (string) +
+ 'away_time' (time) +
+ 'lag' (integer) +
+ 'lag_check_time' (other) +
+ 'lag_next_check' (time) +
+ 'lag_last_refresh' (time) +
+ 'cmd_list_regexp' (pointer) +
+ 'last_user_message' (time) +
+ 'last_away_check' (time) +
+ 'outqueue' (pointer) +
+ 'last_outqueue' (pointer) +
+ 'redirects' (pointer) +
+ 'last_redirect' (pointer) +
+ 'notify_list' (pointer) +
+ 'last_notify' (pointer) +
+ 'manual_joins' (pointer) +
+ 'buffer' (pointer) +
+ 'buffer_as_string' (string) +
+ 'channels' (pointer) +
+ 'last_channel' (pointer) +
+ 'prev_server' (pointer) +
+ 'next_server' (pointer) |
+ 'irc_servers' +
+ 'last_irc_server'
+
+| weechat | bar | barre |
+ 'name' (string) +
+ 'options' (pointer) +
+ 'conditions_count' (integer) +
+ 'conditions_array' (pointer) +
+ 'items_count' (integer) +
+ 'items_subcount' (pointer) +
+ 'items_array' (pointer) +
+ 'bar_window' (pointer) +
+ 'bar_refresh_needed' (integer) +
+ 'prev_bar' (pointer) +
+ 'next_bar' (pointer) |
+ 'gui_bars' +
+ 'last_gui_bar'
+
+| weechat | bar_item | objet de barre |
+ 'plugin' (pointer) +
+ 'name' (string) +
+ 'build_callback' (pointer) +
+ 'build_callback_data' (pointer) +
+ 'prev_item' (pointer) +
+ 'next_item' (pointer) |
+ 'gui_bar_items' +
+ 'last_gui_bar_item'
+
+| weechat | buffer | tampon |
+ 'plugin' (pointer) +
+ 'plugin_name_for_upgrade' (string) +
+ 'merge_for_upgrade' (pointer) +
+ 'number' (integer) +
+ 'layout_number' (integer) +
+ 'layout_applied' (integer) +
+ 'name' (string) +
+ 'short_name' (string) +
+ 'type' (integer) +
+ 'notify' (integer) +
+ 'num_displayed' (integer) +
+ 'active' (integer) +
+ 'print_hooks_enabled' (integer) +
+ 'close_callback' (pointer) +
+ 'close_callback_data' (pointer) +
+ 'title' (string) +
+ 'own_lines' (pointer) +
+ 'mixed_lines' (pointer) +
+ 'lines' (pointer) +
+ 'time_for_each_line' (integer) +
+ 'chat_refresh_needed' (integer) +
+ 'nicklist' (integer) +
+ 'nicklist_case_sensitive' (integer) +
+ 'nicklist_root' (pointer) +
+ 'nicklist_max_length' (integer) +
+ 'nicklist_display_groups' (integer) +
+ 'nicklist_visible_count' (integer) +
+ 'input' (integer) +
+ 'input_callback' (pointer) +
+ 'input_callback_data' (pointer) +
+ 'input_get_unknown_commands' (integer) +
+ 'input_buffer' (string) +
+ 'input_buffer_alloc' (integer) +
+ 'input_buffer_size' (integer) +
+ 'input_buffer_length' (integer) +
+ 'input_buffer_pos' (integer) +
+ 'input_buffer_1st_display' (integer) +
+ 'input_undo_snap' (pointer) +
+ 'input_undo' (pointer) +
+ 'last_input_undo' (pointer) +
+ 'ptr_input_undo' (pointer) +
+ 'input_undo_count' (integer) +
+ 'completion' (pointer) +
+ 'history' (pointer) +
+ 'last_history' (pointer) +
+ 'ptr_history' (pointer) +
+ 'num_history' (integer) +
+ 'text_search' (integer) +
+ 'text_search_exact' (integer) +
+ 'text_search_found' (integer) +
+ 'text_search_input' (string) +
+ 'highlight_words' (string) +
+ 'highlight_tags' (string) +
+ 'highlight_tags_count' (integer) +
+ 'highlight_tags_array' (pointer) +
+ 'hotlist_max_level_nicks' (pointer) +
+ 'keys' (pointer) +
+ 'last_key' (pointer) +
+ 'keys_count' (integer) +
+ 'local_variables' (pointer) +
+ 'prev_buffer' (pointer) +
+ 'next_buffer' (pointer) |
+ 'gui_buffers' +
+ 'last_gui_buffer'
+
+| weechat | completion | complétion |
+ 'buffer' (pointer) +
+ 'context' (integer) +
+ 'base_command' (string) +
+ 'base_command_arg_index' (integer) +
+ 'base_word' (string) +
+ 'base_word_pos' (integer) +
+ 'position' (integer) +
+ 'args' (string) +
+ 'direction' (integer) +
+ 'add_space' (integer) +
+ 'force_partial_completion' (integer) +
+ 'completion_list' (pointer) +
+ 'word_found' (string) +
+ 'word_found_is_nick' (integer) +
+ 'position_replace' (integer) +
+ 'diff_size' (integer) +
+ 'diff_length' (integer) +
+ 'partial_completion_list' (pointer) +
+ 'last_partial_completion' (pointer) |
+ -
+
+| weechat | completion_partial | complétion partielle |
+ 'word' (string) +
+ 'count' (integer) +
+ 'prev_item' (pointer) +
+ 'next_item' (pointer) |
+ -
+
+| weechat | config_file | fichier de configuration |
+ 'plugin' (pointer) +
+ 'name' (string) +
+ 'filename' (string) +
+ 'file' (pointer) +
+ 'callback_reload' (pointer) +
+ 'callback_reload_data' (pointer) +
+ 'sections' (pointer) +
+ 'last_section' (pointer) +
+ 'prev_config' (pointer) +
+ 'next_config' (pointer) |
+ 'config_files' +
+ 'last_config_file'
+
+| weechat | config_option | option de configuration |
+ 'config_file' (pointer) +
+ 'section' (pointer) +
+ 'name' (string) +
+ 'type' (integer) +
+ 'description' (string) +
+ 'string_values' (pointer) +
+ 'min' (integer) +
+ 'max' (integer) +
+ 'default_value' (pointer) +
+ 'value' (pointer) +
+ 'null_value_allowed' (integer) +
+ 'callback_check_value' (pointer) +
+ 'callback_check_value_data' (pointer) +
+ 'callback_change' (pointer) +
+ 'callback_change_data' (pointer) +
+ 'callback_delete' (pointer) +
+ 'callback_delete_data' (pointer) +
+ 'loaded' (integer) +
+ 'prev_option' (pointer) +
+ 'next_option' (pointer) |
+ -
+
+| weechat | config_section | section de configuration |
+ 'config_file' (pointer) +
+ 'name' (string) +
+ 'user_can_add_options' (integer) +
+ 'user_can_delete_options' (integer) +
+ 'callback_read' (pointer) +
+ 'callback_read_data' (pointer) +
+ 'callback_write' (pointer) +
+ 'callback_write_data' (pointer) +
+ 'callback_write_default' (pointer) +
+ 'callback_write_default_data' (pointer) +
+ 'callback_create_option' (pointer) +
+ 'callback_create_option_data' (pointer) +
+ 'callback_delete_option' (pointer) +
+ 'callback_delete_option_data' (pointer) +
+ 'options' (pointer) +
+ 'last_option' (pointer) +
+ 'prev_section' (pointer) +
+ 'next_section' (pointer) |
+ -
+
+| weechat | filter | filtre |
+ 'enabled' (integer) +
+ 'name' (string) +
+ 'buffer_name' (string) +
+ 'num_buffers' (integer) +
+ 'buffers' (pointer) +
+ 'tags' (string) +
+ 'tags_count' (integer) +
+ 'tags_array' (pointer) +
+ 'regex' (string) +
+ 'regex_prefix' (pointer) +
+ 'regex_message' (pointer) +
+ 'prev_filter' (pointer) +
+ 'next_filter' (pointer) |
+ 'gui_filters' +
+ 'last_gui_filter'
+
+| weechat | history | historique des commandes dans le tampon |
+ 'text' (string) +
+ 'next_history' (pointer) +
+ 'prev_history' (pointer) |
+ -
+
+| weechat | hook | hook (variables communes à tous les types de hooks) |
+ 'plugin' (pointer) +
+ 'type' (integer) +
+ 'deleted' (integer) +
+ 'running' (integer) +
+ 'priority' (integer) +
+ 'callback_data' (pointer) +
+ 'hook_data' (pointer) +
+ 'prev_hook' (pointer) +
+ 'next_hook' (pointer) |
+ -
+
+| weechat | hook_command | hook de type "command" |
+ 'callback' (pointer) +
+ 'command' (string) +
+ 'description' (string) +
+ 'args' (string) +
+ 'args_description' (string) +
+ 'completion' (string) +
+ 'cplt_num_templates' (integer) +
+ 'cplt_templates' (pointer) +
+ 'cplt_templates_static' (pointer) +
+ 'cplt_template_num_args' (pointer) +
+ 'cplt_template_args' (pointer) +
+ 'cplt_template_num_args_concat' (integer) +
+ 'cplt_template_args_concat' (pointer) |
+ 'last_weechat_hook_command' +
+ 'weechat_hooks_command'
+
+| weechat | hook_command_run | hook de type "command_run" |
+ 'callback' (pointer) +
+ 'command' (string) |
+ 'last_weechat_hook_command_run' +
+ 'weechat_hooks_command_run'
+
+| weechat | hook_completion | hook de type "completion" |
+ 'callback' (pointer) +
+ 'completion_item' (string) +
+ 'description' (string) |
+ 'last_weechat_hook_completion' +
+ 'weechat_hooks_completion'
+
+| weechat | hook_config | hook de type "config" |
+ 'callback' (pointer) +
+ 'option' (string) |
+ 'last_weechat_hook_config' +
+ 'weechat_hooks_config'
+
+| weechat | hook_connect | hook de type "connect" |
+ 'callback' (pointer) +
+ 'proxy' (string) +
+ 'address' (string) +
+ 'port' (integer) +
+ 'sock' (integer) +
+ 'ipv6' (integer) +
+ 'gnutls_sess' (pointer) +
+ 'gnutls_cb' (pointer) +
+ 'gnutls_dhkey_size' (integer) +
+ 'gnutls_priorities' (string) +
+ 'local_hostname' (string) +
+ 'child_read' (integer) +
+ 'child_write' (integer) +
+ 'child_pid' (other) +
+ 'hook_fd' (pointer) +
+ 'handshake_hook_fd' (pointer) +
+ 'handshake_hook_timer' (pointer) +
+ 'handshake_fd_flags' (integer) +
+ 'handshake_ip_address' (string) |
+ 'last_weechat_hook_connect' +
+ 'weechat_hooks_connect'
+
+| weechat | hook_fd | hook de type "fd" |
+ 'callback' (pointer) +
+ 'fd' (integer) +
+ 'flags' (integer) |
+ 'last_weechat_hook_fd' +
+ 'weechat_hooks_fd'
+
+| weechat | hook_hdata | hook de type "hdata" |
+ 'callback' (pointer) +
+ 'hdata_name' (string) +
+ 'description' (string) |
+ 'last_weechat_hook_hdata' +
+ 'weechat_hooks_hdata'
+
+| weechat | hook_hsignal | hook de type "hsignal" |
+ 'callback' (pointer) +
+ 'signal' (string) |
+ 'last_weechat_hook_hsignal' +
+ 'weechat_hooks_hsignal'
+
+| weechat | hook_info | hook de type "info" |
+ 'callback' (pointer) +
+ 'info_name' (string) +
+ 'description' (string) +
+ 'args_description' (string) |
+ 'last_weechat_hook_info' +
+ 'weechat_hooks_info'
+
+| weechat | hook_info_hashtable | hook de type "info_hashtable" |
+ 'callback' (pointer) +
+ 'info_name' (string) +
+ 'description' (string) +
+ 'args_description' (string) +
+ 'output_description' (string) |
+ 'last_weechat_hook_info_hashtable' +
+ 'weechat_hooks_info_hashtable'
+
+| weechat | hook_infolist | hook de type "infolist" |
+ 'callback' (pointer) +
+ 'infolist_name' (string) +
+ 'description' (string) +
+ 'pointer_description' (string) +
+ 'args_description' (string) |
+ 'last_weechat_hook_infolist' +
+ 'weechat_hooks_infolist'
+
+| weechat | hook_modifier | hook de type "modifier" |
+ 'callback' (pointer) +
+ 'modifier' (string) |
+ 'last_weechat_hook_modifier' +
+ 'weechat_hooks_modifier'
+
+| weechat | hook_print | hook de type "print" |
+ 'callback' (pointer) +
+ 'buffer' (pointer) +
+ 'tags_count' (integer) +
+ 'tags_array' (pointer) +
+ 'message' (string) +
+ 'strip_colors' (integer) |
+ 'last_weechat_hook_print' +
+ 'weechat_hooks_print'
+
+| weechat | hook_process | hook de type "process" |
+ 'callback' (pointer) +
+ 'command' (string) +
+ 'timeout' (long) +
+ 'child_read' (pointer) +
+ 'child_write' (pointer) +
+ 'child_pid' (other) +
+ 'hook_fd' (pointer) +
+ 'hook_timer' (pointer) +
+ 'buffer' (pointer) +
+ 'buffer_size' (pointer) |
+ 'last_weechat_hook_process' +
+ 'weechat_hooks_process'
+
+| weechat | hook_signal | hook de type "signal" |
+ 'callback' (pointer) +
+ 'signal' (string) |
+ 'last_weechat_hook_signal' +
+ 'weechat_hooks_signal'
+
+| weechat | hook_timer | hook de type "timer" |
+ 'callback' (pointer) +
+ 'interval' (long) +
+ 'align_second' (integer) +
+ 'remaining_calls' (integer) +
+ 'last_exec' (other) +
+ 'next_exec' (other) |
+ 'last_weechat_hook_timer' +
+ 'weechat_hooks_timer'
+
+| weechat | input_undo | undo pour la ligne de commande |
+ 'data' (string) +
+ 'pos' (integer) +
+ 'prev_undo' (pointer) +
+ 'next_undo' (pointer) |
+ -
+
+| weechat | key | touche |
+ 'key' (string) +
+ 'command' (string) +
+ 'prev_key' (pointer) +
+ 'next_key' (pointer) |
+ 'gui_default_keys' +
+ 'gui_keys' +
+ 'last_gui_default_key' +
+ 'last_gui_key'
+
+| weechat | line | ligne |
+ 'data' (pointer) +
+ 'prev_line' (pointer) +
+ 'next_line' (pointer) |
+ -
+
+| weechat | line_data | données de la ligne |
+ 'buffer' (pointer) +
+ 'y' (integer) +
+ 'date' (time) +
+ 'date_printed' (time) +
+ 'str_time' (string) +
+ 'tags_count' (integer) +
+ 'tags_array' (pointer) +
+ 'displayed' (integer) +
+ 'highlight' (integer) +
+ 'refresh_needed' (integer) +
+ 'prefix' (string) +
+ 'prefix_length' (integer) +
+ 'message' (string) |
+ -
+
+| weechat | lines | lignes |
+ 'first_line' (pointer) +
+ 'last_line' (pointer) +
+ 'last_read_line' (pointer) +
+ 'lines_count' (integer) +
+ 'first_line_not_read' (integer) +
+ 'lines_hidden' (integer) +
+ 'buffer_max_length' (integer) +
+ 'prefix_max_length' (integer) |
+ -
+
+| weechat | nick | pseudo dans la liste de pseudos |
+ 'group' (pointer) +
+ 'name' (string) +
+ 'color' (string) +
+ 'prefix' (string) +
+ 'prefix_color' (string) +
+ 'visible' (integer) +
+ 'prev_nick' (pointer) +
+ 'next_nick' (pointer) |
+ -
+
+| weechat | nick_group | groupe dans la liste de pseudos |
+ 'name' (string) +
+ 'color' (string) +
+ 'visible' (integer) +
+ 'level' (integer) +
+ 'parent' (pointer) +
+ 'childs' (pointer) +
+ 'last_child' (pointer) +
+ 'nicks' (pointer) +
+ 'last_nick' (pointer) +
+ 'prev_group' (pointer) +
+ 'next_group' (pointer) |
+ -
+
+| weechat | window | fenêtre |
+ 'win_x' (integer) +
+ 'win_y' (integer) +
+ 'win_width' (integer) +
+ 'win_height' (integer) +
+ 'win_width_pct' (integer) +
+ 'win_height_pct' (integer) +
+ 'win_chat_x' (integer) +
+ 'win_chat_y' (integer) +
+ 'win_chat_width' (integer) +
+ 'win_chat_height' (integer) +
+ 'win_chat_cursor_x' (integer) +
+ 'win_chat_cursor_y' (integer) +
+ 'bar_windows' (pointer) +
+ 'last_bar_window' (pointer) +
+ 'refresh_needed' (integer) +
+ 'gui_objects' (pointer) +
+ 'buffer' (pointer) +
+ 'layout_plugin_name' (string) +
+ 'layout_buffer_name' (string) +
+ 'scroll' (pointer) +
+ 'ptr_tree' (pointer) +
+ 'prev_window' (pointer) +
+ 'next_window' (pointer) |
+ 'gui_current_window' +
+ 'gui_windows' +
+ 'last_gui_window'
+
+| weechat | window_scroll | info de défilement dans la fenêtre |
+ 'buffer' (pointer) +
+ 'first_line_displayed' (integer) +
+ 'start_line' (pointer) +
+ 'start_line_pos' (integer) +
+ 'scrolling' (integer) +
+ 'start_col' (integer) +
+ 'lines_after' (integer) +
+ 'reset_allowed' (integer) +
+ 'prev_scroll' (pointer) +
+ 'next_scroll' (pointer) |
+ -
+
+| weechat | window_tree | arbre des fenêtres |
+ 'parent_node' (pointer) +
+ 'split_pct' (integer) +
+ 'split_horizontal' (integer) +
+ 'child1' (pointer) +
+ 'child2' (pointer) +
+ 'window' (pointer) |
+ 'gui_windows_tree'
+
+|========================================
diff --git a/doc/fr/autogen/user/weechat_commands.txt b/doc/fr/autogen/user/weechat_commands.txt
index 8d9a6eb4b..4b648eedb 100644
--- a/doc/fr/autogen/user/weechat_commands.txt
+++ b/doc/fr/autogen/user/weechat_commands.txt
@@ -145,7 +145,7 @@ extension: nom de l'extension ('weechat' pour une commande interne WeeChat)
/debug list
set <extension> <niveau>
dump [<extension>]
- buffer|color|infolists|memory|term|windows
+ buffer|color|hdata|infolists|memory|term|windows
list: lister les extensions avec leur niveau de debug
set: définir le niveau de debug pour l'extension
@@ -154,6 +154,7 @@ extension: nom de l'extension ("core" pour le coeur de WeeChat)
dump: afficher les variables mémoire WeeChat dans le fichier log (les mêmes messages sont affichés lorsque WeeChat plante)
buffer: afficher le contenu du tampon en valeurs hexadécimales dans le fichier log
color: afficher des infos sur les paires de couleur courantes
+ hdata: afficher des infos sur les hdata
infolists: afficher des infos sur les infolists
memory: afficher des infos sur l'utilisation de la mémoire
term: afficher des infos sur le terminal
diff --git a/doc/fr/weechat_plugin_api.fr.txt b/doc/fr/weechat_plugin_api.fr.txt
index 83fa61591..7090c3e0c 100644
--- a/doc/fr/weechat_plugin_api.fr.txt
+++ b/doc/fr/weechat_plugin_api.fr.txt
@@ -3279,7 +3279,7 @@ Prototype :
[source,C]
----------------------------------------
const char *weechat_hashtable_get_string (struct t_hashtable *hashtable,
- void *property);
+ const char *property);
----------------------------------------
Paramètres :
@@ -6109,7 +6109,7 @@ weechat_hook_modifier ("2000|input_text_display", &modifier_cb, NULL);
----------------------------------------
Les types de "hooks" suivants autorisent une priorité : command, command_run,
-signal, hsignal, config, completion, modifier, info, infolist.
+signal, hsignal, config, completion, modifier, info, info_hashtable, infolist, hdata.
weechat_hook_command
^^^^^^^^^^^^^^^^^^^^
@@ -8303,6 +8303,63 @@ hook = weechat.hook_infolist("mon_infolist", "Mon infolist",
"my_infolist_cb", "")
----------------------------------------
+weechat_hook_hdata
+^^^^^^^^^^^^^^^^^^
+
+Accroche un hdata : le "callback" retournera un pointeur vers le hdata demandé.
+
+Prototype:
+
+[source,C]
+----------------------------------------
+struct t_hook *weechat_hook_hdata (const char *hdata_name,
+ const char *description,
+ struct t_hdata *(*callback)(void *data,
+ const char *hdata_name),
+ void *callback_data);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata_name' : nom du hdata
+ (priorité autorisée, voir la note sur la <<hook_priority,priorité>>)
+* 'description' : description
+* 'callback' : fonction appelée quand le hdata est demandé, paramètres et valeur
+ de retour :
+** 'void *data' : pointeur
+** 'const char *hdata_name' : nom du hdata
+** valeur de retour : hdata demandé
+* 'callback_data' : pointeur donné au "callback" lorsqu'il est appelé par
+ WeeChat
+
+Valeur de retour :
+
+* pointeur vers le nouveau "hook", NULL en cas d'erreur
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+struct t_hdata *
+my_hdata_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *mon_hdata;
+
+ /* construction du hdata */
+ /* ... */
+
+ return mon_hdata;
+}
+
+/* ajouts le hdata "mon_hdata" */
+struct t_hook *my_hdata = weechat_hook_hdata ("mon_hdata",
+ "Hdata pour ma structure",
+ &my_hdata_cb, NULL);
+----------------------------------------
+
+[NOTE]
+Cette fonction n'est pas disponible dans l'API script.
+
weechat_unhook
^^^^^^^^^^^^^^
@@ -11274,6 +11331,15 @@ weechat_infolist_get
Retourne une "infolist" de WeeChat ou d'une extension.
+[IMPORTANT]
+Le contenu d'une infolist est une duplication des données réelles. Donc si vous
+demandez une infolist avec beaucoup de données (comme "buffer_lines"), WeeChat
+allouera de la mémoire pour dupliquer toutes les données, et cela peut prendre
+du temps. +
+Au lieu d'utiliser une grosse infolist, il est préférable d'utiliser un hdata
+(mais l'infolist peut contenir plus de données que le hdata, qui contient des
+données brutes), voir <<hdata,hdata>>.
+
Prototype :
[source,C]
@@ -11733,6 +11799,861 @@ weechat.infolist_free(infolist)
weechat.infolist_free(infolist)
----------------------------------------
+[[hdata]]
+Hdata
+~~~~~
+
+Fonctions pour les hdata (accès brut aux données de WeeChat ou des extensions).
+
+[IMPORTANT]
+Le "hdata" fournit seulement un accès en lecture seule aux données. Il est
+*STRICTEMENT INTERDIT* d'écrire quelque chose dans une zone mémoire pointée par
+les variables du hdata.
+
+weechat_hdata_new
+^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Créé un "hdata".
+
+[NOTE]
+.hdata vs infolist
+========================================
+Le "hdata" est un moyen rapide de lire des données de WeeChat ou des extensions.
+Il est similaire à l'infolist, mais il y a quelques différences :
+
+* il est plus rapide et utilise moins de mémoire : accès direct aux données sans
+ duplication
+* il peut contenir des informations différentes de l'infolist : il contient les
+ données brutes des structures (l'infolist peut ajouter des données
+ supplémentaires pour plus de commodité)
+========================================
+
+Prototype :
+
+[source,C]
+----------------------------------------
+struct t_hdata *weechat_hdata_new (const char *hdata_name, const char *var_prev, const char *var_next);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata_name' : nom du hdata
+* 'var_prev' : nom de la variable dans la structure qui est un pointeur vers
+ l'élément précédent dans la liste (peut être NULL si une telle variable
+ n'existe pas)
+* 'var_next' : nom de la variable dans la structure qui est un pointeur vers
+ l'élément suivant dans la liste (peut être NULL si une telle variable
+ n'existe pas)
+
+Valeur de retour :
+
+* pointeur vers le nouveau "hdata"
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next");
+----------------------------------------
+
+[NOTE]
+Cette fonction n'est pas disponible dans l'API script.
+
+weechat_hdata_new_var
+^^^^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Créé une nouvelle variable dans le hdata.
+
+Prototype :
+
+[source,C]
+----------------------------------------
+void weechat_hdata_new_var (struct t_hdata *hdata, const char *name, int offset, int type);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'name' : nom de la variable
+* 'offset' : position (offset) de la variable dans la structure
+* 'type' : type de la variable, un parmi ceux-ci :
+** WEECHAT_HDATA_INTEGER
+** WEECHAT_HDATA_LONG
+** WEECHAT_HDATA_STRING
+** WEECHAT_HDATA_POINTER
+** WEECHAT_HDATA_TIME
+** WEECHAT_HDATA_OTHER
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+struct t_myplugin_list
+{
+ char *name;
+ struct t_gui_buffer *buffer;
+ int count;
+ struct t_myplugin_list *prev;
+ struct t_myplugin_list *next;
+};
+
+/* ... */
+
+struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next");
+weechat_hdata_new_var (hdata, "name", offsetof (struct t_myplugin_list, name), WEECHAT_HDATA_STRING);
+weechat_hdata_new_var (hdata, "buffer", offsetof (struct t_myplugin_list, buffer), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_var (hdata, "count", offsetof (struct t_myplugin_list, count), WEECHAT_HDATA_INTEGER);
+weechat_hdata_new_var (hdata, "prev", offsetof (struct t_myplugin_list, prev), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_var (hdata, "next", offsetof (struct t_myplugin_list, next), WEECHAT_HDATA_POINTER);
+----------------------------------------
+
+La macro "WEECHAT_HDATA_VAR" peut être utilisée pour raccourcir le code :
+
+[source,C]
+----------------------------------------
+WEECHAT_HDATA_VAR(struct t_myplugin_list, name, STRING);
+WEECHAT_HDATA_VAR(struct t_myplugin_list, buffer, POINTER);
+WEECHAT_HDATA_VAR(struct t_myplugin_list, count, INTEGER);
+WEECHAT_HDATA_VAR(struct t_myplugin_list, prev, POINTER);
+WEECHAT_HDATA_VAR(struct t_myplugin_list, next, POINTER);
+----------------------------------------
+
+[NOTE]
+Cette fonction n'est pas disponible dans l'API script.
+
+weechat_hdata_new_list
+^^^^^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Créé un nouveau pointer vers une liste dans le hdata.
+
+Prototype :
+
+[source,C]
+----------------------------------------
+void weechat_hdata_new_list (struct t_hdata *hdata, const char *name, void *pointer);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'name' : nom de la variable
+* 'pointer' : pointeur vers la liste
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+struct t_myplugin_list
+{
+ char *name;
+ struct t_gui_buffer *buffer;
+ int count;
+ struct t_myplugin_list *prev;
+ struct t_myplugin_list *next;
+};
+
+struct t_myplugin_list *buffers = NULL;
+struct t_myplugin_list *last_buffer = NULL;
+
+/* ... */
+
+struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next");
+weechat_hdata_new_var (hdata, "name", offsetof (struct t_myplugin_list, name), WEECHAT_HDATA_STRING);
+weechat_hdata_new_var (hdata, "buffer", offsetof (struct t_myplugin_list, buffer), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_var (hdata, "count", offsetof (struct t_myplugin_list, count), WEECHAT_HDATA_INTEGER);
+weechat_hdata_new_var (hdata, "prev", offsetof (struct t_myplugin_list, prev), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_var (hdata, "next", offsetof (struct t_myplugin_list, next), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_list (hdata, "buffers", &buffers);
+weechat_hdata_new_list (hdata, "last_buffer", &last_buffer);
+----------------------------------------
+
+La macro "WEECHAT_HDATA_LIST" peut être utilisée pour raccourcir le code :
+
+[source,C]
+----------------------------------------
+WEECHAT_HDATA_LIST(buffers);
+WEECHAT_HDATA_LIST(last_buffer);
+----------------------------------------
+
+[NOTE]
+Cette fonction n'est pas disponible dans l'API script.
+
+weechat_hdata_get
+^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Retourne un "hdata" pour une structure de WeeChat ou d'une extension.
+
+[NOTE]
+Le "hdata" ne contient aucune donnée, il s'agit seulement d'une hashtable avec
+la position (offset) des variables dans la structure. Cela signifie que vous
+aurez besoin de ce hdata et d'un pointeur vers un objet WeeChat ou d'une
+extension pour lire des données.
+
+Prototype :
+
+[source,C]
+----------------------------------------
+struct t_hdata *weechat_hdata_get (const char *hdata_name);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata_name' : nom du hdata :
+include::autogen/plugin_api/hdata.txt[]
+
+Valeur de retour :
+
+* pointeur vers le hdata, NULL en cas d'erreur
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("irc_server");
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+hdata = weechat.hdata_get(hdata_name)
+
+# exemple
+hdata = weechat.hdata_get("irc_server")
+----------------------------------------
+
+weechat_hdata_get_var_offset
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Retourne la position (offset) de la variable dans le hdata.
+
+Prototype :
+
+[source,C]
+----------------------------------------
+int weechat_hdata_get_var_offset (struct t_hdata *hdata, const char *name);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'name' : nom de la variable
+
+Valeur de retour :
+
+* position (offset) de la variable, 0 en cas d'erreur
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+int offset = weechat_hdata_get_var_offset (hdata, "name");
+----------------------------------------
+
+[NOTE]
+Cette fonction n'est pas disponible dans l'API script.
+
+weechat_hdata_get_var_type
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Retourne le type de la variable dans le hdata (sous forme d'entier).
+
+Prototype :
+
+[source,C]
+----------------------------------------
+int weechat_hdata_get_var_type (struct t_hdata *hdata, const char *name);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'name' : nom de la variable
+
+Valeur de retour :
+
+* type de la variable, -1 en cas d'erreur
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+int type = weechat_hdata_get_var_type (hdata, "name");
+switch (type)
+{
+ case WEECHAT_HDATA_INTEGER:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_LONG:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_STRING:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_POINTER:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_TIME:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_OTHER:
+ /* ... */
+ break;
+ default:
+ /* variable non trouvée */
+ break;
+}
+----------------------------------------
+
+[NOTE]
+Cette fonction n'est pas disponible dans l'API script.
+
+weechat_hdata_get_var_type_string
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Retourne le type de la variable dans le hdata (sous forme de chaîne).
+
+Prototype :
+
+[source,C]
+----------------------------------------
+const char *weechat_hdata_get_var_type_string (struct t_hdata *hdata, const char *name);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'name' : nom de la variable
+
+Valeur de retour :
+
+* type de la variable, NULL en cas d'erreur
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+weechat_printf (NULL, "type = %s",
+ weechat_hdata_get_var_type_string (hdata, "name"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+type = weechat.hdata_get_var_type_string(hdata, name)
+
+# exemple
+weechat.prnt("", "type = %s" % weechat.hdata_get_var_type_string("name"))
+----------------------------------------
+
+weechat_hdata_get_var
+^^^^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Retourne un pointeur vers le contenu de la variable dans le hdata.
+
+Prototype :
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_get_var (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'pointer' : pointeur vers un objet WeeChat ou d'une extension
+* 'name' : nom de la variable
+
+Valeur de retour :
+
+* pointeur vers le contenu de la variable, NULL en cas d'erreur
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+void *pointer = weechat_hdata_get_var (hdata, buffer, "name");
+----------------------------------------
+
+[NOTE]
+Cette fonction n'est pas disponible dans l'API script.
+
+weechat_hdata_get_var_at_offset
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Retourne un pointeur vers le contenu de la variable dans le hdata, en utilisant
+une position (offset).
+
+Prototype :
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_get_var_at_offset (struct t_hdata *hdata, void *pointer, int offset);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'pointer' : pointeur vers un objet WeeChat ou d'une extension
+* 'offset' : position (offset) de la variable
+
+Valeur de retour :
+
+* pointeur vers le contenu de la variable, NULL en cas d'erreur
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+int offset = weechat_hdata_get_var_offset (hdata, "name");
+void *pointer = weechat_hdata_get_var_at_offset (hdata, buffer, offset);
+----------------------------------------
+
+[NOTE]
+Cette fonction n'est pas disponible dans l'API script.
+
+weechat_hdata_get_list
+^^^^^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Retourne un pointeur de liste du hdata.
+
+Prototype :
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_get_list (struct t_hdata *hdata, const char *name);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'name' : nom de la liste
+
+Valeur de retour :
+
+* pointeur vers la liste, NULL en cas d'erreur
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffers = weechat_hdata_get_list (hdata, "gui_buffers");
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+list = weechat.hdata_get_list(hdata, name)
+
+# exemple
+hdata = weechat.hdata_get("buffer")
+buffers = weechat.hdata_get_list(hdata, "gui_buffers")
+----------------------------------------
+
+weechat_hdata_move
+^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Déplace le pointeur vers un autre élément dans la liste.
+
+Prototype :
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_move (struct t_hdata *hdata, void *pointer, int count);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'pointer' : pointeur vers un objet WeeChat ou d'une extension
+* 'count' : nombre de saut(s) à exécuter (entier négatif ou positif, différent
+ de 0)
+
+Valeur de retour :
+
+* pointeur vers l'élément atteint, NULL en cas d'erreur
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+
+/* se déplacer au tampon suivant, 2 fois */
+buffer = weechat_hdata_move (hdata, buffer, 2);
+
+/* se déplacer au tampon précédent */
+if (buffer)
+ buffer = weechat_hdata_move (hdata, buffer, -1);
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+pointer = weechat.hdata_move(hdata, pointer, count)
+
+# exemple
+hdata = weechat.hdata_get("buffer")
+buffer = weechat.buffer_search_main()
+
+# se déplacer au tampon suivant, 2 fois
+buffer = weechat.hdata_move(hdata, buffer, 2)
+
+# se déplacer au tampon précédent
+if buffer:
+ buffer = weechat.hdata_move(hdata, buffer, -1)
+----------------------------------------
+
+weechat_hdata_integer
+^^^^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Retourne la valeur de la variable dans la structure en utilisant le hdata, sous
+forme d'entier.
+
+Prototype :
+
+[source,C]
+----------------------------------------
+int weechat_hdata_integer (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'pointer' : pointeur vers un objet WeeChat ou d'une extension
+* 'name' : nom de la variable (doit être de type "integer")
+
+Valeur de retour :
+
+* valeur de la variable, sous forme d'entier
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+weechat_printf (NULL, "number = %d", weechat_hdata_integer (hdata, buffer, "number"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+value = weechat.hdata_integer(hdata, pointer, name)
+
+# exemple
+hdata = weechat.hdata_get("buffer")
+buffer = weechat.buffer_search_main()
+weechat.prnt("", "number = %d" % weechat.hdata_integer(hdata, buffer, "number"))
+----------------------------------------
+
+weechat_hdata_long
+^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Retourne la valeur de la variable dans la structure en utilisant le hdata, sous
+forme d'entier long.
+
+Prototype :
+
+[source,C]
+----------------------------------------
+long weechat_hdata_long (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'pointer' : pointeur vers un objet WeeChat ou d'une extension
+* 'name' : nom de la variable (doit être de type "long")
+
+Valeur de retour :
+
+* valeur de la variable, sous forme d'entier long
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+weechat_printf (NULL, "longvar = %ld", weechat_hdata_long (hdata, pointer, "longvar"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+value = weechat.hdata_long(hdata, pointer, name)
+
+# exemple
+weechat.prnt("", "longvar = %ld" % weechat.hdata_long(hdata, pointer, "longvar"))
+----------------------------------------
+
+weechat_hdata_string
+^^^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Retourne la valeur de la variable dans la structure en utilisant le hdata, sous
+forme de chaîne.
+
+Prototype :
+
+[source,C]
+----------------------------------------
+const char *weechat_hdata_string (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'pointer' : pointeur vers un objet WeeChat ou d'une extension
+* 'name' : nom de la variable (doit être de type "string")
+
+Valeur de retour :
+
+* valeur de la variable, sous forme de chaîne
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+weechat_printf (NULL, "name = %s", weechat_hdata_string (hdata, buffer, "name"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+value = weechat.hdata_string(hdata, pointer, name)
+
+# exemple
+hdata = weechat.hdata_get("buffer")
+buffer = weechat.buffer_search_main()
+weechat.prnt("", "name = %s" % weechat.hdata_string(hdata, buffer, "name"))
+----------------------------------------
+
+weechat_hdata_pointer
+^^^^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Retourne la valeur de la variable dans la structure en utilisant le hdata, sous
+forme de pointeur.
+
+Prototype :
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_pointer (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'pointer' : pointeur vers un objet WeeChat ou d'une extension
+* 'name' : nom de la variable (doit être de type "pointeur")
+
+Valeur de retour :
+
+* valeur de la variable, sous forme de pointeur
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+weechat_printf (NULL, "lines = %lx", weechat_hdata_pointer (hdata, buffer, "lines"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+value = weechat.hdata_pointer(hdata, pointer, name)
+
+# exemple
+hdata = weechat.hdata_get("buffer")
+buffer = weechat.buffer_search_main()
+weechat.prnt("", "lines = %lx" % weechat.hdata_pointer(hdata, buffer, "lines"))
+----------------------------------------
+
+weechat_hdata_time
+^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Retourne la valeur de la variable dans la structure en utilisant le hdata, sous
+forme de date/heure.
+
+Prototype :
+
+[source,C]
+----------------------------------------
+time_t weechat_hdata_time (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'pointer' : pointeur vers un objet WeeChat ou d'une extension
+* 'name' : nom de la variable (doit être de type "time")
+
+Valeur de retour :
+
+* valeur de la variable, sous forme de date/heure
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *ptr = weechat_buffer_search_main ();
+ptr = weechat_hdata_pointer (hdata, ptr, "lines");
+if (ptr)
+{
+ hdata = weechat_hdata_get ("lines");
+ ptr = weechat_hdata_pointer (hdata, ptr, "first_line");
+ if (ptr)
+ {
+ hdata = weechat_hdata_get ("line");
+ ptr = weechat_hdata_pointer (hdata, ptr, "data");
+ if (ptr)
+ {
+ hdata = weechat_hdata_get ("line_data");
+ time_t date = weechat_hdata_time (hdata, hdata, "date");
+ weechat_printf (NULL, "heure de la première ligne affichée = %s", ctime (&date));
+ }
+ }
+}
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+value = weechat.hdata_time(hdata, pointer, name)
+
+# exemple
+hdata = weechat.hdata_get("buffer")
+ptr = weechat.buffer_search_main()
+ptr = weechat.hdata_pointer(hdata, ptr, "lines")
+if ptr:
+ hdata = weechat.hdata_get("lines")
+ ptr = weechat.hdata_pointer(hdata, ptr, "first_line")
+ if ptr:
+ hdata = weechat.hdata_get("line")
+ ptr = weechat.hdata_pointer(hdata, ptr, "data")
+ if ptr:
+ hdata = weechat.hdata_get("line_data")
+ weechat.prnt("", "heure de la première ligne affichée = %s" % weechat.hdata_time(hdata, ptr, "date"))
+----------------------------------------
+
+weechat_hdata_get_string
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+_Nouveau dans la version 0.3.6._
+
+Retourne une valeur pour une propriété d'un hdata sous forme de chaîne.
+
+Prototype :
+
+[source,C]
+----------------------------------------
+const char *weechat_hdata_get_string (struct t_hdata *hdata, const char *property);
+----------------------------------------
+
+Paramètres :
+
+* 'hdata' : pointeur vers le hdata
+* 'property' : nom de la propriété :
+** 'var_keys' : chaîne avec la liste des clés pour les variables du hdata
+ (format : "key1,key2,key3")
+** 'var_values' : chaîne avec la liste des valeurs pour les variables du hdata
+ (format : "value1,value2,value3")
+** 'var_keys_values' : chaîne avec la liste des clés et valeurs pour les
+ variables du hdata (format : "key1:value1,key2:value2,key3:value3")
+** 'var_prev' : nom de la variable dans la structure qui est un pointeur vers
+ l'élément précédent dans la liste
+** 'var_next' : nom de la variable dans la structure qui est un pointeur vers
+ l'élément suivant dans la liste
+** 'list_keys' : chaîne avec la liste des clés pour les listes du hdata
+ (format : "key1,key2,key3")
+** 'list_values' : chaîne avec la liste des valeurs pour les listes du hdata
+ (format : "value1,value2,value3")
+** 'list_keys_values' : chaîne avec la liste des clés et valeurs pour les listes
+ du hdata (format : "key1:value1,key2:value2,key3:value3")
+
+Valeur de retour :
+
+* valeur de la propriété sous forme de chaîne
+
+Exemple en C :
+
+[source,C]
+----------------------------------------
+weechat_printf (NULL, "variables dans le hdata: %s" weechat_hdata_get_string (hdata, "var_keys"));
+weechat_printf (NULL, "listes dans le hdata: %s" weechat_hdata_get_string (hdata, "list_keys"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototype
+value = weechat.hdata_get_string(hdata, property)
+
+# exemple
+weechat.prnt("", "variables dans le hdata: %s" % weechat.hdata_get_string(hdata, "var_keys"))
+weechat.prnt("", "listes dans le hdata: %s" % weechat.hdata_get_string(hdata, "list_keys"))
+----------------------------------------
+
[[upgrade]]
Mise à jour
~~~~~~~~~~~
diff --git a/doc/it/autogen/plugin_api/hdata.txt b/doc/it/autogen/plugin_api/hdata.txt
new file mode 100644
index 000000000..dfe1344d0
--- /dev/null
+++ b/doc/it/autogen/plugin_api/hdata.txt
@@ -0,0 +1,659 @@
+[width="100%",cols="^1,^2,5,5,5",options="header"]
+|========================================
+| Plugin | Nome | Descrizione | Variables | Lists
+
+| irc | irc_channel | irc channel |
+ 'type' (integer) +
+ 'name' (string) +
+ 'topic' (string) +
+ 'modes' (string) +
+ 'limit' (integer) +
+ 'key' (string) +
+ 'checking_away' (integer) +
+ 'away_message' (string) +
+ 'has_quit_server' (integer) +
+ 'cycle' (integer) +
+ 'part' (integer) +
+ 'display_creation_date' (integer) +
+ 'nick_completion_reset' (integer) +
+ 'pv_remote_nick_color' (string) +
+ 'hook_autorejoin' (pointer) +
+ 'nicks_count' (integer) +
+ 'nicks' (pointer) +
+ 'last_nick' (pointer) +
+ 'nicks_speaking' (pointer) +
+ 'nicks_speaking_time' (pointer) +
+ 'last_nick_speaking_time' (pointer) +
+ 'buffer' (pointer) +
+ 'buffer_as_string' (string) +
+ 'prev_channel' (pointer) +
+ 'next_channel' (pointer) |
+ -
+
+| irc | irc_channel_speaking | irc channel_speaking |
+ 'nick' (string) +
+ 'time_last_message' (time) +
+ 'prev_nick' (pointer) +
+ 'next_nick' (pointer) |
+ -
+
+| irc | irc_ignore | irc ignore |
+ 'number' (integer) +
+ 'mask' (string) +
+ 'regex_mask' (pointer) +
+ 'server' (string) +
+ 'channel' (string) +
+ 'prev_ignore' (pointer) +
+ 'next_ignore' (pointer) |
+ 'irc_ignore_list' +
+ 'last_irc_ignore'
+
+| irc | irc_nick | irc nick |
+ 'name' (string) +
+ 'host' (string) +
+ 'prefixes' (string) +
+ 'prefix' (string) +
+ 'away' (integer) +
+ 'color' (string) +
+ 'prev_nick' (pointer) +
+ 'next_nick' (pointer) |
+ -
+
+| irc | irc_notify | irc notify |
+ 'server' (pointer) +
+ 'nick' (string) +
+ 'check_away' (integer) +
+ 'is_on_server' (integer) +
+ 'away_message' (string) +
+ 'ison_received' (integer) +
+ 'prev_notify' (pointer) +
+ 'next_notify' (pointer) |
+ -
+
+| irc | irc_redirect | irc redirect |
+ 'server' (pointer) +
+ 'pattern' (string) +
+ 'signal' (string) +
+ 'count' (integer) +
+ 'current_count' (integer) +
+ 'string' (string) +
+ 'timeout' (integer) +
+ 'command' (string) +
+ 'start_time' (time) +
+ 'cmd_start' (pointer) +
+ 'cmd_stop' (pointer) +
+ 'cmd_extra' (pointer) +
+ 'cmd_start_received' (integer) +
+ 'cmd_stop_received' (integer) +
+ 'cmd_filter' (pointer) +
+ 'output' (string) +
+ 'output_size' (integer) +
+ 'prev_redirect' (pointer) +
+ 'next_redirect' (pointer) |
+ -
+
+| irc | irc_redirect_pattern | pattern for irc redirect |
+ 'name' (string) +
+ 'temp_pattern' (integer) +
+ 'timeout' (integer) +
+ 'cmd_start' (string) +
+ 'cmd_stop' (string) +
+ 'cmd_extra' (string) +
+ 'prev_redirect' (pointer) +
+ 'next_redirect' (pointer) |
+ 'irc_redirect_patterns' +
+ 'last_irc_redirect_pattern'
+
+| irc | irc_server | irc server |
+ 'name' (string) +
+ 'options' (pointer) +
+ 'temp_server' (integer) +
+ 'reloading_from_config' (integer) +
+ 'reloaded_from_config' (integer) +
+ 'addresses_count' (integer) +
+ 'addresses_array' (pointer) +
+ 'ports_array' (pointer) +
+ 'index_current_address' (integer) +
+ 'current_address' (string) +
+ 'current_ip' (string) +
+ 'current_port' (integer) +
+ 'sock' (integer) +
+ 'hook_connect' (pointer) +
+ 'hook_fd' (pointer) +
+ 'hook_timer_connection' (pointer) +
+ 'hook_timer_sasl' (pointer) +
+ 'is_connected' (integer) +
+ 'ssl_connected' (integer) +
+ 'gnutls_sess' (other) +
+ 'tls_cert' (other) +
+ 'tls_cert_key' (other) +
+ 'unterminated_message' (string) +
+ 'nicks_count' (integer) +
+ 'nicks_array' (pointer) +
+ 'nick_first_tried' (integer) +
+ 'nick' (string) +
+ 'nick_modes' (string) +
+ 'isupport' (string) +
+ 'prefix_modes' (string) +
+ 'prefix_chars' (string) +
+ 'reconnect_delay' (integer) +
+ 'reconnect_start' (time) +
+ 'command_time' (time) +
+ 'reconnect_join' (integer) +
+ 'disable_autojoin' (integer) +
+ 'is_away' (integer) +
+ 'away_message' (string) +
+ 'away_time' (time) +
+ 'lag' (integer) +
+ 'lag_check_time' (other) +
+ 'lag_next_check' (time) +
+ 'lag_last_refresh' (time) +
+ 'cmd_list_regexp' (pointer) +
+ 'last_user_message' (time) +
+ 'last_away_check' (time) +
+ 'outqueue' (pointer) +
+ 'last_outqueue' (pointer) +
+ 'redirects' (pointer) +
+ 'last_redirect' (pointer) +
+ 'notify_list' (pointer) +
+ 'last_notify' (pointer) +
+ 'manual_joins' (pointer) +
+ 'buffer' (pointer) +
+ 'buffer_as_string' (string) +
+ 'channels' (pointer) +
+ 'last_channel' (pointer) +
+ 'prev_server' (pointer) +
+ 'next_server' (pointer) |
+ 'irc_servers' +
+ 'last_irc_server'
+
+| weechat | bar | bar |
+ 'name' (string) +
+ 'options' (pointer) +
+ 'conditions_count' (integer) +
+ 'conditions_array' (pointer) +
+ 'items_count' (integer) +
+ 'items_subcount' (pointer) +
+ 'items_array' (pointer) +
+ 'bar_window' (pointer) +
+ 'bar_refresh_needed' (integer) +
+ 'prev_bar' (pointer) +
+ 'next_bar' (pointer) |
+ 'gui_bars' +
+ 'last_gui_bar'
+
+| weechat | bar_item | bar item |
+ 'plugin' (pointer) +
+ 'name' (string) +
+ 'build_callback' (pointer) +
+ 'build_callback_data' (pointer) +
+ 'prev_item' (pointer) +
+ 'next_item' (pointer) |
+ 'gui_bar_items' +
+ 'last_gui_bar_item'
+
+| weechat | buffer | buffer |
+ 'plugin' (pointer) +
+ 'plugin_name_for_upgrade' (string) +
+ 'merge_for_upgrade' (pointer) +
+ 'number' (integer) +
+ 'layout_number' (integer) +
+ 'layout_applied' (integer) +
+ 'name' (string) +
+ 'short_name' (string) +
+ 'type' (integer) +
+ 'notify' (integer) +
+ 'num_displayed' (integer) +
+ 'active' (integer) +
+ 'print_hooks_enabled' (integer) +
+ 'close_callback' (pointer) +
+ 'close_callback_data' (pointer) +
+ 'title' (string) +
+ 'own_lines' (pointer) +
+ 'mixed_lines' (pointer) +
+ 'lines' (pointer) +
+ 'time_for_each_line' (integer) +
+ 'chat_refresh_needed' (integer) +
+ 'nicklist' (integer) +
+ 'nicklist_case_sensitive' (integer) +
+ 'nicklist_root' (pointer) +
+ 'nicklist_max_length' (integer) +
+ 'nicklist_display_groups' (integer) +
+ 'nicklist_visible_count' (integer) +
+ 'input' (integer) +
+ 'input_callback' (pointer) +
+ 'input_callback_data' (pointer) +
+ 'input_get_unknown_commands' (integer) +
+ 'input_buffer' (string) +
+ 'input_buffer_alloc' (integer) +
+ 'input_buffer_size' (integer) +
+ 'input_buffer_length' (integer) +
+ 'input_buffer_pos' (integer) +
+ 'input_buffer_1st_display' (integer) +
+ 'input_undo_snap' (pointer) +
+ 'input_undo' (pointer) +
+ 'last_input_undo' (pointer) +
+ 'ptr_input_undo' (pointer) +
+ 'input_undo_count' (integer) +
+ 'completion' (pointer) +
+ 'history' (pointer) +
+ 'last_history' (pointer) +
+ 'ptr_history' (pointer) +
+ 'num_history' (integer) +
+ 'text_search' (integer) +
+ 'text_search_exact' (integer) +
+ 'text_search_found' (integer) +
+ 'text_search_input' (string) +
+ 'highlight_words' (string) +
+ 'highlight_tags' (string) +
+ 'highlight_tags_count' (integer) +
+ 'highlight_tags_array' (pointer) +
+ 'hotlist_max_level_nicks' (pointer) +
+ 'keys' (pointer) +
+ 'last_key' (pointer) +
+ 'keys_count' (integer) +
+ 'local_variables' (pointer) +
+ 'prev_buffer' (pointer) +
+ 'next_buffer' (pointer) |
+ 'gui_buffers' +
+ 'last_gui_buffer'
+
+| weechat | completion | completion |
+ 'buffer' (pointer) +
+ 'context' (integer) +
+ 'base_command' (string) +
+ 'base_command_arg_index' (integer) +
+ 'base_word' (string) +
+ 'base_word_pos' (integer) +
+ 'position' (integer) +
+ 'args' (string) +
+ 'direction' (integer) +
+ 'add_space' (integer) +
+ 'force_partial_completion' (integer) +
+ 'completion_list' (pointer) +
+ 'word_found' (string) +
+ 'word_found_is_nick' (integer) +
+ 'position_replace' (integer) +
+ 'diff_size' (integer) +
+ 'diff_length' (integer) +
+ 'partial_completion_list' (pointer) +
+ 'last_partial_completion' (pointer) |
+ -
+
+| weechat | completion_partial | partial completion |
+ 'word' (string) +
+ 'count' (integer) +
+ 'prev_item' (pointer) +
+ 'next_item' (pointer) |
+ -
+
+| weechat | config_file | config file |
+ 'plugin' (pointer) +
+ 'name' (string) +
+ 'filename' (string) +
+ 'file' (pointer) +
+ 'callback_reload' (pointer) +
+ 'callback_reload_data' (pointer) +
+ 'sections' (pointer) +
+ 'last_section' (pointer) +
+ 'prev_config' (pointer) +
+ 'next_config' (pointer) |
+ 'config_files' +
+ 'last_config_file'
+
+| weechat | config_option | config option |
+ 'config_file' (pointer) +
+ 'section' (pointer) +
+ 'name' (string) +
+ 'type' (integer) +
+ 'description' (string) +
+ 'string_values' (pointer) +
+ 'min' (integer) +
+ 'max' (integer) +
+ 'default_value' (pointer) +
+ 'value' (pointer) +
+ 'null_value_allowed' (integer) +
+ 'callback_check_value' (pointer) +
+ 'callback_check_value_data' (pointer) +
+ 'callback_change' (pointer) +
+ 'callback_change_data' (pointer) +
+ 'callback_delete' (pointer) +
+ 'callback_delete_data' (pointer) +
+ 'loaded' (integer) +
+ 'prev_option' (pointer) +
+ 'next_option' (pointer) |
+ -
+
+| weechat | config_section | config section |
+ 'config_file' (pointer) +
+ 'name' (string) +
+ 'user_can_add_options' (integer) +
+ 'user_can_delete_options' (integer) +
+ 'callback_read' (pointer) +
+ 'callback_read_data' (pointer) +
+ 'callback_write' (pointer) +
+ 'callback_write_data' (pointer) +
+ 'callback_write_default' (pointer) +
+ 'callback_write_default_data' (pointer) +
+ 'callback_create_option' (pointer) +
+ 'callback_create_option_data' (pointer) +
+ 'callback_delete_option' (pointer) +
+ 'callback_delete_option_data' (pointer) +
+ 'options' (pointer) +
+ 'last_option' (pointer) +
+ 'prev_section' (pointer) +
+ 'next_section' (pointer) |
+ -
+
+| weechat | filter | filter |
+ 'enabled' (integer) +
+ 'name' (string) +
+ 'buffer_name' (string) +
+ 'num_buffers' (integer) +
+ 'buffers' (pointer) +
+ 'tags' (string) +
+ 'tags_count' (integer) +
+ 'tags_array' (pointer) +
+ 'regex' (string) +
+ 'regex_prefix' (pointer) +
+ 'regex_message' (pointer) +
+ 'prev_filter' (pointer) +
+ 'next_filter' (pointer) |
+ 'gui_filters' +
+ 'last_gui_filter'
+
+| weechat | history | history of commands in buffer |
+ 'text' (string) +
+ 'next_history' (pointer) +
+ 'prev_history' (pointer) |
+ -
+
+| weechat | hook | hook (variables common to all hook types) |
+ 'plugin' (pointer) +
+ 'type' (integer) +
+ 'deleted' (integer) +
+ 'running' (integer) +
+ 'priority' (integer) +
+ 'callback_data' (pointer) +
+ 'hook_data' (pointer) +
+ 'prev_hook' (pointer) +
+ 'next_hook' (pointer) |
+ -
+
+| weechat | hook_command | hook of type "command" |
+ 'callback' (pointer) +
+ 'command' (string) +
+ 'description' (string) +
+ 'args' (string) +
+ 'args_description' (string) +
+ 'completion' (string) +
+ 'cplt_num_templates' (integer) +
+ 'cplt_templates' (pointer) +
+ 'cplt_templates_static' (pointer) +
+ 'cplt_template_num_args' (pointer) +
+ 'cplt_template_args' (pointer) +
+ 'cplt_template_num_args_concat' (integer) +
+ 'cplt_template_args_concat' (pointer) |
+ 'last_weechat_hook_command' +
+ 'weechat_hooks_command'
+
+| weechat | hook_command_run | hook of type "command_run" |
+ 'callback' (pointer) +
+ 'command' (string) |
+ 'last_weechat_hook_command_run' +
+ 'weechat_hooks_command_run'
+
+| weechat | hook_completion | hook of type "completion" |
+ 'callback' (pointer) +
+ 'completion_item' (string) +
+ 'description' (string) |
+ 'last_weechat_hook_completion' +
+ 'weechat_hooks_completion'
+
+| weechat | hook_config | hook of type "config" |
+ 'callback' (pointer) +
+ 'option' (string) |
+ 'last_weechat_hook_config' +
+ 'weechat_hooks_config'
+
+| weechat | hook_connect | hook of type "connect" |
+ 'callback' (pointer) +
+ 'proxy' (string) +
+ 'address' (string) +
+ 'port' (integer) +
+ 'sock' (integer) +
+ 'ipv6' (integer) +
+ 'gnutls_sess' (pointer) +
+ 'gnutls_cb' (pointer) +
+ 'gnutls_dhkey_size' (integer) +
+ 'gnutls_priorities' (string) +
+ 'local_hostname' (string) +
+ 'child_read' (integer) +
+ 'child_write' (integer) +
+ 'child_pid' (other) +
+ 'hook_fd' (pointer) +
+ 'handshake_hook_fd' (pointer) +
+ 'handshake_hook_timer' (pointer) +
+ 'handshake_fd_flags' (integer) +
+ 'handshake_ip_address' (string) |
+ 'last_weechat_hook_connect' +
+ 'weechat_hooks_connect'
+
+| weechat | hook_fd | hook of type "fd" |
+ 'callback' (pointer) +
+ 'fd' (integer) +
+ 'flags' (integer) |
+ 'last_weechat_hook_fd' +
+ 'weechat_hooks_fd'
+
+| weechat | hook_hdata | hook of type "hdata" |
+ 'callback' (pointer) +
+ 'hdata_name' (string) +
+ 'description' (string) |
+ 'last_weechat_hook_hdata' +
+ 'weechat_hooks_hdata'
+
+| weechat | hook_hsignal | hook of type "hsignal" |
+ 'callback' (pointer) +
+ 'signal' (string) |
+ 'last_weechat_hook_hsignal' +
+ 'weechat_hooks_hsignal'
+
+| weechat | hook_info | hook of type "info" |
+ 'callback' (pointer) +
+ 'info_name' (string) +
+ 'description' (string) +
+ 'args_description' (string) |
+ 'last_weechat_hook_info' +
+ 'weechat_hooks_info'
+
+| weechat | hook_info_hashtable | hook of type "info_hashtable" |
+ 'callback' (pointer) +
+ 'info_name' (string) +
+ 'description' (string) +
+ 'args_description' (string) +
+ 'output_description' (string) |
+ 'last_weechat_hook_info_hashtable' +
+ 'weechat_hooks_info_hashtable'
+
+| weechat | hook_infolist | hook of type "infolist" |
+ 'callback' (pointer) +
+ 'infolist_name' (string) +
+ 'description' (string) +
+ 'pointer_description' (string) +
+ 'args_description' (string) |
+ 'last_weechat_hook_infolist' +
+ 'weechat_hooks_infolist'
+
+| weechat | hook_modifier | hook of type "modifier" |
+ 'callback' (pointer) +
+ 'modifier' (string) |
+ 'last_weechat_hook_modifier' +
+ 'weechat_hooks_modifier'
+
+| weechat | hook_print | hook of type "print" |
+ 'callback' (pointer) +
+ 'buffer' (pointer) +
+ 'tags_count' (integer) +
+ 'tags_array' (pointer) +
+ 'message' (string) +
+ 'strip_colors' (integer) |
+ 'last_weechat_hook_print' +
+ 'weechat_hooks_print'
+
+| weechat | hook_process | hook of type "process" |
+ 'callback' (pointer) +
+ 'command' (string) +
+ 'timeout' (long) +
+ 'child_read' (pointer) +
+ 'child_write' (pointer) +
+ 'child_pid' (other) +
+ 'hook_fd' (pointer) +
+ 'hook_timer' (pointer) +
+ 'buffer' (pointer) +
+ 'buffer_size' (pointer) |
+ 'last_weechat_hook_process' +
+ 'weechat_hooks_process'
+
+| weechat | hook_signal | hook of type "signal" |
+ 'callback' (pointer) +
+ 'signal' (string) |
+ 'last_weechat_hook_signal' +
+ 'weechat_hooks_signal'
+
+| weechat | hook_timer | hook of type "timer" |
+ 'callback' (pointer) +
+ 'interval' (long) +
+ 'align_second' (integer) +
+ 'remaining_calls' (integer) +
+ 'last_exec' (other) +
+ 'next_exec' (other) |
+ 'last_weechat_hook_timer' +
+ 'weechat_hooks_timer'
+
+| weechat | input_undo | undo for input line |
+ 'data' (string) +
+ 'pos' (integer) +
+ 'prev_undo' (pointer) +
+ 'next_undo' (pointer) |
+ -
+
+| weechat | key | key |
+ 'key' (string) +
+ 'command' (string) +
+ 'prev_key' (pointer) +
+ 'next_key' (pointer) |
+ 'gui_default_keys' +
+ 'gui_keys' +
+ 'last_gui_default_key' +
+ 'last_gui_key'
+
+| weechat | line | line |
+ 'data' (pointer) +
+ 'prev_line' (pointer) +
+ 'next_line' (pointer) |
+ -
+
+| weechat | line_data | line data |
+ 'buffer' (pointer) +
+ 'y' (integer) +
+ 'date' (time) +
+ 'date_printed' (time) +
+ 'str_time' (string) +
+ 'tags_count' (integer) +
+ 'tags_array' (pointer) +
+ 'displayed' (integer) +
+ 'highlight' (integer) +
+ 'refresh_needed' (integer) +
+ 'prefix' (string) +
+ 'prefix_length' (integer) +
+ 'message' (string) |
+ -
+
+| weechat | lines | lines |
+ 'first_line' (pointer) +
+ 'last_line' (pointer) +
+ 'last_read_line' (pointer) +
+ 'lines_count' (integer) +
+ 'first_line_not_read' (integer) +
+ 'lines_hidden' (integer) +
+ 'buffer_max_length' (integer) +
+ 'prefix_max_length' (integer) |
+ -
+
+| weechat | nick | nick in nicklist |
+ 'group' (pointer) +
+ 'name' (string) +
+ 'color' (string) +
+ 'prefix' (string) +
+ 'prefix_color' (string) +
+ 'visible' (integer) +
+ 'prev_nick' (pointer) +
+ 'next_nick' (pointer) |
+ -
+
+| weechat | nick_group | group in nicklist |
+ 'name' (string) +
+ 'color' (string) +
+ 'visible' (integer) +
+ 'level' (integer) +
+ 'parent' (pointer) +
+ 'childs' (pointer) +
+ 'last_child' (pointer) +
+ 'nicks' (pointer) +
+ 'last_nick' (pointer) +
+ 'prev_group' (pointer) +
+ 'next_group' (pointer) |
+ -
+
+| weechat | window | window |
+ 'win_x' (integer) +
+ 'win_y' (integer) +
+ 'win_width' (integer) +
+ 'win_height' (integer) +
+ 'win_width_pct' (integer) +
+ 'win_height_pct' (integer) +
+ 'win_chat_x' (integer) +
+ 'win_chat_y' (integer) +
+ 'win_chat_width' (integer) +
+ 'win_chat_height' (integer) +
+ 'win_chat_cursor_x' (integer) +
+ 'win_chat_cursor_y' (integer) +
+ 'bar_windows' (pointer) +
+ 'last_bar_window' (pointer) +
+ 'refresh_needed' (integer) +
+ 'gui_objects' (pointer) +
+ 'buffer' (pointer) +
+ 'layout_plugin_name' (string) +
+ 'layout_buffer_name' (string) +
+ 'scroll' (pointer) +
+ 'ptr_tree' (pointer) +
+ 'prev_window' (pointer) +
+ 'next_window' (pointer) |
+ 'gui_current_window' +
+ 'gui_windows' +
+ 'last_gui_window'
+
+| weechat | window_scroll | scroll info in window |
+ 'buffer' (pointer) +
+ 'first_line_displayed' (integer) +
+ 'start_line' (pointer) +
+ 'start_line_pos' (integer) +
+ 'scrolling' (integer) +
+ 'start_col' (integer) +
+ 'lines_after' (integer) +
+ 'reset_allowed' (integer) +
+ 'prev_scroll' (pointer) +
+ 'next_scroll' (pointer) |
+ -
+
+| weechat | window_tree | tree of windows |
+ 'parent_node' (pointer) +
+ 'split_pct' (integer) +
+ 'split_horizontal' (integer) +
+ 'child1' (pointer) +
+ 'child2' (pointer) +
+ 'window' (pointer) |
+ 'gui_windows_tree'
+
+|========================================
diff --git a/doc/it/autogen/user/weechat_commands.txt b/doc/it/autogen/user/weechat_commands.txt
index 3aa85a337..5face207d 100644
--- a/doc/it/autogen/user/weechat_commands.txt
+++ b/doc/it/autogen/user/weechat_commands.txt
@@ -145,7 +145,7 @@ comando: comando da eseguire (una '/' viene aggiunta automaticamente se non trov
/debug list
set <plugin> <level>
dump [<plugin>]
- buffer|color|infolists|memory|term|windows
+ buffer|color|hdata|infolists|memory|term|windows
list: list plugins with debug levels
set: set debug level for plugin
@@ -154,6 +154,7 @@ comando: comando da eseguire (una '/' viene aggiunta automaticamente se non trov
dump: save memory dump in WeeChat log file (same dump is written when WeeChat crashes)
buffer: dump buffer content with hexadecimal values in log file
color: display infos about current color pairs
+ hdata: display infos about hdata
infolists: display infos about infolists
memory: display infos about memory usage
term: display infos about terminal
diff --git a/doc/it/weechat_plugin_api.it.txt b/doc/it/weechat_plugin_api.it.txt
index 3a1d2e078..0abdc74be 100644
--- a/doc/it/weechat_plugin_api.it.txt
+++ b/doc/it/weechat_plugin_api.it.txt
@@ -3237,7 +3237,7 @@ Prototipo:
[source,C]
----------------------------------------
const char *weechat_hashtable_get_string (struct t_hashtable *hashtable,
- void *property);
+ const char *property);
----------------------------------------
Argomenti:
@@ -6050,7 +6050,8 @@ weechat_hook_modifier ("2000|input_text_display", &modifier_cb, NULL);
----------------------------------------
I tipi di hook che seguono consentono la priorità: command, command_run,
-signal, hsignal, config.
+signal, hsignal, config, completion, modifier, info, info_hashtable, infolist,
+hdata.
weechat_hook_command
^^^^^^^^^^^^^^^^^^^^
@@ -8225,6 +8226,63 @@ hook = weechat.hook_infolist("my_infolist", "Infolist with some data",
"my_infolist_cb", "")
----------------------------------------
+// TRANSLATION MISSING
+weechat_hook_hdata
+^^^^^^^^^^^^^^^^^^
+
+Hook a hdata: callback will return pointer to hdata asked.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+struct t_hook *weechat_hook_hdata (const char *hdata_name,
+ const char *description,
+ struct t_hdata *(*callback)(void *data,
+ const char *hdata_name),
+ void *callback_data);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata_name': name of hdata
+ (priority allowed, see note about <<hook_priority,priority>>)
+* 'description': description
+* 'callback': function called when hdata is asked, arguments and return
+ value:
+** 'void *data': pointer
+** 'const char *hdata_name': name of hdata
+** return value: hdata asked
+* 'callback_data': pointer given to callback when it is called by WeeChat
+
+Valore restituito:
+
+* pointer to new hook, NULL if error occured
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+struct t_hdata *
+my_hdata_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *my_hdata;
+
+ /* build hdata */
+ /* ... */
+
+ return my_hdata;
+}
+
+/* add hdata "my_hdata" */
+struct t_hook *my_hdata = weechat_hook_hdata ("my_hdata",
+ "Hdata for my structure",
+ &my_hdata_cb, NULL);
+----------------------------------------
+
+[NOTE]
+Questa funzione non è disponibile nelle API per lo scripting.
+
weechat_unhook
^^^^^^^^^^^^^^
@@ -11190,6 +11248,14 @@ weechat_infolist_get
Restituisce una lista info da WeeChat o da un plugin.
+[IMPORTANT]
+// TRANSLATION MISSING
+Content of infolist is a duplication of actual data. So if you are asking
+infolist with lot of data (like "buffer_lines"), WeeChat will allocate memory
+to duplicate all data, and this can take some time. +
+Instead of using big infolist, it is preferable to use hdata (but infolist may
+have more info than hdata, which is raw data), see <<hdata,hdata>>.
+
Prototipo:
[source,C]
@@ -11650,6 +11716,867 @@ weechat.infolist_free(infolist)
weechat.infolist_free(infolist)
----------------------------------------
+[[hdata]]
+Hdata
+~~~~~
+
+// TRANSLATION MISSING
+Functions for hdata (raw access to WeeChat or plugins data).
+
+[IMPORTANT]
+Hdata provides read-only access to data. It is *STRICTLY FORBIDDEN* to write
+something in memory pointed by hdata variables.
+
+// TRANSLATION MISSING
+weechat_hdata_new
+^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Create a new hdata.
+
+[NOTE]
+.hdata vs infolist
+========================================
+Hdata is a fast way to read WeeChat or plugins data. It is similar to
+infolist, but there are some differences:
+
+* it is faster and uses less memory: direct read of data without duplication
+* it may have different info than infolist: it only raw data in structures
+ (infolist may add some extra data for convenience)
+========================================
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+struct t_hdata *weechat_hdata_new (const char *hdata_name, const char *var_prev, const char *var_next);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata_name': name of hdata
+* 'var_prev': name of variable in structure which is a pointer to previous
+ element in list (may be NULL if no such variable is available)
+* 'var_next': name of variable in structure which is a pointer to next
+ element in list (may be NULL if no such variable is available)
+
+Valore restituito:
+
+* pointer to new hdata
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next");
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+// TRANSLATION MISSING
+weechat_hdata_new_var
+^^^^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Create a new variable in hdata.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+void weechat_hdata_new_var (struct t_hdata *hdata, const char *name, int offset, int type);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'name': variable name
+* 'offset': offset of variable in structure
+* 'type': variable type, one of:
+** WEECHAT_HDATA_INTEGER
+** WEECHAT_HDATA_LONG
+** WEECHAT_HDATA_STRING
+** WEECHAT_HDATA_POINTER
+** WEECHAT_HDATA_TIME
+** WEECHAT_HDATA_OTHER
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+struct t_myplugin_list
+{
+ char *name;
+ struct t_gui_buffer *buffer;
+ int count;
+ struct t_myplugin_list *prev;
+ struct t_myplugin_list *next;
+};
+
+/* ... */
+
+struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next");
+weechat_hdata_new_var (hdata, "name", offsetof (struct t_myplugin_list, name), WEECHAT_HDATA_STRING);
+weechat_hdata_new_var (hdata, "buffer", offsetof (struct t_myplugin_list, buffer), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_var (hdata, "count", offsetof (struct t_myplugin_list, count), WEECHAT_HDATA_INTEGER);
+weechat_hdata_new_var (hdata, "prev", offsetof (struct t_myplugin_list, prev), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_var (hdata, "next", offsetof (struct t_myplugin_list, next), WEECHAT_HDATA_POINTER);
+----------------------------------------
+
+The macro "WEECHAT_HDATA_VAR" can be used to shorten code:
+
+[source,C]
+----------------------------------------
+WEECHAT_HDATA_VAR(struct t_myplugin_list, name, STRING);
+WEECHAT_HDATA_VAR(struct t_myplugin_list, buffer, POINTER);
+WEECHAT_HDATA_VAR(struct t_myplugin_list, count, INTEGER);
+WEECHAT_HDATA_VAR(struct t_myplugin_list, prev, POINTER);
+WEECHAT_HDATA_VAR(struct t_myplugin_list, next, POINTER);
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+// TRANSLATION MISSING
+weechat_hdata_new_list
+^^^^^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Create a new list pointer in hdata.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+void weechat_hdata_new_list (struct t_hdata *hdata, const char *name, void *pointer);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'name': variable name
+* 'pointer': list pointer
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+struct t_myplugin_list
+{
+ char *name;
+ struct t_gui_buffer *buffer;
+ int count;
+ struct t_myplugin_list *prev;
+ struct t_myplugin_list *next;
+};
+
+struct t_myplugin_list *buffers = NULL;
+struct t_myplugin_list *last_buffer = NULL;
+
+/* ... */
+
+struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next");
+weechat_hdata_new_var (hdata, "name", offsetof (struct t_myplugin_list, name), WEECHAT_HDATA_STRING);
+weechat_hdata_new_var (hdata, "buffer", offsetof (struct t_myplugin_list, buffer), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_var (hdata, "count", offsetof (struct t_myplugin_list, count), WEECHAT_HDATA_INTEGER);
+weechat_hdata_new_var (hdata, "prev", offsetof (struct t_myplugin_list, prev), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_var (hdata, "next", offsetof (struct t_myplugin_list, next), WEECHAT_HDATA_POINTER);
+weechat_hdata_new_list (hdata, "buffers", &buffers);
+weechat_hdata_new_list (hdata, "last_buffer", &last_buffer);
+----------------------------------------
+
+The macro "WEECHAT_HDATA_LIST" can be used to shorten code:
+
+[source,C]
+----------------------------------------
+WEECHAT_HDATA_LIST(buffers);
+WEECHAT_HDATA_LIST(last_buffer);
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+// TRANSLATION MISSING
+weechat_hdata_get
+^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Return hdata for a WeeChat or plugin structure.
+
+[NOTE]
+Hdata does not contain data, it's only a hashtable with position of variables
+in structure. That means you will need this hdata and a pointer to a
+WeeChat/plugin object to read some data.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+struct t_hdata *weechat_hdata_get (const char *hdata_name);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata_name': name of hdata:
+include::autogen/plugin_api/hdata.txt[]
+
+Valore restituito:
+
+* pointer to hdata, NULL if an error occured
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("irc_server");
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototipo
+hdata = weechat.hdata_get(hdata_name)
+
+# esempio
+hdata = weechat.hdata_get("irc_server")
+----------------------------------------
+
+// TRANSLATION MISSING
+weechat_hdata_get_var_offset
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Return offset of variable in hdata.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+int weechat_hdata_get_var_offset (struct t_hdata *hdata, const char *name);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'name': variable name
+
+Valore restituito:
+
+* variable offset, 0 if an error occured
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+int offset = weechat_hdata_get_var_offset (hdata, "name");
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+// TRANSLATION MISSING
+weechat_hdata_get_var_type
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Return type of variable in hdata (as integer).
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+int weechat_hdata_get_var_type (struct t_hdata *hdata, const char *name);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'name': variable name
+
+Valore restituito:
+
+* variable type, -1 if an error occured
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+int type = weechat_hdata_get_var_type (hdata, "name");
+switch (type)
+{
+ case WEECHAT_HDATA_INTEGER:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_LONG:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_STRING:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_POINTER:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_TIME:
+ /* ... */
+ break;
+ case WEECHAT_HDATA_OTHER:
+ /* ... */
+ break;
+ default:
+ /* variable not found */
+ break;
+}
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+// TRANSLATION MISSING
+weechat_hdata_get_var_type_string
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Return type of variable in hdata (as string).
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+const char *weechat_hdata_get_var_type_string (struct t_hdata *hdata, const char *name);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'name': variable name
+
+Valore restituito:
+
+* variable type, NULL if an error occured
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+weechat_printf (NULL, "type = %s",
+ weechat_hdata_get_var_type_string (hdata, "name"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototipo
+type = weechat.hdata_get_var_type_string(hdata, name)
+
+# esempio
+weechat.prnt("", "type = %s" % weechat.hdata_get_var_type_string("name"))
+----------------------------------------
+
+// TRANSLATION MISSING
+weechat_hdata_get_var
+^^^^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Return pointer to content of variable in hdata.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_get_var (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'name': variable name
+
+Valore restituito:
+
+* pointer to content of variable, NULL if an error occured
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+void *pointer = weechat_hdata_get_var (hdata, buffer, "name");
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+// TRANSLATION MISSING
+weechat_hdata_get_var_at_offset
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Return pointer to content of variable in hdata, using offset.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_get_var_at_offset (struct t_hdata *hdata, void *pointer, int offset);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'offset': offset of variable
+
+Valore restituito:
+
+* pointer to content of variable, NULL if an error occured
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+int offset = weechat_hdata_get_var_offset (hdata, "name");
+void *pointer = weechat_hdata_get_var_at_offset (hdata, buffer, offset);
+----------------------------------------
+
+[NOTE]
+This function is not available in scripting API.
+
+// TRANSLATION MISSING
+weechat_hdata_get_list
+^^^^^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Return list pointer from hdata.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_get_list (struct t_hdata *hdata, const char *name);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'name': list name
+
+Valore restituito:
+
+* list pointer, NULL if an error occured
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffers = weechat_hdata_get_list (hdata, "gui_buffers");
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototipo
+list = weechat.hdata_get_list(hdata, name)
+
+# esempio
+hdata = weechat.hdata_get("buffer")
+buffers = weechat.hdata_get_list(hdata, "gui_buffers")
+----------------------------------------
+
+// TRANSLATION MISSING
+weechat_hdata_move
+^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Move pointer to another element in list.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_move (struct t_hdata *hdata, void *pointer, int count);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to a WeeChat/plugin object
+* 'count': number of jump(s) to execute (negative or positive integer, different
+ from 0)
+
+Valore restituito:
+
+* pointer to element reached, NULL if an error occured
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+
+/* move to next buffer, 2 times */
+buffer = weechat_hdata_move (hdata, buffer, 2);
+
+/* move to previous buffer */
+if (buffer)
+ buffer = weechat_hdata_move (hdata, buffer, -1);
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototipo
+pointer = weechat.hdata_move(hdata, pointer, count)
+
+# esempio
+hdata = weechat.hdata_get("buffer")
+buffer = weechat.buffer_search_main()
+
+# move to next buffer, 2 times
+buffer = weechat.hdata_move(hdata, buffer, 2)
+
+# move to previous buffer
+if buffer:
+ buffer = weechat.hdata_move(hdata, buffer, -1)
+----------------------------------------
+
+// TRANSLATION MISSING
+weechat_hdata_integer
+^^^^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Return value of integer variable in structure using hdata.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+int weechat_hdata_integer (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'name': variable name (must be type "integer")
+
+Valore restituito:
+
+* integer value of variable
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+weechat_printf (NULL, "number = %d", weechat_hdata_integer (hdata, buffer, "number"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototipo
+value = weechat.hdata_integer(hdata, pointer, name)
+
+# esempio
+hdata = weechat.hdata_get("buffer")
+buffer = weechat.buffer_search_main()
+weechat.prnt("", "number = %d" % weechat.hdata_integer(hdata, buffer, "number"))
+----------------------------------------
+
+// TRANSLATION MISSING
+weechat_hdata_long
+^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Return value of long variable in structure using hdata.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+long weechat_hdata_long (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'name': variable name (must be type "long")
+
+Valore restituito:
+
+* long value of variable
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+weechat_printf (NULL, "longvar = %ld", weechat_hdata_long (hdata, pointer, "longvar"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototipo
+value = weechat.hdata_long(hdata, pointer, name)
+
+# esempio
+weechat.prnt("", "longvar = %ld" % weechat.hdata_long(hdata, pointer, "longvar"))
+----------------------------------------
+
+// TRANSLATION MISSING
+weechat_hdata_string
+^^^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Return value of string variable in structure using hdata.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+const char *weechat_hdata_string (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'name': variable name (must be type "string")
+
+Valore restituito:
+
+* string value of variable
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+weechat_printf (NULL, "name = %s", weechat_hdata_string (hdata, buffer, "name"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototipo
+value = weechat.hdata_string(hdata, pointer, name)
+
+# esempio
+hdata = weechat.hdata_get("buffer")
+buffer = weechat.buffer_search_main()
+weechat.prnt("", "name = %s" % weechat.hdata_string(hdata, buffer, "name"))
+----------------------------------------
+
+// TRANSLATION MISSING
+weechat_hdata_pointer
+^^^^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Return value of pointer variable in structure using hdata.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+void *weechat_hdata_pointer (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'name': variable name (must be type "pointer")
+
+Valore restituito:
+
+* pointer value of variable
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *buffer = weechat_buffer_search_main ();
+weechat_printf (NULL, "lines = %lx", weechat_hdata_pointer (hdata, buffer, "lines"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototipo
+value = weechat.hdata_pointer(hdata, pointer, name)
+
+# esempio
+hdata = weechat.hdata_get("buffer")
+buffer = weechat.buffer_search_main()
+weechat.prnt("", "lines = %lx" % weechat.hdata_pointer(hdata, buffer, "lines"))
+----------------------------------------
+
+// TRANSLATION MISSING
+weechat_hdata_time
+^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Return value of time variable in structure using hdata.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+time_t weechat_hdata_time (struct t_hdata *hdata, void *pointer, const char *name);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'pointer': pointer to WeeChat/plugin object
+* 'name': variable name (must be type "time")
+
+Valore restituito:
+
+* time value of variable
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+struct t_hdata *hdata = weechat_hdata_get ("buffer");
+struct t_gui_buffer *ptr = weechat_buffer_search_main ();
+ptr = weechat_hdata_pointer (hdata, ptr, "lines");
+if (ptr)
+{
+ hdata = weechat_hdata_get ("lines");
+ ptr = weechat_hdata_pointer (hdata, ptr, "first_line");
+ if (ptr)
+ {
+ hdata = weechat_hdata_get ("line");
+ ptr = weechat_hdata_pointer (hdata, ptr, "data");
+ if (ptr)
+ {
+ hdata = weechat_hdata_get ("line_data");
+ time_t date = weechat_hdata_time (hdata, hdata, "date");
+ weechat_printf (NULL, "time of last line displayed = %s", ctime (&date));
+ }
+ }
+}
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototipo
+value = weechat.hdata_time(hdata, pointer, name)
+
+# esempio
+hdata = weechat.hdata_get("buffer")
+ptr = weechat.buffer_search_main()
+ptr = weechat.hdata_pointer(hdata, ptr, "lines")
+if ptr:
+ hdata = weechat.hdata_get("lines")
+ ptr = weechat.hdata_pointer(hdata, ptr, "first_line")
+ if ptr:
+ hdata = weechat.hdata_get("line")
+ ptr = weechat.hdata_pointer(hdata, ptr, "data")
+ if ptr:
+ hdata = weechat.hdata_get("line_data")
+ weechat.prnt("", "time of last line displayed = %s" % weechat.hdata_time(hdata, ptr, "date"))
+----------------------------------------
+
+// TRANSLATION MISSING
+weechat_hdata_get_string
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+_Novità nella versione 0.3.6._
+
+Return string value of a hdata property.
+
+Prototipo:
+
+[source,C]
+----------------------------------------
+const char *weechat_hdata_get_string (struct t_hdata *hdata, const char *property);
+----------------------------------------
+
+Argomenti:
+
+* 'hdata': hdata pointer
+* 'property': property name:
+** 'var_keys': string with list of keys for variables in hdata
+ (format: "key1,key2,key3")
+** 'var_values': string with list of values for variables in hdata
+ (format: "value1,value2,value3")
+** 'var_keys_values': string with list of keys and values for variables in hdata
+ (format: "key1:value1,key2:value2,key3:value3")
+** 'var_prev': name of variable in structure which is a pointer to previous
+ element in list
+** 'var_next': name of variable in structure which is a pointer to next
+ element in list
+** 'list_keys': string with list of keys for lists in hdata
+ (format: "key1,key2,key3")
+** 'list_values': string with list of values for lists in hdata
+ (format: "value1,value2,value3")
+** 'list_keys_values': string with list of keys and values for lists in hdata
+ (format: "key1:value1,key2:value2,key3:value3")
+
+Valore restituito:
+
+* string value of property
+
+Esempio in C:
+
+[source,C]
+----------------------------------------
+weechat_printf (NULL, "variables in hdata: %s" weechat_hdata_get_string (hdata, "var_keys"));
+weechat_printf (NULL, "lists in hdata: %s" weechat_hdata_get_string (hdata, "list_keys"));
+----------------------------------------
+
+Script (Python):
+
+[source,python]
+----------------------------------------
+# prototipo
+value = weechat.hdata_get_string(hdata, property)
+
+# esempio
+weechat.prnt("", "variables in hdata: %s" % weechat.hdata_get_string(hdata, "var_keys"))
+weechat.prnt("", "lists in hdata: %s" % weechat.hdata_get_string(hdata, "list_keys"))
+----------------------------------------
+
[[upgrade]]
Aggiornamento
~~~~~~~~~~~~~
diff --git a/po/cs.po b/po/cs.po
index 2ceb362fb..6fb4c14e8 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-05-31 09:11+0200\n"
+"POT-Creation-Date: 2011-06-13 11:52+0200\n"
"PO-Revision-Date: 2011-05-15 10:51+0200\n"
"Last-Translator: Jiri Golembiovsky <golemj@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1071,8 +1071,8 @@ msgstr "spřáva ladění pro jádro/pluginy"
#, fuzzy
msgid ""
-"list || set <plugin> <level> || dump [<plugin>] || buffer|color|infolists|"
-"memory|term|windows"
+"list || set <plugin> <level> || dump [<plugin>] || buffer|color|hdata|"
+"infolists|memory|term|windows"
msgstr ""
"list || set <plugin> <level> || dump [<plugin>] || buffer|color|memory|term|"
"windows"
@@ -1087,6 +1087,7 @@ msgid ""
"WeeChat crashes)\n"
" buffer: dump buffer content with hexadecimal values in log file\n"
" color: display infos about current color pairs\n"
+" hdata: display infos about hdata\n"
"infolists: display infos about infolists\n"
" memory: display infos about memory usage\n"
" term: display infos about terminal\n"
@@ -5531,6 +5532,34 @@ msgstr "seznam notifikací"
msgid "notify pointer (optional)"
msgstr "ukazatel notifikace (volitelné)"
+#, fuzzy
+msgid "irc nick"
+msgstr "přezdívka: přezdívka"
+
+#, fuzzy
+msgid "irc channel"
+msgstr "kanál"
+
+msgid "irc channel_speaking"
+msgstr ""
+
+msgid "irc ignore"
+msgstr ""
+
+#, fuzzy
+msgid "irc notify"
+msgstr "seznam notifikací"
+
+msgid "pattern for irc redirect"
+msgstr ""
+
+msgid "irc redirect"
+msgstr ""
+
+#, fuzzy
+msgid "irc server"
+msgstr "server"
+
#, c-format
msgid "%s%s: you are not connected to server"
msgstr "%s%s: nejste připojen k serveru"
@@ -6558,6 +6587,133 @@ msgid "window name (can start or end with \"*\" as wildcard) (optional)"
msgstr ""
"jméno okna (může začínat nebo končit \"*\" jako zástupným znakem) (volitelné)"
+msgid "bar"
+msgstr ""
+
+#, fuzzy
+msgid "bar item"
+msgstr "seznam položek polí"
+
+#, fuzzy
+msgid "buffer"
+msgstr "řídit buffery"
+
+#, fuzzy
+msgid "completion"
+msgstr "kompilováno"
+
+msgid "partial completion"
+msgstr ""
+
+#, fuzzy
+msgid "config file"
+msgstr "konfigurační soubory"
+
+#, fuzzy
+msgid "config section"
+msgstr "nastaví konfigurační možnosti"
+
+#, fuzzy
+msgid "config option"
+msgstr "nastaví konfigurační možnosti"
+
+msgid "filter"
+msgstr ""
+
+#, fuzzy
+msgid "history of commands in buffer"
+msgstr "historie příkazů"
+
+msgid "hook (variables common to all hook types)"
+msgstr ""
+
+#, fuzzy
+msgid "hook of type \"command\""
+msgstr "historie příkazů"
+
+msgid "hook of type \"command_run\""
+msgstr ""
+
+msgid "hook of type \"timer\""
+msgstr ""
+
+msgid "hook of type \"fd\""
+msgstr ""
+
+msgid "hook of type \"process\""
+msgstr ""
+
+msgid "hook of type \"connect\""
+msgstr ""
+
+msgid "hook of type \"print\""
+msgstr ""
+
+msgid "hook of type \"signal\""
+msgstr ""
+
+msgid "hook of type \"hsignal\""
+msgstr ""
+
+msgid "hook of type \"config\""
+msgstr ""
+
+msgid "hook of type \"completion\""
+msgstr ""
+
+msgid "hook of type \"modifier\""
+msgstr ""
+
+msgid "hook of type \"info\""
+msgstr ""
+
+msgid "hook of type \"info_hashtable\""
+msgstr ""
+
+msgid "hook of type \"infolist\""
+msgstr ""
+
+msgid "hook of type \"hdata\""
+msgstr ""
+
+#, fuzzy
+msgid "undo for input line"
+msgstr "funkce pro příkazovou řádku"
+
+msgid "key"
+msgstr ""
+
+#, fuzzy
+msgid "lines"
+msgstr "online"
+
+#, fuzzy
+msgid "line"
+msgstr "online"
+
+#, fuzzy
+msgid "line data"
+msgstr "online"
+
+#, fuzzy
+msgid "group in nicklist"
+msgstr "barva textu pro skupiny v seznamu přezdívek"
+
+#, fuzzy
+msgid "nick in nicklist"
+msgstr "přezdívky v seznamu notifikací"
+
+#, fuzzy
+msgid "window"
+msgstr "spravuje okna"
+
+msgid "scroll info in window"
+msgstr ""
+
+#, fuzzy
+msgid "tree of windows"
+msgstr "seznam oken"
+
#, c-format
msgid "%sError: unable to load plugin \"%s\": %s"
msgstr "%sChyba: nemůžu načist plugin \"%s\": %s"
@@ -7627,3 +7783,9 @@ msgstr "Hash tabulka (výstup)"
msgid "Pointer"
msgstr "Ukazatel"
+
+msgid "Variables"
+msgstr ""
+
+msgid "Lists"
+msgstr ""
diff --git a/po/de.po b/po/de.po
index 403b14059..df756b131 100644
--- a/po/de.po
+++ b/po/de.po
@@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-05-31 09:11+0200\n"
+"POT-Creation-Date: 2011-06-13 11:52+0200\n"
"PO-Revision-Date: 2011-05-15 10:51+0200\n"
"Last-Translator: Nils G.\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1090,8 +1090,8 @@ msgstr "Debug-Kontrolle für Hauptprogramm und/oder Erweiterung"
#, fuzzy
msgid ""
-"list || set <plugin> <level> || dump [<plugin>] || buffer|color|infolists|"
-"memory|term|windows"
+"list || set <plugin> <level> || dump [<plugin>] || buffer|color|hdata|"
+"infolists|memory|term|windows"
msgstr ""
"list || set <plugin> <level> || dump [<plugin>] || buffer|color|memory|term|"
"windows"
@@ -1106,6 +1106,7 @@ msgid ""
"WeeChat crashes)\n"
" buffer: dump buffer content with hexadecimal values in log file\n"
" color: display infos about current color pairs\n"
+" hdata: display infos about hdata\n"
"infolists: display infos about infolists\n"
" memory: display infos about memory usage\n"
" term: display infos about terminal\n"
@@ -5788,6 +5789,34 @@ msgstr "Liste mit Benachrichtigungen"
msgid "notify pointer (optional)"
msgstr "Benachrichtigungspointer (optional)"
+#, fuzzy
+msgid "irc nick"
+msgstr "nick: nick"
+
+#, fuzzy
+msgid "irc channel"
+msgstr "Channel"
+
+msgid "irc channel_speaking"
+msgstr ""
+
+msgid "irc ignore"
+msgstr ""
+
+#, fuzzy
+msgid "irc notify"
+msgstr "Liste mit Benachrichtigungen"
+
+msgid "pattern for irc redirect"
+msgstr ""
+
+msgid "irc redirect"
+msgstr ""
+
+#, fuzzy
+msgid "irc server"
+msgstr "Server"
+
#, c-format
msgid "%s%s: you are not connected to server"
msgstr "%s%s: Es besteht keine Verbindung zum Server"
@@ -6838,6 +6867,133 @@ msgstr ""
"Fenstername (darf mit einem \"*\" als Platzhalter beginnen oder enden) "
"(optional)"
+msgid "bar"
+msgstr ""
+
+#, fuzzy
+msgid "bar item"
+msgstr "Liste der Bar-Items"
+
+#, fuzzy
+msgid "buffer"
+msgstr "Buffer verwalten"
+
+#, fuzzy
+msgid "completion"
+msgstr "kompiliert am"
+
+msgid "partial completion"
+msgstr ""
+
+#, fuzzy
+msgid "config file"
+msgstr "Konfigurationsdateien"
+
+#, fuzzy
+msgid "config section"
+msgstr "Konfigurationsparameter setzen"
+
+#, fuzzy
+msgid "config option"
+msgstr "Konfigurationsparameter setzen"
+
+msgid "filter"
+msgstr ""
+
+#, fuzzy
+msgid "history of commands in buffer"
+msgstr "Verlaufspeicher der Befehle"
+
+msgid "hook (variables common to all hook types)"
+msgstr ""
+
+#, fuzzy
+msgid "hook of type \"command\""
+msgstr "Verlaufspeicher der Befehle"
+
+msgid "hook of type \"command_run\""
+msgstr ""
+
+msgid "hook of type \"timer\""
+msgstr ""
+
+msgid "hook of type \"fd\""
+msgstr ""
+
+msgid "hook of type \"process\""
+msgstr ""
+
+msgid "hook of type \"connect\""
+msgstr ""
+
+msgid "hook of type \"print\""
+msgstr ""
+
+msgid "hook of type \"signal\""
+msgstr ""
+
+msgid "hook of type \"hsignal\""
+msgstr ""
+
+msgid "hook of type \"config\""
+msgstr ""
+
+msgid "hook of type \"completion\""
+msgstr ""
+
+msgid "hook of type \"modifier\""
+msgstr ""
+
+msgid "hook of type \"info\""
+msgstr ""
+
+msgid "hook of type \"info_hashtable\""
+msgstr ""
+
+msgid "hook of type \"infolist\""
+msgstr ""
+
+msgid "hook of type \"hdata\""
+msgstr ""
+
+#, fuzzy
+msgid "undo for input line"
+msgstr "Funktionen für die Befehlszeile"
+
+msgid "key"
+msgstr ""
+
+#, fuzzy
+msgid "lines"
+msgstr "Online"
+
+#, fuzzy
+msgid "line"
+msgstr "Online"
+
+#, fuzzy
+msgid "line data"
+msgstr "Online"
+
+#, fuzzy
+msgid "group in nicklist"
+msgstr "Textfarbe für Gruppen in Nickliste"
+
+#, fuzzy
+msgid "nick in nicklist"
+msgstr "Nicks für die eine Benachrichtigung existiert"
+
+#, fuzzy
+msgid "window"
+msgstr "Fenster verwalten"
+
+msgid "scroll info in window"
+msgstr ""
+
+#, fuzzy
+msgid "tree of windows"
+msgstr "Auflistung der Windows"
+
#, c-format
msgid "%sError: unable to load plugin \"%s\": %s"
msgstr "%sFehler: Kann Erweiterung \"%s\" nicht installieren: %s"
@@ -7940,3 +8096,9 @@ msgstr "Hashtable (Ausgabe)"
msgid "Pointer"
msgstr "Pointer"
+
+msgid "Variables"
+msgstr ""
+
+msgid "Lists"
+msgstr ""
diff --git a/po/es.po b/po/es.po
index de790b620..46fdc9220 100644
--- a/po/es.po
+++ b/po/es.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-05-31 09:11+0200\n"
+"POT-Creation-Date: 2011-06-13 11:52+0200\n"
"PO-Revision-Date: 2011-05-15 10:51+0200\n"
"Last-Translator: Elián Hanisch <lambdae2@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1077,8 +1077,8 @@ msgstr "controla los mensajes de depuración para el núcleo/plugins"
#, fuzzy
msgid ""
-"list || set <plugin> <level> || dump [<plugin>] || buffer|color|infolists|"
-"memory|term|windows"
+"list || set <plugin> <level> || dump [<plugin>] || buffer|color|hdata|"
+"infolists|memory|term|windows"
msgstr ""
"list || set <plugin> <nivel> || dump [<plugin>] || buffer|color|memory|term|"
"windows"
@@ -1093,6 +1093,7 @@ msgid ""
"WeeChat crashes)\n"
" buffer: dump buffer content with hexadecimal values in log file\n"
" color: display infos about current color pairs\n"
+" hdata: display infos about hdata\n"
"infolists: display infos about infolists\n"
" memory: display infos about memory usage\n"
" term: display infos about terminal\n"
@@ -5626,6 +5627,34 @@ msgstr "lista de notificaciones"
msgid "notify pointer (optional)"
msgstr "puntero de la notificación (opcional)"
+#, fuzzy
+msgid "irc nick"
+msgstr "apodo: apodo"
+
+#, fuzzy
+msgid "irc channel"
+msgstr "canal"
+
+msgid "irc channel_speaking"
+msgstr ""
+
+msgid "irc ignore"
+msgstr ""
+
+#, fuzzy
+msgid "irc notify"
+msgstr "lista de notificaciones"
+
+msgid "pattern for irc redirect"
+msgstr ""
+
+msgid "irc redirect"
+msgstr ""
+
+#, fuzzy
+msgid "irc server"
+msgstr "servidor"
+
#, c-format
msgid "%s%s: you are not connected to server"
msgstr "%s%s: no estas conectado a ningún servidor"
@@ -6663,6 +6692,133 @@ msgstr ""
"nombre de la ventana (puede empezar o terminar con \"*\" como comodín) "
"(opcional)"
+msgid "bar"
+msgstr ""
+
+#, fuzzy
+msgid "bar item"
+msgstr "lista de elementos de barra"
+
+#, fuzzy
+msgid "buffer"
+msgstr "gestionar los buffers"
+
+#, fuzzy
+msgid "completion"
+msgstr "compilado en"
+
+msgid "partial completion"
+msgstr ""
+
+#, fuzzy
+msgid "config file"
+msgstr "archivos de configuración"
+
+#, fuzzy
+msgid "config section"
+msgstr "establecer opciones de configuración"
+
+#, fuzzy
+msgid "config option"
+msgstr "establecer opciones de configuración"
+
+msgid "filter"
+msgstr ""
+
+#, fuzzy
+msgid "history of commands in buffer"
+msgstr "historial de comandos"
+
+msgid "hook (variables common to all hook types)"
+msgstr ""
+
+#, fuzzy
+msgid "hook of type \"command\""
+msgstr "historial de comandos"
+
+msgid "hook of type \"command_run\""
+msgstr ""
+
+msgid "hook of type \"timer\""
+msgstr ""
+
+msgid "hook of type \"fd\""
+msgstr ""
+
+msgid "hook of type \"process\""
+msgstr ""
+
+msgid "hook of type \"connect\""
+msgstr ""
+
+msgid "hook of type \"print\""
+msgstr ""
+
+msgid "hook of type \"signal\""
+msgstr ""
+
+msgid "hook of type \"hsignal\""
+msgstr ""
+
+msgid "hook of type \"config\""
+msgstr ""
+
+msgid "hook of type \"completion\""
+msgstr ""
+
+msgid "hook of type \"modifier\""
+msgstr ""
+
+msgid "hook of type \"info\""
+msgstr ""
+
+msgid "hook of type \"info_hashtable\""
+msgstr ""
+
+msgid "hook of type \"infolist\""
+msgstr ""
+
+msgid "hook of type \"hdata\""
+msgstr ""
+
+#, fuzzy
+msgid "undo for input line"
+msgstr "funciones para la línea de comandos"
+
+msgid "key"
+msgstr ""
+
+#, fuzzy
+msgid "lines"
+msgstr "en línea"
+
+#, fuzzy
+msgid "line"
+msgstr "en línea"
+
+#, fuzzy
+msgid "line data"
+msgstr "en línea"
+
+#, fuzzy
+msgid "group in nicklist"
+msgstr "color para grupos en la lista de apodos"
+
+#, fuzzy
+msgid "nick in nicklist"
+msgstr "apodos en la lista de notificación"
+
+#, fuzzy
+msgid "window"
+msgstr "gestión de ventanas"
+
+msgid "scroll info in window"
+msgstr ""
+
+#, fuzzy
+msgid "tree of windows"
+msgstr "lista de ventanas"
+
#, c-format
msgid "%sError: unable to load plugin \"%s\": %s"
msgstr "%sError: no ha sido posible cargar el plugin \"%s\": %s"
@@ -7755,3 +7911,9 @@ msgstr "Tabla hash (salida)"
msgid "Pointer"
msgstr "Puntero"
+
+msgid "Variables"
+msgstr ""
+
+msgid "Lists"
+msgstr ""
diff --git a/po/fr.po b/po/fr.po
index 0ba8f92ea..9c48de21c 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-05-31 09:11+0200\n"
-"PO-Revision-Date: 2011-05-31 09:12+0200\n"
+"POT-Creation-Date: 2011-06-13 11:52+0200\n"
+"PO-Revision-Date: 2011-06-12 11:27+0200\n"
"Last-Translator: Sebastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: French\n"
@@ -1076,10 +1076,10 @@ msgid "control debug for core/plugins"
msgstr "contrôle du debug pour le coeur/les extensions"
msgid ""
-"list || set <plugin> <level> || dump [<plugin>] || buffer|color|infolists|"
-"memory|term|windows"
+"list || set <plugin> <level> || dump [<plugin>] || buffer|color|hdata|"
+"infolists|memory|term|windows"
msgstr ""
-"list || set <extension> <niveau> || dump [<extension>] || buffer|color|"
+"list || set <extension> <niveau> || dump [<extension>] || buffer|color|hdata|"
"infolists|memory|term|windows"
msgid ""
@@ -1091,6 +1091,7 @@ msgid ""
"WeeChat crashes)\n"
" buffer: dump buffer content with hexadecimal values in log file\n"
" color: display infos about current color pairs\n"
+" hdata: display infos about hdata\n"
"infolists: display infos about infolists\n"
" memory: display infos about memory usage\n"
" term: display infos about terminal\n"
@@ -1105,6 +1106,7 @@ msgstr ""
" buffer: afficher le contenu du tampon en valeurs hexadécimales dans le "
"fichier log\n"
" color: afficher des infos sur les paires de couleur courantes\n"
+" hdata: afficher des infos sur les hdata\n"
"infolists: afficher des infos sur les infolists\n"
" memory: afficher des infos sur l'utilisation de la mémoire\n"
" term: afficher des infos sur le terminal\n"
@@ -5664,6 +5666,30 @@ msgstr "liste des notifications"
msgid "notify pointer (optional)"
msgstr "pointeur vers la notification (optionnel)"
+msgid "irc nick"
+msgstr "pseudo irc"
+
+msgid "irc channel"
+msgstr "canal irc"
+
+msgid "irc channel_speaking"
+msgstr "channel_speaking irc"
+
+msgid "irc ignore"
+msgstr "ignore irc"
+
+msgid "irc notify"
+msgstr "notify irc"
+
+msgid "pattern for irc redirect"
+msgstr "modèle pour une redirection irc"
+
+msgid "irc redirect"
+msgstr "redirection irc"
+
+msgid "irc server"
+msgstr "serveur irc"
+
#, c-format
msgid "%s%s: you are not connected to server"
msgstr "%s%s: vous n'êtes pas connecté au serveur"
@@ -6699,6 +6725,117 @@ msgstr ""
"nom de fenêtre (peut démarrer ou se terminer par \"*\" comme joker) "
"(optionnel)"
+msgid "bar"
+msgstr "barre"
+
+msgid "bar item"
+msgstr "objet de barre"
+
+msgid "buffer"
+msgstr "tampon"
+
+msgid "completion"
+msgstr "complétion"
+
+msgid "partial completion"
+msgstr "complétion partielle"
+
+msgid "config file"
+msgstr "fichier de configuration"
+
+msgid "config section"
+msgstr "section de configuration"
+
+msgid "config option"
+msgstr "option de configuration"
+
+msgid "filter"
+msgstr "filtre"
+
+msgid "history of commands in buffer"
+msgstr "historique des commandes dans le tampon"
+
+msgid "hook (variables common to all hook types)"
+msgstr "hook (variables communes à tous les types de hooks)"
+
+msgid "hook of type \"command\""
+msgstr "hook de type \"command\""
+
+msgid "hook of type \"command_run\""
+msgstr "hook de type \"command_run\""
+
+msgid "hook of type \"timer\""
+msgstr "hook de type \"timer\""
+
+msgid "hook of type \"fd\""
+msgstr "hook de type \"fd\""
+
+msgid "hook of type \"process\""
+msgstr "hook de type \"process\""
+
+msgid "hook of type \"connect\""
+msgstr "hook de type \"connect\""
+
+msgid "hook of type \"print\""
+msgstr "hook de type \"print\""
+
+msgid "hook of type \"signal\""
+msgstr "hook de type \"signal\""
+
+msgid "hook of type \"hsignal\""
+msgstr "hook de type \"hsignal\""
+
+msgid "hook of type \"config\""
+msgstr "hook de type \"config\""
+
+msgid "hook of type \"completion\""
+msgstr "hook de type \"completion\""
+
+msgid "hook of type \"modifier\""
+msgstr "hook de type \"modifier\""
+
+msgid "hook of type \"info\""
+msgstr "hook de type \"info\""
+
+msgid "hook of type \"info_hashtable\""
+msgstr "hook de type \"info_hashtable\""
+
+msgid "hook of type \"infolist\""
+msgstr "hook de type \"infolist\""
+
+msgid "hook of type \"hdata\""
+msgstr "hook de type \"hdata\""
+
+msgid "undo for input line"
+msgstr "undo pour la ligne de commande"
+
+msgid "key"
+msgstr "touche"
+
+msgid "lines"
+msgstr "lignes"
+
+msgid "line"
+msgstr "ligne"
+
+msgid "line data"
+msgstr "données de la ligne"
+
+msgid "group in nicklist"
+msgstr "groupe dans la liste de pseudos"
+
+msgid "nick in nicklist"
+msgstr "pseudo dans la liste de pseudos"
+
+msgid "window"
+msgstr "fenêtre"
+
+msgid "scroll info in window"
+msgstr "info de défilement dans la fenêtre"
+
+msgid "tree of windows"
+msgstr "arbre des fenêtres"
+
#, c-format
msgid "%sError: unable to load plugin \"%s\": %s"
msgstr "%sErreur: impossible de charger l'extension \"%s\": %s"
@@ -7795,3 +7932,9 @@ msgstr "Hashtable (sortie)"
msgid "Pointer"
msgstr "Pointeur"
+
+msgid "Variables"
+msgstr "Variables"
+
+msgid "Lists"
+msgstr "Listes"
diff --git a/po/hu.po b/po/hu.po
index fea6ba28f..a4ea8f2de 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-05-31 09:11+0200\n"
+"POT-Creation-Date: 2011-06-13 11:52+0200\n"
"PO-Revision-Date: 2011-05-15 10:51+0200\n"
"Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1028,8 +1028,8 @@ msgstr ""
#, fuzzy
msgid ""
-"list || set <plugin> <level> || dump [<plugin>] || buffer|color|infolists|"
-"memory|term|windows"
+"list || set <plugin> <level> || dump [<plugin>] || buffer|color|hdata|"
+"infolists|memory|term|windows"
msgstr "dump | buffer | windows"
#, fuzzy
@@ -1042,6 +1042,7 @@ msgid ""
"WeeChat crashes)\n"
" buffer: dump buffer content with hexadecimal values in log file\n"
" color: display infos about current color pairs\n"
+" hdata: display infos about hdata\n"
"infolists: display infos about infolists\n"
" memory: display infos about memory usage\n"
" term: display infos about terminal\n"
@@ -5167,6 +5168,34 @@ msgstr "konfigurációs paraméterek beállítása"
msgid "notify pointer (optional)"
msgstr "Beállítások mentése a lemezre\n"
+#, fuzzy
+msgid "irc nick"
+msgstr "név: név"
+
+#, fuzzy
+msgid "irc channel"
+msgstr "%d szoba"
+
+msgid "irc channel_speaking"
+msgstr ""
+
+msgid "irc ignore"
+msgstr ""
+
+#, fuzzy
+msgid "irc notify"
+msgstr "konfigurációs paraméterek beállítása"
+
+msgid "pattern for irc redirect"
+msgstr ""
+
+msgid "irc redirect"
+msgstr ""
+
+#, fuzzy
+msgid "irc server"
+msgstr "szerver"
+
#, fuzzy, c-format
msgid "%s%s: you are not connected to server"
msgstr "%s nincs csatlakozva szerverhez!\n"
@@ -6142,6 +6171,130 @@ msgstr ""
msgid "window name (can start or end with \"*\" as wildcard) (optional)"
msgstr ""
+msgid "bar"
+msgstr ""
+
+#, fuzzy
+msgid "bar item"
+msgstr "Aliaszok listája:\n"
+
+#, fuzzy
+msgid "buffer"
+msgstr "pufferek kezelése"
+
+#, fuzzy
+msgid "completion"
+msgstr "lefordítva:"
+
+msgid "partial completion"
+msgstr ""
+
+#, fuzzy
+msgid "config file"
+msgstr "szerver konfigurációs fájljának újraolvastatása"
+
+#, fuzzy
+msgid "config section"
+msgstr "konfigurációs paraméterek beállítása"
+
+#, fuzzy
+msgid "config option"
+msgstr "konfigurációs paraméterek beállítása"
+
+msgid "filter"
+msgstr ""
+
+#, fuzzy
+msgid "history of commands in buffer"
+msgstr "%s belső parancsok:\n"
+
+msgid "hook (variables common to all hook types)"
+msgstr ""
+
+#, fuzzy
+msgid "hook of type \"command\""
+msgstr "%s belső parancsok:\n"
+
+msgid "hook of type \"command_run\""
+msgstr ""
+
+msgid "hook of type \"timer\""
+msgstr ""
+
+msgid "hook of type \"fd\""
+msgstr ""
+
+msgid "hook of type \"process\""
+msgstr ""
+
+msgid "hook of type \"connect\""
+msgstr ""
+
+msgid "hook of type \"print\""
+msgstr ""
+
+msgid "hook of type \"signal\""
+msgstr ""
+
+msgid "hook of type \"hsignal\""
+msgstr ""
+
+msgid "hook of type \"config\""
+msgstr ""
+
+msgid "hook of type \"completion\""
+msgstr ""
+
+msgid "hook of type \"modifier\""
+msgstr ""
+
+msgid "hook of type \"info\""
+msgstr ""
+
+msgid "hook of type \"info_hashtable\""
+msgstr ""
+
+msgid "hook of type \"infolist\""
+msgstr ""
+
+msgid "hook of type \"hdata\""
+msgstr ""
+
+#, fuzzy
+msgid "undo for input line"
+msgstr "szöveg beillesztése a parancssorba"
+
+msgid "key"
+msgstr ""
+
+msgid "lines"
+msgstr ""
+
+msgid "line"
+msgstr ""
+
+msgid "line data"
+msgstr ""
+
+#, fuzzy
+msgid "group in nicklist"
+msgstr "név színe"
+
+#, fuzzy
+msgid "nick in nicklist"
+msgstr "%s nem található ilyen mellőzés\n"
+
+#, fuzzy
+msgid "window"
+msgstr "ablakok kezelése"
+
+msgid "scroll info in window"
+msgstr ""
+
+#, fuzzy
+msgid "tree of windows"
+msgstr "Mellőzések listája:\n"
+
#, fuzzy, c-format
msgid "%sError: unable to load plugin \"%s\": %s"
msgstr "%s nem sikerült a modult betölteni \"%s\": %s\n"
@@ -7206,3 +7359,9 @@ msgstr ""
#, fuzzy
msgid "Pointer"
msgstr "perc"
+
+msgid "Variables"
+msgstr ""
+
+msgid "Lists"
+msgstr ""
diff --git a/po/it.po b/po/it.po
index 72b24932e..8859036b4 100644
--- a/po/it.po
+++ b/po/it.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-05-31 09:11+0200\n"
+"POT-Creation-Date: 2011-06-13 11:52+0200\n"
"PO-Revision-Date: 2011-05-15 10:52+0200\n"
"Last-Translator: Marco Paolone <marcopaolone@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1069,8 +1069,8 @@ msgstr "attiva debug per core/plugin"
#, fuzzy
msgid ""
-"list || set <plugin> <level> || dump [<plugin>] || buffer|color|infolists|"
-"memory|term|windows"
+"list || set <plugin> <level> || dump [<plugin>] || buffer|color|hdata|"
+"infolists|memory|term|windows"
msgstr ""
"list || set <plugin> <livello> || dump [<plugin>] || buffer|color|memory|"
"term|windows"
@@ -1085,6 +1085,7 @@ msgid ""
"WeeChat crashes)\n"
" buffer: dump buffer content with hexadecimal values in log file\n"
" color: display infos about current color pairs\n"
+" hdata: display infos about hdata\n"
"infolists: display infos about infolists\n"
" memory: display infos about memory usage\n"
" term: display infos about terminal\n"
@@ -5625,6 +5626,34 @@ msgstr "elenco delle notifiche"
msgid "notify pointer (optional)"
msgstr "puntatore alla notifica (opzionale)"
+#, fuzzy
+msgid "irc nick"
+msgstr "nick: nick"
+
+#, fuzzy
+msgid "irc channel"
+msgstr "canale"
+
+msgid "irc channel_speaking"
+msgstr ""
+
+msgid "irc ignore"
+msgstr ""
+
+#, fuzzy
+msgid "irc notify"
+msgstr "elenco delle notifiche"
+
+msgid "pattern for irc redirect"
+msgstr ""
+
+msgid "irc redirect"
+msgstr ""
+
+#, fuzzy
+msgid "irc server"
+msgstr "server"
+
#, c-format
msgid "%s%s: you are not connected to server"
msgstr "%s%s: non connesso al server"
@@ -6656,6 +6685,133 @@ msgstr ""
"nome finestra (può iniziare o terminare con \"*\" come carattere jolly) "
"(opzionale)"
+msgid "bar"
+msgstr ""
+
+#, fuzzy
+msgid "bar item"
+msgstr "elenco degli elementi barra"
+
+#, fuzzy
+msgid "buffer"
+msgstr "gestione buffer"
+
+#, fuzzy
+msgid "completion"
+msgstr "compilato il"
+
+msgid "partial completion"
+msgstr ""
+
+#, fuzzy
+msgid "config file"
+msgstr "file di configurazione"
+
+#, fuzzy
+msgid "config section"
+msgstr "imposta le opzioni di configurazione"
+
+#, fuzzy
+msgid "config option"
+msgstr "imposta le opzioni di configurazione"
+
+msgid "filter"
+msgstr ""
+
+#, fuzzy
+msgid "history of commands in buffer"
+msgstr "cronologia dei comandi"
+
+msgid "hook (variables common to all hook types)"
+msgstr ""
+
+#, fuzzy
+msgid "hook of type \"command\""
+msgstr "cronologia dei comandi"
+
+msgid "hook of type \"command_run\""
+msgstr ""
+
+msgid "hook of type \"timer\""
+msgstr ""
+
+msgid "hook of type \"fd\""
+msgstr ""
+
+msgid "hook of type \"process\""
+msgstr ""
+
+msgid "hook of type \"connect\""
+msgstr ""
+
+msgid "hook of type \"print\""
+msgstr ""
+
+msgid "hook of type \"signal\""
+msgstr ""
+
+msgid "hook of type \"hsignal\""
+msgstr ""
+
+msgid "hook of type \"config\""
+msgstr ""
+
+msgid "hook of type \"completion\""
+msgstr ""
+
+msgid "hook of type \"modifier\""
+msgstr ""
+
+msgid "hook of type \"info\""
+msgstr ""
+
+msgid "hook of type \"info_hashtable\""
+msgstr ""
+
+msgid "hook of type \"infolist\""
+msgstr ""
+
+msgid "hook of type \"hdata\""
+msgstr ""
+
+#, fuzzy
+msgid "undo for input line"
+msgstr "funzioni per la riga di comando"
+
+msgid "key"
+msgstr ""
+
+#, fuzzy
+msgid "lines"
+msgstr "in linea"
+
+#, fuzzy
+msgid "line"
+msgstr "in linea"
+
+#, fuzzy
+msgid "line data"
+msgstr "in linea"
+
+#, fuzzy
+msgid "group in nicklist"
+msgstr "colore del testo per i gruppi nella lista nick"
+
+#, fuzzy
+msgid "nick in nicklist"
+msgstr "nick nella lista notifiche"
+
+#, fuzzy
+msgid "window"
+msgstr "gestione finestre"
+
+msgid "scroll info in window"
+msgstr ""
+
+#, fuzzy
+msgid "tree of windows"
+msgstr "elenco delle finestre"
+
#, c-format
msgid "%sError: unable to load plugin \"%s\": %s"
msgstr "%sErrore: impossibile attivare il plugin \"%s\": %s"
@@ -7734,3 +7890,9 @@ msgstr "Tabella hash (output)"
msgid "Pointer"
msgstr "Puntatore"
+
+msgid "Variables"
+msgstr ""
+
+msgid "Lists"
+msgstr ""
diff --git a/po/pl.po b/po/pl.po
index 411c806eb..54386e601 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-05-31 09:11+0200\n"
+"POT-Creation-Date: 2011-06-13 11:52+0200\n"
"PO-Revision-Date: 2011-05-15 10:52+0200\n"
"Last-Translator: Krzysztof Koroscik <soltys@szluug.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1079,8 +1079,8 @@ msgstr "kontrola debugu dla rdzenia/wtyczek"
#, fuzzy
msgid ""
-"list || set <plugin> <level> || dump [<plugin>] || buffer|color|infolists|"
-"memory|term|windows"
+"list || set <plugin> <level> || dump [<plugin>] || buffer|color|hdata|"
+"infolists|memory|term|windows"
msgstr ""
"list || set <plugin> <poziom> || dump [<plugin>] || buffer|color|memory|term|"
"windows"
@@ -1095,6 +1095,7 @@ msgid ""
"WeeChat crashes)\n"
" buffer: dump buffer content with hexadecimal values in log file\n"
" color: display infos about current color pairs\n"
+" hdata: display infos about hdata\n"
"infolists: display infos about infolists\n"
" memory: display infos about memory usage\n"
" term: display infos about terminal\n"
@@ -5582,6 +5583,34 @@ msgstr "lista powiadomień"
msgid "notify pointer (optional)"
msgstr "wskaźnik powiadomienia (opcjonalne)"
+#, fuzzy
+msgid "irc nick"
+msgstr "nick: nazwa użytkownika"
+
+#, fuzzy
+msgid "irc channel"
+msgstr "kanał"
+
+msgid "irc channel_speaking"
+msgstr ""
+
+msgid "irc ignore"
+msgstr ""
+
+#, fuzzy
+msgid "irc notify"
+msgstr "lista powiadomień"
+
+msgid "pattern for irc redirect"
+msgstr ""
+
+msgid "irc redirect"
+msgstr ""
+
+#, fuzzy
+msgid "irc server"
+msgstr "serwer"
+
#, c-format
msgid "%s%s: you are not connected to server"
msgstr "%s%s: nie jesteś połączony z serwerem"
@@ -6590,6 +6619,133 @@ msgstr "wskaźnik okna (opcjonalne)"
msgid "window name (can start or end with \"*\" as wildcard) (optional)"
msgstr "nazwa okna (może się zaczynać lub kończyć \"*\") (opcjonalne)"
+msgid "bar"
+msgstr ""
+
+#, fuzzy
+msgid "bar item"
+msgstr "lista elementów pasków"
+
+#, fuzzy
+msgid "buffer"
+msgstr "zarządzaj buforami"
+
+#, fuzzy
+msgid "completion"
+msgstr "skompilowano"
+
+msgid "partial completion"
+msgstr ""
+
+#, fuzzy
+msgid "config file"
+msgstr "pliki konfiguracyjne"
+
+#, fuzzy
+msgid "config section"
+msgstr "ustawia opcje konfiguracyjne"
+
+#, fuzzy
+msgid "config option"
+msgstr "ustawia opcje konfiguracyjne"
+
+msgid "filter"
+msgstr ""
+
+#, fuzzy
+msgid "history of commands in buffer"
+msgstr "historia komend"
+
+msgid "hook (variables common to all hook types)"
+msgstr ""
+
+#, fuzzy
+msgid "hook of type \"command\""
+msgstr "historia komend"
+
+msgid "hook of type \"command_run\""
+msgstr ""
+
+msgid "hook of type \"timer\""
+msgstr ""
+
+msgid "hook of type \"fd\""
+msgstr ""
+
+msgid "hook of type \"process\""
+msgstr ""
+
+msgid "hook of type \"connect\""
+msgstr ""
+
+msgid "hook of type \"print\""
+msgstr ""
+
+msgid "hook of type \"signal\""
+msgstr ""
+
+msgid "hook of type \"hsignal\""
+msgstr ""
+
+msgid "hook of type \"config\""
+msgstr ""
+
+msgid "hook of type \"completion\""
+msgstr ""
+
+msgid "hook of type \"modifier\""
+msgstr ""
+
+msgid "hook of type \"info\""
+msgstr ""
+
+msgid "hook of type \"info_hashtable\""
+msgstr ""
+
+msgid "hook of type \"infolist\""
+msgstr ""
+
+msgid "hook of type \"hdata\""
+msgstr ""
+
+#, fuzzy
+msgid "undo for input line"
+msgstr "funkcje linii komend"
+
+msgid "key"
+msgstr ""
+
+#, fuzzy
+msgid "lines"
+msgstr "online"
+
+#, fuzzy
+msgid "line"
+msgstr "online"
+
+#, fuzzy
+msgid "line data"
+msgstr "online"
+
+#, fuzzy
+msgid "group in nicklist"
+msgstr "kolor grup na liście nicków"
+
+#, fuzzy
+msgid "nick in nicklist"
+msgstr "nicki na liście powiadomień"
+
+#, fuzzy
+msgid "window"
+msgstr "zarządza oknami"
+
+msgid "scroll info in window"
+msgstr ""
+
+#, fuzzy
+msgid "tree of windows"
+msgstr "lista okien"
+
#, c-format
msgid "%sError: unable to load plugin \"%s\": %s"
msgstr "%sBłąd: nie można załadować wtyczki \"%s\": %s"
@@ -7660,3 +7816,9 @@ msgstr "Hashtable (wyjście)"
msgid "Pointer"
msgstr "Wskaźnik"
+
+msgid "Variables"
+msgstr ""
+
+msgid "Lists"
+msgstr ""
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 2b5a24b11..c54cc96f7 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-05-31 09:11+0200\n"
+"POT-Creation-Date: 2011-06-13 11:52+0200\n"
"PO-Revision-Date: 2011-05-15 10:52+0200\n"
"Last-Translator: Ivan Sichmann Freitas <ivansichfreitas@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1091,8 +1091,8 @@ msgstr "cotrolar depuração para core/plugins"
#, fuzzy
msgid ""
-"list || set <plugin> <level> || dump [<plugin>] || buffer|color|infolists|"
-"memory|term|windows"
+"list || set <plugin> <level> || dump [<plugin>] || buffer|color|hdata|"
+"infolists|memory|term|windows"
msgstr "[list | set plugin level | dump [plugin] | buffer | windows | term]"
# find a better translation to dump?
@@ -1107,6 +1107,7 @@ msgid ""
"WeeChat crashes)\n"
" buffer: dump buffer content with hexadecimal values in log file\n"
" color: display infos about current color pairs\n"
+" hdata: display infos about hdata\n"
"infolists: display infos about infolists\n"
" memory: display infos about memory usage\n"
" term: display infos about terminal\n"
@@ -5026,6 +5027,30 @@ msgstr ""
msgid "notify pointer (optional)"
msgstr ""
+msgid "irc nick"
+msgstr ""
+
+msgid "irc channel"
+msgstr ""
+
+msgid "irc channel_speaking"
+msgstr ""
+
+msgid "irc ignore"
+msgstr ""
+
+msgid "irc notify"
+msgstr ""
+
+msgid "pattern for irc redirect"
+msgstr ""
+
+msgid "irc redirect"
+msgstr ""
+
+msgid "irc server"
+msgstr ""
+
#, c-format
msgid "%s%s: you are not connected to server"
msgstr ""
@@ -5946,6 +5971,127 @@ msgstr ""
msgid "window name (can start or end with \"*\" as wildcard) (optional)"
msgstr ""
+msgid "bar"
+msgstr ""
+
+#, fuzzy
+msgid "bar item"
+msgstr "Lista de itens da barra:"
+
+#, fuzzy
+msgid "buffer"
+msgstr "gerenciar buffers"
+
+#, fuzzy
+msgid "completion"
+msgstr "compilado em"
+
+msgid "partial completion"
+msgstr ""
+
+#, fuzzy
+msgid "config file"
+msgstr "arquivos de configuração"
+
+#, fuzzy
+msgid "config section"
+msgstr "define opções de configuração"
+
+#, fuzzy
+msgid "config option"
+msgstr "define opções de configuração"
+
+msgid "filter"
+msgstr ""
+
+msgid "history of commands in buffer"
+msgstr ""
+
+msgid "hook (variables common to all hook types)"
+msgstr ""
+
+msgid "hook of type \"command\""
+msgstr ""
+
+msgid "hook of type \"command_run\""
+msgstr ""
+
+msgid "hook of type \"timer\""
+msgstr ""
+
+msgid "hook of type \"fd\""
+msgstr ""
+
+msgid "hook of type \"process\""
+msgstr ""
+
+msgid "hook of type \"connect\""
+msgstr ""
+
+msgid "hook of type \"print\""
+msgstr ""
+
+msgid "hook of type \"signal\""
+msgstr ""
+
+msgid "hook of type \"hsignal\""
+msgstr ""
+
+msgid "hook of type \"config\""
+msgstr ""
+
+msgid "hook of type \"completion\""
+msgstr ""
+
+msgid "hook of type \"modifier\""
+msgstr ""
+
+msgid "hook of type \"info\""
+msgstr ""
+
+msgid "hook of type \"info_hashtable\""
+msgstr ""
+
+msgid "hook of type \"infolist\""
+msgstr ""
+
+msgid "hook of type \"hdata\""
+msgstr ""
+
+#, fuzzy
+msgid "undo for input line"
+msgstr "funções para linha de comando"
+
+msgid "key"
+msgstr ""
+
+msgid "lines"
+msgstr ""
+
+msgid "line"
+msgstr ""
+
+msgid "line data"
+msgstr ""
+
+msgid "group in nicklist"
+msgstr ""
+
+#, fuzzy
+msgid "nick in nicklist"
+msgstr "apelidos na lista de apelidos no buffer atual"
+
+#, fuzzy
+msgid "window"
+msgstr "gerencia janelas"
+
+msgid "scroll info in window"
+msgstr ""
+
+#, fuzzy
+msgid "tree of windows"
+msgstr "Restauração da disposição das janelas"
+
#, c-format
msgid "%sError: unable to load plugin \"%s\": %s"
msgstr ""
@@ -6918,3 +7064,9 @@ msgstr ""
msgid "Pointer"
msgstr ""
+
+msgid "Variables"
+msgstr ""
+
+msgid "Lists"
+msgstr ""
diff --git a/po/ru.po b/po/ru.po
index b15f6652c..3cb00ff03 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-05-31 09:11+0200\n"
+"POT-Creation-Date: 2011-06-13 11:52+0200\n"
"PO-Revision-Date: 2011-05-15 10:52+0200\n"
"Last-Translator: Pavel Shevchuk <stlwrt@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1035,8 +1035,8 @@ msgstr ""
#, fuzzy
msgid ""
-"list || set <plugin> <level> || dump [<plugin>] || buffer|color|infolists|"
-"memory|term|windows"
+"list || set <plugin> <level> || dump [<plugin>] || buffer|color|hdata|"
+"infolists|memory|term|windows"
msgstr "dump | buffer | windows"
#, fuzzy
@@ -1049,6 +1049,7 @@ msgid ""
"WeeChat crashes)\n"
" buffer: dump buffer content with hexadecimal values in log file\n"
" color: display infos about current color pairs\n"
+" hdata: display infos about hdata\n"
"infolists: display infos about infolists\n"
" memory: display infos about memory usage\n"
" term: display infos about terminal\n"
@@ -5181,6 +5182,34 @@ msgstr "настроить параметры конфигурации"
msgid "notify pointer (optional)"
msgstr "Сохраняю конфигурацию\n"
+#, fuzzy
+msgid "irc nick"
+msgstr "ник: ник"
+
+#, fuzzy
+msgid "irc channel"
+msgstr "%d канал"
+
+msgid "irc channel_speaking"
+msgstr ""
+
+msgid "irc ignore"
+msgstr ""
+
+#, fuzzy
+msgid "irc notify"
+msgstr "настроить параметры конфигурации"
+
+msgid "pattern for irc redirect"
+msgstr ""
+
+msgid "irc redirect"
+msgstr ""
+
+#, fuzzy
+msgid "irc server"
+msgstr "сервер"
+
#, fuzzy, c-format
msgid "%s%s: you are not connected to server"
msgstr "%s вы не подключены к серверу\n"
@@ -6157,6 +6186,130 @@ msgstr ""
msgid "window name (can start or end with \"*\" as wildcard) (optional)"
msgstr ""
+msgid "bar"
+msgstr ""
+
+#, fuzzy
+msgid "bar item"
+msgstr "Список сокращений:\n"
+
+#, fuzzy
+msgid "buffer"
+msgstr "управление буферами"
+
+#, fuzzy
+msgid "completion"
+msgstr "собран:"
+
+msgid "partial completion"
+msgstr ""
+
+#, fuzzy
+msgid "config file"
+msgstr "перезагрузить конфигурационный файл сервера"
+
+#, fuzzy
+msgid "config section"
+msgstr "настроить параметры конфигурации"
+
+#, fuzzy
+msgid "config option"
+msgstr "настроить параметры конфигурации"
+
+msgid "filter"
+msgstr ""
+
+#, fuzzy
+msgid "history of commands in buffer"
+msgstr "Внутренние команды %s:\n"
+
+msgid "hook (variables common to all hook types)"
+msgstr ""
+
+#, fuzzy
+msgid "hook of type \"command\""
+msgstr "Внутренние команды %s:\n"
+
+msgid "hook of type \"command_run\""
+msgstr ""
+
+msgid "hook of type \"timer\""
+msgstr ""
+
+msgid "hook of type \"fd\""
+msgstr ""
+
+msgid "hook of type \"process\""
+msgstr ""
+
+msgid "hook of type \"connect\""
+msgstr ""
+
+msgid "hook of type \"print\""
+msgstr ""
+
+msgid "hook of type \"signal\""
+msgstr ""
+
+msgid "hook of type \"hsignal\""
+msgstr ""
+
+msgid "hook of type \"config\""
+msgstr ""
+
+msgid "hook of type \"completion\""
+msgstr ""
+
+msgid "hook of type \"modifier\""
+msgstr ""
+
+msgid "hook of type \"info\""
+msgstr ""
+
+msgid "hook of type \"info_hashtable\""
+msgstr ""
+
+msgid "hook of type \"infolist\""
+msgstr ""
+
+msgid "hook of type \"hdata\""
+msgstr ""
+
+#, fuzzy
+msgid "undo for input line"
+msgstr "вставить строку в поле ввода"
+
+msgid "key"
+msgstr ""
+
+msgid "lines"
+msgstr ""
+
+msgid "line"
+msgstr ""
+
+msgid "line data"
+msgstr ""
+
+#, fuzzy
+msgid "group in nicklist"
+msgstr "цвет ника"
+
+#, fuzzy
+msgid "nick in nicklist"
+msgstr "%s игнорирования не найдены\n"
+
+#, fuzzy
+msgid "window"
+msgstr "управление окнами"
+
+msgid "scroll info in window"
+msgstr ""
+
+#, fuzzy
+msgid "tree of windows"
+msgstr "Список игнорирования:\n"
+
#, fuzzy, c-format
msgid "%sError: unable to load plugin \"%s\": %s"
msgstr "%s не могу загрузить plugin \"%s\": %s\n"
@@ -7215,3 +7368,9 @@ msgstr ""
#, fuzzy
msgid "Pointer"
msgstr "минута"
+
+msgid "Variables"
+msgstr ""
+
+msgid "Lists"
+msgstr ""
diff --git a/po/weechat.pot b/po/weechat.pot
index a97617e62..ecd9b246f 100644
--- a/po/weechat.pot
+++ b/po/weechat.pot
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-05-31 09:11+0200\n"
+"POT-Creation-Date: 2011-06-13 11:52+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -891,8 +891,8 @@ msgid "control debug for core/plugins"
msgstr ""
msgid ""
-"list || set <plugin> <level> || dump [<plugin>] || buffer|color|infolists|"
-"memory|term|windows"
+"list || set <plugin> <level> || dump [<plugin>] || buffer|color|hdata|"
+"infolists|memory|term|windows"
msgstr ""
msgid ""
@@ -904,6 +904,7 @@ msgid ""
"WeeChat crashes)\n"
" buffer: dump buffer content with hexadecimal values in log file\n"
" color: display infos about current color pairs\n"
+" hdata: display infos about hdata\n"
"infolists: display infos about infolists\n"
" memory: display infos about memory usage\n"
" term: display infos about terminal\n"
@@ -4416,6 +4417,30 @@ msgstr ""
msgid "notify pointer (optional)"
msgstr ""
+msgid "irc nick"
+msgstr ""
+
+msgid "irc channel"
+msgstr ""
+
+msgid "irc channel_speaking"
+msgstr ""
+
+msgid "irc ignore"
+msgstr ""
+
+msgid "irc notify"
+msgstr ""
+
+msgid "pattern for irc redirect"
+msgstr ""
+
+msgid "irc redirect"
+msgstr ""
+
+msgid "irc server"
+msgstr ""
+
#, c-format
msgid "%s%s: you are not connected to server"
msgstr ""
@@ -5336,6 +5361,117 @@ msgstr ""
msgid "window name (can start or end with \"*\" as wildcard) (optional)"
msgstr ""
+msgid "bar"
+msgstr ""
+
+msgid "bar item"
+msgstr ""
+
+msgid "buffer"
+msgstr ""
+
+msgid "completion"
+msgstr ""
+
+msgid "partial completion"
+msgstr ""
+
+msgid "config file"
+msgstr ""
+
+msgid "config section"
+msgstr ""
+
+msgid "config option"
+msgstr ""
+
+msgid "filter"
+msgstr ""
+
+msgid "history of commands in buffer"
+msgstr ""
+
+msgid "hook (variables common to all hook types)"
+msgstr ""
+
+msgid "hook of type \"command\""
+msgstr ""
+
+msgid "hook of type \"command_run\""
+msgstr ""
+
+msgid "hook of type \"timer\""
+msgstr ""
+
+msgid "hook of type \"fd\""
+msgstr ""
+
+msgid "hook of type \"process\""
+msgstr ""
+
+msgid "hook of type \"connect\""
+msgstr ""
+
+msgid "hook of type \"print\""
+msgstr ""
+
+msgid "hook of type \"signal\""
+msgstr ""
+
+msgid "hook of type \"hsignal\""
+msgstr ""
+
+msgid "hook of type \"config\""
+msgstr ""
+
+msgid "hook of type \"completion\""
+msgstr ""
+
+msgid "hook of type \"modifier\""
+msgstr ""
+
+msgid "hook of type \"info\""
+msgstr ""
+
+msgid "hook of type \"info_hashtable\""
+msgstr ""
+
+msgid "hook of type \"infolist\""
+msgstr ""
+
+msgid "hook of type \"hdata\""
+msgstr ""
+
+msgid "undo for input line"
+msgstr ""
+
+msgid "key"
+msgstr ""
+
+msgid "lines"
+msgstr ""
+
+msgid "line"
+msgstr ""
+
+msgid "line data"
+msgstr ""
+
+msgid "group in nicklist"
+msgstr ""
+
+msgid "nick in nicklist"
+msgstr ""
+
+msgid "window"
+msgstr ""
+
+msgid "scroll info in window"
+msgstr ""
+
+msgid "tree of windows"
+msgstr ""
+
#, c-format
msgid "%sError: unable to load plugin \"%s\": %s"
msgstr ""
@@ -6293,3 +6429,9 @@ msgstr ""
msgid "Pointer"
msgstr ""
+
+msgid "Variables"
+msgstr ""
+
+msgid "Lists"
+msgstr ""
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 7b4fdfd2b..5b9e3d096 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -28,6 +28,7 @@ wee-config.c wee-config.h
wee-config-file.c wee-config-file.h
wee-debug.c wee-debug.h
wee-hashtable.c wee-hashtable.h
+wee-hdata.c wee-hdata.h
wee-hook.c wee-hook.h
wee-infolist.c wee-infolist.h
wee-input.c wee-input.h
diff --git a/src/core/Makefile.am b/src/core/Makefile.am
index c92beb856..70328062f 100644
--- a/src/core/Makefile.am
+++ b/src/core/Makefile.am
@@ -37,6 +37,8 @@ lib_weechat_core_a_SOURCES = weechat.c \
wee-debug.h \
wee-hashtable.c \
wee-hashtable.h \
+ wee-hdata.c \
+ wee-hdata.h \
wee-hook.c \
wee-hook.h \
wee-infolist.c \
diff --git a/src/core/wee-command.c b/src/core/wee-command.c
index 35dadf953..b30371862 100644
--- a/src/core/wee-command.c
+++ b/src/core/wee-command.c
@@ -1152,6 +1152,10 @@ COMMAND_CALLBACK(debug)
{
gui_color_dump (buffer);
}
+ else if (string_strcasecmp (argv[1], "hdata") == 0)
+ {
+ debug_hdata ();
+ }
else if (string_strcasecmp (argv[1], "infolists") == 0)
{
debug_infolists ();
@@ -4837,7 +4841,7 @@ command_init ()
N_("list"
" || set <plugin> <level>"
" || dump [<plugin>]"
- " || buffer|color|infolists|memory|term|windows"),
+ " || buffer|color|hdata|infolists|memory|term|windows"),
N_(" list: list plugins with debug levels\n"
" set: set debug level for plugin\n"
" plugin: name of plugin (\"core\" for WeeChat core)\n"
@@ -4847,6 +4851,7 @@ command_init ()
" buffer: dump buffer content with hexadecimal values "
"in log file\n"
" color: display infos about current color pairs\n"
+ " hdata: display infos about hdata\n"
"infolists: display infos about infolists\n"
" memory: display infos about memory usage\n"
" term: display infos about terminal\n"
@@ -4856,6 +4861,7 @@ command_init ()
" || dump %(plugins_names)|core"
" || buffer"
" || color"
+ " || hdata"
" || infolists"
" || memory"
" || term"
diff --git a/src/core/wee-config-file.c b/src/core/wee-config-file.c
index 99fcb85ad..f9a5b4d88 100644
--- a/src/core/wee-config-file.c
+++ b/src/core/wee-config-file.c
@@ -27,6 +27,7 @@
#endif
#include <stdlib.h>
+#include <stddef.h>
#include <unistd.h>
#include <stdarg.h>
#include <string.h>
@@ -34,6 +35,7 @@
#include "weechat.h"
#include "wee-config-file.h"
+#include "wee-hdata.h"
#include "wee-hook.h"
#include "wee-infolist.h"
#include "wee-log.h"
@@ -51,6 +53,10 @@ char *config_option_type_string[CONFIG_NUM_OPTION_TYPES] =
char *config_boolean_true[] = { "on", "yes", "y", "true", "t", "1", NULL };
char *config_boolean_false[] = { "off", "no", "n", "false", "f", "0", NULL };
+struct t_hdata *config_file_hdata_config_file = NULL;
+struct t_hdata *config_file_hdata_config_section = NULL;
+struct t_hdata *config_file_hdata_config_option = NULL;
+
void config_file_option_free_data (struct t_config_option *option);
@@ -2544,6 +2550,125 @@ config_file_free_all_plugin (struct t_weechat_plugin *plugin)
}
/*
+ * config_file_hdata_config_file_cb: return hdata for config_file
+ */
+
+struct t_hdata *
+config_file_hdata_config_file_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (config_file_hdata_config_file)
+ return config_file_hdata_config_file;
+
+ hdata = hdata_new (hdata_name, "prev_config", "next_config");
+ if (hdata)
+ {
+ config_file_hdata_config_file = hdata;
+ HDATA_VAR(struct t_config_file, plugin, POINTER);
+ HDATA_VAR(struct t_config_file, name, STRING);
+ HDATA_VAR(struct t_config_file, filename, STRING);
+ HDATA_VAR(struct t_config_file, file, POINTER);
+ HDATA_VAR(struct t_config_file, callback_reload, POINTER);
+ HDATA_VAR(struct t_config_file, callback_reload_data, POINTER);
+ HDATA_VAR(struct t_config_file, sections, POINTER);
+ HDATA_VAR(struct t_config_file, last_section, POINTER);
+ HDATA_VAR(struct t_config_file, prev_config, POINTER);
+ HDATA_VAR(struct t_config_file, next_config, POINTER);
+ HDATA_LIST(config_files);
+ HDATA_LIST(last_config_file);
+ }
+ return config_file_hdata_config_file;
+}
+
+/*
+ * config_file_hdata_config_section_cb: return hdata for config_section
+ */
+
+struct t_hdata *
+config_file_hdata_config_section_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (config_file_hdata_config_section)
+ return config_file_hdata_config_section;
+
+ hdata = hdata_new (hdata_name, "prev_section", "next_section");
+ if (hdata)
+ {
+ config_file_hdata_config_section = hdata;
+ HDATA_VAR(struct t_config_section, config_file, POINTER);
+ HDATA_VAR(struct t_config_section, name, STRING);
+ HDATA_VAR(struct t_config_section, user_can_add_options, INTEGER);
+ HDATA_VAR(struct t_config_section, user_can_delete_options, INTEGER);
+ HDATA_VAR(struct t_config_section, callback_read, POINTER);
+ HDATA_VAR(struct t_config_section, callback_read_data, POINTER);
+ HDATA_VAR(struct t_config_section, callback_write, POINTER);
+ HDATA_VAR(struct t_config_section, callback_write_data, POINTER);
+ HDATA_VAR(struct t_config_section, callback_write_default, POINTER);
+ HDATA_VAR(struct t_config_section, callback_write_default_data, POINTER);
+ HDATA_VAR(struct t_config_section, callback_create_option, POINTER);
+ HDATA_VAR(struct t_config_section, callback_create_option_data, POINTER);
+ HDATA_VAR(struct t_config_section, callback_delete_option, POINTER);
+ HDATA_VAR(struct t_config_section, callback_delete_option_data, POINTER);
+ HDATA_VAR(struct t_config_section, options, POINTER);
+ HDATA_VAR(struct t_config_section, last_option, POINTER);
+ HDATA_VAR(struct t_config_section, prev_section, POINTER);
+ HDATA_VAR(struct t_config_section, next_section, POINTER);
+ }
+ return config_file_hdata_config_section;
+}
+
+/*
+ * config_file_hdata_config_option_cb: return hdata for config_option
+ */
+
+struct t_hdata *
+config_file_hdata_config_option_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (config_file_hdata_config_option)
+ return config_file_hdata_config_option;
+
+ hdata = hdata_new (hdata_name, "prev_option", "next_option");
+ if (hdata)
+ {
+ config_file_hdata_config_option = hdata;
+ HDATA_VAR(struct t_config_option, config_file, POINTER);
+ HDATA_VAR(struct t_config_option, section, POINTER);
+ HDATA_VAR(struct t_config_option, name, STRING);
+ HDATA_VAR(struct t_config_option, type, INTEGER);
+ HDATA_VAR(struct t_config_option, description, STRING);
+ HDATA_VAR(struct t_config_option, string_values, POINTER);
+ HDATA_VAR(struct t_config_option, min, INTEGER);
+ HDATA_VAR(struct t_config_option, max, INTEGER);
+ HDATA_VAR(struct t_config_option, default_value, POINTER);
+ HDATA_VAR(struct t_config_option, value, POINTER);
+ HDATA_VAR(struct t_config_option, null_value_allowed, INTEGER);
+ HDATA_VAR(struct t_config_option, callback_check_value, POINTER);
+ HDATA_VAR(struct t_config_option, callback_check_value_data, POINTER);
+ HDATA_VAR(struct t_config_option, callback_change, POINTER);
+ HDATA_VAR(struct t_config_option, callback_change_data, POINTER);
+ HDATA_VAR(struct t_config_option, callback_delete, POINTER);
+ HDATA_VAR(struct t_config_option, callback_delete_data, POINTER);
+ HDATA_VAR(struct t_config_option, loaded, INTEGER);
+ HDATA_VAR(struct t_config_option, prev_option, POINTER);
+ HDATA_VAR(struct t_config_option, next_option, POINTER);
+ }
+ return config_file_hdata_config_option;
+}
+
+/*
* config_file_add_to_infolist: add configuration options in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/core/wee-config-file.h b/src/core/wee-config-file.h
index 679dc2486..dcbf491be 100644
--- a/src/core/wee-config-file.h
+++ b/src/core/wee-config-file.h
@@ -248,6 +248,12 @@ extern void config_file_section_free (struct t_config_section *section);
extern void config_file_free (struct t_config_file *config_file);
extern void config_file_free_all ();
extern void config_file_free_all_plugin (struct t_weechat_plugin *plugin);
+extern struct t_hdata *config_file_hdata_config_file_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *config_file_hdata_config_section_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *config_file_hdata_config_option_cb (void *data,
+ const char *hdata_name);
extern int config_file_add_to_infolist (struct t_infolist *infolist,
const char *option_name);
extern void config_file_print_log ();
diff --git a/src/core/wee-debug.c b/src/core/wee-debug.c
index 8b3458c11..30f29f702 100644
--- a/src/core/wee-debug.c
+++ b/src/core/wee-debug.c
@@ -35,7 +35,10 @@
#include "weechat.h"
#include "wee-backtrace.h"
#include "wee-config-file.h"
+#include "wee-hashtable.h"
+#include "wee-hdata.h"
#include "wee-infolist.h"
+#include "wee-list.h"
#include "wee-log.h"
#include "wee-hook.h"
#include "wee-proxy.h"
@@ -95,6 +98,8 @@ debug_dump (int crash)
gui_bar_item_print_log ();
gui_hotlist_print_log ();
+ hdata_print_log ();
+
infolist_print_log ();
hook_print_log ();
@@ -295,6 +300,108 @@ debug_memory ()
}
/*
+ * debug_hdata_hash_var_map_cb: function called for each variable in hdata
+ */
+
+void
+debug_hdata_hash_var_map_cb (void *data,
+ struct t_hashtable *hashtable,
+ const void *key, const void *value)
+{
+ struct t_weelist *list;
+ char str_offset[16];
+
+ /* make C compiler happy */
+ (void) hashtable;
+
+ list = (struct t_weelist *)data;
+
+ snprintf (str_offset, sizeof (str_offset),
+ "%12d", (*((int *)value)) & 0xFFFF);
+ weelist_add (list, str_offset, WEECHAT_LIST_POS_SORT, (void *)key);
+}
+
+/*
+ * debug_hdata_hash_list_map_cb: function called for each list in hdata
+ */
+
+void
+debug_hdata_hash_list_map_cb (void *data,
+ struct t_hashtable *hashtable,
+ const void *key, const void *value)
+{
+ /* make C compiler happy */
+ (void) data;
+ (void) hashtable;
+
+ gui_chat_printf (NULL,
+ " list: %s -> 0x%lx",
+ (char *)key,
+ *((void **)value));
+}
+
+/*
+ * debug_hdata: display list of hdata in memory
+ */
+
+void
+debug_hdata ()
+{
+ struct t_hdata *ptr_hdata;
+ int i, count;
+ struct t_weelist *list;
+ struct t_weelist_item *ptr_item;
+ void *value;
+
+ count = 0;
+ for (ptr_hdata = weechat_hdata; ptr_hdata;
+ ptr_hdata = ptr_hdata->next_hdata)
+ {
+ count++;
+ }
+
+ gui_chat_printf (NULL, "");
+ gui_chat_printf (NULL, "%d hdata in memory", count);
+
+ if (count > 0)
+ {
+ i = 0;
+ for (ptr_hdata = weechat_hdata; ptr_hdata;
+ ptr_hdata = ptr_hdata->next_hdata)
+ {
+ gui_chat_printf (NULL,
+ "%4d: hdata 0x%lx: \"%s\", %d vars, %d lists:",
+ i + 1, ptr_hdata,
+ ptr_hdata->name,
+ hashtable_get_integer (ptr_hdata->hash_var,
+ "items_count"),
+ hashtable_get_integer (ptr_hdata->hash_list,
+ "items_count"));
+ list = weelist_new ();
+ hashtable_map (ptr_hdata->hash_var,
+ &debug_hdata_hash_var_map_cb, list);
+ for (ptr_item = list->items; ptr_item;
+ ptr_item = ptr_item->next_item)
+ {
+ value = hashtable_get (ptr_hdata->hash_var, ptr_item->user_data);
+ if (value)
+ {
+ gui_chat_printf (NULL,
+ " %04d -> %s (%s)",
+ (*((int *)value)) & 0xFFFF,
+ (char *)ptr_item->user_data,
+ hdata_type_string[(*((int *)value)) >> 16]);
+ }
+ }
+ weelist_free (list);
+ hashtable_map (ptr_hdata->hash_list,
+ &debug_hdata_hash_list_map_cb, NULL);
+ i++;
+ }
+ }
+}
+
+/*
* debug_infolists: display list of infolists in memory
*/
@@ -370,7 +477,7 @@ debug_infolists ()
}
}
gui_chat_printf (NULL,
- " %d: infolist 0x%lx: %d items, %d vars - "
+ "%4d: infolist 0x%lx: %d items, %d vars - "
"structs: %d, data: %d (total: %d bytes)",
i + 1, ptr_infolist, count_items, count_vars,
size_structs, size_data, size_structs + size_data);
@@ -378,7 +485,7 @@ debug_infolists ()
i++;
}
gui_chat_printf (NULL,
- " Total: %d items, %d vars - %d bytes",
+ "Total: %d items, %d vars - %d bytes",
total_items, total_vars, total_size);
}
}
diff --git a/src/core/wee-debug.h b/src/core/wee-debug.h
index 94256d206..d84f8dc3a 100644
--- a/src/core/wee-debug.h
+++ b/src/core/wee-debug.h
@@ -25,6 +25,7 @@ struct t_gui_window_tree;
extern void debug_sigsegv ();
extern void debug_windows_tree ();
extern void debug_memory ();
+extern void debug_hdata ();
extern void debug_infolists ();
extern void debug_init ();
diff --git a/src/core/wee-hdata.c b/src/core/wee-hdata.c
new file mode 100644
index 000000000..15ccf643a
--- /dev/null
+++ b/src/core/wee-hdata.c
@@ -0,0 +1,400 @@
+/*
+ * Copyright (C) 2011 Sebastien 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/>.
+ */
+
+/*
+ * wee-hdata.c: direct access to WeeChat data using hashtables (for C plugins)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "weechat.h"
+#include "wee-hdata.h"
+#include "wee-hashtable.h"
+#include "wee-log.h"
+#include "wee-string.h"
+#include "../plugins/plugin.h"
+
+
+struct t_hdata *weechat_hdata = NULL;
+struct t_hdata *last_weechat_hdata = NULL;
+
+char *hdata_type_string[6] =
+{ "other", "integer", "long", "string", "pointer", "time" };
+
+
+/*
+ * hdata_new: create a new hdata
+ */
+
+struct t_hdata *
+hdata_new (const char *hdata_name, const char *var_prev, const char *var_next)
+{
+ struct t_hdata *new_hdata;
+
+ if (!hdata_name || !hdata_name[0])
+ return NULL;
+
+ new_hdata = malloc (sizeof (*new_hdata));
+ if (new_hdata)
+ {
+ new_hdata->name = strdup (hdata_name);
+ new_hdata->hash_var = hashtable_new (8,
+ WEECHAT_HASHTABLE_STRING,
+ WEECHAT_HASHTABLE_INTEGER,
+ NULL,
+ NULL);
+ new_hdata->var_prev = (var_prev) ? strdup (var_prev) : NULL;
+ new_hdata->var_next = (var_next) ? strdup (var_next) : NULL;
+ new_hdata->hash_list = hashtable_new (8,
+ WEECHAT_HASHTABLE_STRING,
+ WEECHAT_HASHTABLE_POINTER,
+ NULL,
+ NULL);
+
+ new_hdata->prev_hdata = last_weechat_hdata;
+ new_hdata->next_hdata = NULL;
+ if (weechat_hdata)
+ last_weechat_hdata->next_hdata = new_hdata;
+ else
+ weechat_hdata = new_hdata;
+ last_weechat_hdata = new_hdata;
+ }
+
+ return new_hdata;
+}
+
+/*
+ * hdata_new_var: add a new variable (offset/type) in a hdata
+ */
+
+void
+hdata_new_var (struct t_hdata *hdata, const char *name, int offset, int type)
+{
+ int value;
+
+ if (hdata && name)
+ {
+ value = (type << 16) | (offset & 0xFFFF);
+ hashtable_set (hdata->hash_var, name, &value);
+ }
+}
+
+/*
+ * hdata_new_list: add a new list pointer in a hdata
+ */
+
+void
+hdata_new_list (struct t_hdata *hdata, const char *name, void *pointer)
+{
+ if (hdata && name)
+ hashtable_set (hdata->hash_list, name, pointer);
+}
+
+/*
+ * hdata_get_var_offset: get offset of variable
+ */
+
+int
+hdata_get_var_offset (struct t_hdata *hdata, const char *name)
+{
+ int *ptr_value;
+
+ if (hdata && name)
+ {
+ ptr_value = hashtable_get (hdata->hash_var, name);
+ if (ptr_value)
+ return (*ptr_value) & 0xFFFF;
+ }
+
+ return -1;
+}
+
+/*
+ * hdata_get_var_type: get type of variable (as integer)
+ */
+
+int
+hdata_get_var_type (struct t_hdata *hdata, const char *name)
+{
+ int *ptr_value;
+
+ if (hdata && name)
+ {
+ ptr_value = hashtable_get (hdata->hash_var, name);
+ if (ptr_value)
+ return (*ptr_value) >> 16;
+ }
+
+ return -1;
+}
+
+/*
+ * hdata_get_var_type_string: get type of variable (as string)
+ */
+
+const char *
+hdata_get_var_type_string (struct t_hdata *hdata, const char *name)
+{
+ int *ptr_value;
+
+ if (hdata && name)
+ {
+ ptr_value = hashtable_get (hdata->hash_var, name);
+ if (ptr_value)
+ return hdata_type_string[(*ptr_value) >> 16];
+ }
+
+ return NULL;
+}
+
+/*
+ * hdata_get_var: get pointer to content of variable using hdata var name
+ */
+
+void *
+hdata_get_var (struct t_hdata *hdata, void *pointer, const char *name)
+{
+ int offset;
+
+ if (hdata && pointer)
+ {
+ offset = hdata_get_var_offset (hdata, name);
+ if (offset >= 0)
+ return pointer + offset;
+ }
+
+ return NULL;
+}
+
+/*
+ * hdata_get_var_at_offset: get pointer to content of variable using hdata var
+ * offset
+ */
+
+void *
+hdata_get_var_at_offset (struct t_hdata *hdata, void *pointer, int offset)
+{
+ if (hdata && pointer)
+ return pointer + offset;
+
+ return NULL;
+}
+
+/*
+ * hdata_get_list: get a list pointer
+ */
+
+void *
+hdata_get_list (struct t_hdata *hdata, const char *name)
+{
+ void *ptr_value;
+
+ if (hdata && name)
+ {
+ ptr_value = hashtable_get (hdata->hash_list, name);
+ if (ptr_value)
+ return *((void **)ptr_value);
+ }
+
+ return NULL;
+}
+
+/*
+ * hdata_move: move pointer to another element in list
+ */
+
+void *
+hdata_move (struct t_hdata *hdata, void *pointer, int count)
+{
+ char *ptr_var;
+ int i, abs_count;
+
+ if (hdata && pointer && (count != 0))
+ {
+ ptr_var = (count < 0) ? hdata->var_prev : hdata->var_next;
+ abs_count = abs(count);
+
+ for (i = 0; i < abs_count; i++)
+ {
+ pointer = hdata_pointer (hdata, pointer, ptr_var);
+ if (pointer)
+ return pointer;
+ }
+ }
+
+ return NULL;
+}
+
+/*
+ * hdata_integer: get integer value of a variable in structure using hdata
+ */
+
+int
+hdata_integer (struct t_hdata *hdata, void *pointer, const char *name)
+{
+ int offset;
+
+ if (hdata && pointer)
+ {
+ offset = hdata_get_var_offset (hdata, name);
+ if (offset >= 0)
+ return *((int *)(pointer + offset));
+ }
+
+ return 0;
+}
+
+/*
+ * hdata_long: get long value of a variable in structure using hdata
+ */
+
+long
+hdata_long (struct t_hdata *hdata, void *pointer, const char *name)
+{
+ int offset;
+
+ if (hdata && pointer)
+ {
+ offset = hdata_get_var_offset (hdata, name);
+ if (offset >= 0)
+ return *((long *)(pointer + offset));
+ }
+
+ return 0;
+}
+
+/*
+ * hdata_string: get string value of a variable in structure using hdata
+ */
+
+const char *
+hdata_string (struct t_hdata *hdata, void *pointer, const char *name)
+{
+ int offset;
+
+ if (hdata && pointer)
+ {
+ offset = hdata_get_var_offset (hdata, name);
+ if (offset >= 0)
+ return *((char **)(pointer + offset));
+ }
+
+ return NULL;
+}
+
+/*
+ * hdata_pointer: get pointer value of a variable in structure using hdata
+ */
+
+void *
+hdata_pointer (struct t_hdata *hdata, void *pointer, const char *name)
+{
+ int offset;
+
+ if (hdata && pointer)
+ {
+ offset = hdata_get_var_offset (hdata, name);
+ if (offset >= 0)
+ return *((void **)(pointer + offset));
+ }
+
+ return NULL;
+}
+
+/*
+ * hdata_time: get time value of a variable in structure using hdata
+ */
+
+time_t
+hdata_time (struct t_hdata *hdata, void *pointer, const char *name)
+{
+ int offset;
+
+ if (hdata && pointer)
+ {
+ offset = hdata_get_var_offset (hdata, name);
+ if (offset >= 0)
+ return *((time_t *)(pointer + offset));
+ }
+
+ return 0;
+}
+
+/*
+ * hdata_get_string: get a hdata property as string
+ */
+
+const char *
+hdata_get_string (struct t_hdata *hdata, const char *property)
+{
+ if (hdata && property)
+ {
+ if (string_strcasecmp (property, "var_keys") == 0)
+ return hashtable_get_string (hdata->hash_var, "keys");
+ else if (string_strcasecmp (property, "var_values") == 0)
+ return hashtable_get_string (hdata->hash_var, "values");
+ else if (string_strcasecmp (property, "var_keys_values") == 0)
+ return hashtable_get_string (hdata->hash_var, "keys_values");
+ else if (string_strcasecmp (property, "var_prev") == 0)
+ return hdata->var_prev;
+ else if (string_strcasecmp (property, "var_next") == 0)
+ return hdata->var_next;
+ else if (string_strcasecmp (property, "list_keys") == 0)
+ return hashtable_get_string (hdata->hash_list, "keys");
+ else if (string_strcasecmp (property, "list_values") == 0)
+ return hashtable_get_string (hdata->hash_list, "values");
+ else if (string_strcasecmp (property, "list_keys_values") == 0)
+ return hashtable_get_string (hdata->hash_list, "keys_values");
+ }
+
+ return NULL;
+}
+
+/*
+ * hdata_print_log: print hdata in log (usually for crash dump)
+ */
+
+void
+hdata_print_log ()
+{
+ struct t_hdata *ptr_hdata;
+
+ for (ptr_hdata = weechat_hdata; ptr_hdata;
+ ptr_hdata = ptr_hdata->next_hdata)
+ {
+ log_printf ("");
+ log_printf ("[hdata (addr:0x%lx)]", ptr_hdata);
+ log_printf (" name . . . . . . . . . : '%s'", ptr_hdata->name);
+ log_printf (" hash_var . . . . . . . : 0x%lx (hashtable: '%s')",
+ ptr_hdata->hash_var,
+ hashtable_get_string (ptr_hdata->hash_var, "keys_values"));
+ log_printf (" var_prev . . . . . . . : '%s'", ptr_hdata->var_prev);
+ log_printf (" var_next . . . . . . . : '%s'", ptr_hdata->var_next);
+ log_printf (" hash_list. . . . . . . : 0x%lx (hashtable: '%s')",
+ ptr_hdata->hash_list,
+ hashtable_get_string (ptr_hdata->hash_list, "keys_values"));
+ log_printf (" prev_hdata . . . . . . : 0x%lx", ptr_hdata->prev_hdata);
+ log_printf (" next_hdata . . . . . . : 0x%lx", ptr_hdata->next_hdata);
+ }
+}
diff --git a/src/core/wee-hdata.h b/src/core/wee-hdata.h
new file mode 100644
index 000000000..ce9b96f4d
--- /dev/null
+++ b/src/core/wee-hdata.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2011 Sebastien 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_HDATA_H
+#define __WEECHAT_HDATA_H 1
+
+#define HDATA_VAR(__struct, __name, __type) \
+ hdata_new_var (hdata, #__name, offsetof (__struct, __name), \
+ WEECHAT_HDATA_##__type);
+#define HDATA_LIST(__name) hdata_new_list (hdata, #__name, &(__name));
+
+struct t_hdata
+{
+ char *name; /* name of hdata */
+ struct t_hashtable *hash_var; /* hashtable with offset of vars */
+ char *var_prev; /* name of var with pointer to */
+ /* previous element in list */
+ char *var_next; /* name of var with pointer to */
+ /* next element in list */
+ struct t_hashtable *hash_list; /* hashtable with pointers on lists */
+ /* (used to search objects) */
+ struct t_hdata *prev_hdata; /* link to previous hdata */
+ struct t_hdata *next_hdata; /* link to next hdata */
+};
+
+extern struct t_hdata *weechat_hdata;
+extern struct t_hdata *last_weechat_hdata;
+
+extern char *hdata_type_string[];
+
+extern struct t_hdata *hdata_new (const char *hdata_name, const char *var_prev,
+ const char *var_next);
+extern void hdata_new_var (struct t_hdata *hdata, const char *name, int offset,
+ int type);
+extern void hdata_new_list (struct t_hdata *hdata, const char *name,
+ void *pointer);
+extern int hdata_get_var_offset (struct t_hdata *hdata, const char *name);
+extern int hdata_get_var_type (struct t_hdata *hdata, const char *name);
+extern const char *hdata_get_var_type_string (struct t_hdata *hdata,
+ const char *name);
+extern void *hdata_get_var (struct t_hdata *hdata, void *pointer,
+ const char *name);
+extern void *hdata_get_var_at_offset (struct t_hdata *hdata, void *pointer,
+ int offset);
+extern void *hdata_get_list (struct t_hdata *hdata, const char *name);
+extern void *hdata_move (struct t_hdata *hdata, void *pointer, int count);
+extern int hdata_integer (struct t_hdata *hdata, void *pointer,
+ const char *name);
+extern long hdata_long (struct t_hdata *hdata, void *pointer,
+ const char *name);
+extern const char *hdata_string (struct t_hdata *hdata, void *pointer,
+ const char *name);
+extern void *hdata_pointer (struct t_hdata *hdata, void *pointer,
+ const char *name);
+extern time_t hdata_time (struct t_hdata *hdata, void *pointer,
+ const char *name);
+extern const char *hdata_get_string (struct t_hdata *hdata,
+ const char *property);
+extern void hdata_print_log ();
+
+#endif /* __WEECHAT_HDATA_H */
diff --git a/src/core/wee-hook.c b/src/core/wee-hook.c
index 3d94446aa..e20c0aeb9 100644
--- a/src/core/wee-hook.c
+++ b/src/core/wee-hook.c
@@ -25,8 +25,9 @@
#include "config.h"
#endif
-#include <unistd.h>
#include <stdlib.h>
+#include <stddef.h>
+#include <unistd.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>
@@ -37,6 +38,7 @@
#include "weechat.h"
#include "wee-hook.h"
#include "wee-hashtable.h"
+#include "wee-hdata.h"
#include "wee-infolist.h"
#include "wee-list.h"
#include "wee-log.h"
@@ -54,13 +56,31 @@
char *hook_type_string[HOOK_NUM_TYPES] =
{ "command", "command_run", "timer", "fd", "process", "connect", "print",
"signal", "hsignal", "config", "completion", "modifier",
- "info", "info_hashtable", "infolist" };
+ "info", "info_hashtable", "infolist", "hdata" };
struct t_hook *weechat_hooks[HOOK_NUM_TYPES]; /* list of hooks */
struct t_hook *last_weechat_hook[HOOK_NUM_TYPES]; /* last hook */
int hook_exec_recursion = 0; /* 1 when a hook is executed */
time_t hook_last_system_time = 0; /* used to detect system clock skew */
int real_delete_pending = 0; /* 1 if some hooks must be deleted */
+struct t_hdata *hook_hdata_hook = NULL;
+struct t_hdata *hook_hdata_hook_command = NULL;
+struct t_hdata *hook_hdata_hook_command_run = NULL;
+struct t_hdata *hook_hdata_hook_timer = NULL;
+struct t_hdata *hook_hdata_hook_fd = NULL;
+struct t_hdata *hook_hdata_hook_process = NULL;
+struct t_hdata *hook_hdata_hook_connect = NULL;
+struct t_hdata *hook_hdata_hook_print = NULL;
+struct t_hdata *hook_hdata_hook_signal = NULL;
+struct t_hdata *hook_hdata_hook_hsignal = NULL;
+struct t_hdata *hook_hdata_hook_config = NULL;
+struct t_hdata *hook_hdata_hook_completion = NULL;
+struct t_hdata *hook_hdata_hook_modifier = NULL;
+struct t_hdata *hook_hdata_hook_info = NULL;
+struct t_hdata *hook_hdata_hook_info_hashtable = NULL;
+struct t_hdata *hook_hdata_hook_infolist = NULL;
+struct t_hdata *hook_hdata_hook_hdata = NULL;
+
void hook_process_run (struct t_hook *hook_process);
@@ -2580,7 +2600,7 @@ hook_infolist (struct t_weechat_plugin *plugin, const char *infolist_name,
}
/*
- * hook_infolist_get: get info via info hook
+ * hook_infolist_get: get infolist via infolist hook
*/
struct t_infolist *
@@ -2627,6 +2647,95 @@ hook_infolist_get (struct t_weechat_plugin *plugin, const char *infolist_name,
}
/*
+ * hook_hdata: hook a hdata
+ */
+
+struct t_hook *
+hook_hdata (struct t_weechat_plugin *plugin, const char *hdata_name,
+ const char *description,
+ t_hook_callback_hdata *callback, void *callback_data)
+{
+ struct t_hook *new_hook;
+ struct t_hook_hdata *new_hook_hdata;
+ int priority;
+ const char *ptr_hdata_name;
+
+ if (!hdata_name || !hdata_name[0] || !callback)
+ return NULL;
+
+ new_hook = malloc (sizeof (*new_hook));
+ if (!new_hook)
+ return NULL;
+ new_hook_hdata = malloc (sizeof (*new_hook_hdata));
+ if (!new_hook_hdata)
+ {
+ free (new_hook);
+ return NULL;
+ }
+
+ hook_get_priority_and_name (hdata_name, &priority, &ptr_hdata_name);
+ hook_init_data (new_hook, plugin, HOOK_TYPE_HDATA, priority,
+ callback_data);
+
+ new_hook->hook_data = new_hook_hdata;
+ new_hook_hdata->callback = callback;
+ new_hook_hdata->hdata_name = strdup ((ptr_hdata_name) ?
+ ptr_hdata_name : hdata_name);
+ new_hook_hdata->description = strdup ((description) ? description : "");
+
+ hook_add_to_list (new_hook);
+
+ return new_hook;
+}
+
+/*
+ * hook_hdata_get: get hdata via info hook
+ */
+
+struct t_hdata *
+hook_hdata_get (struct t_weechat_plugin *plugin, const char *hdata_name)
+{
+ struct t_hook *ptr_hook, *next_hook;
+ struct t_hdata *value;
+
+ /* make C compiler happy */
+ (void) plugin;
+
+ if (!hdata_name || !hdata_name[0])
+ return NULL;
+
+ hook_exec_start ();
+
+ ptr_hook = weechat_hooks[HOOK_TYPE_HDATA];
+ while (ptr_hook)
+ {
+ next_hook = ptr_hook->next_hook;
+
+ if (!ptr_hook->deleted
+ && !ptr_hook->running
+ && (string_strcasecmp (HOOK_HDATA(ptr_hook, hdata_name),
+ hdata_name) == 0))
+ {
+ ptr_hook->running = 1;
+ value = (HOOK_HDATA(ptr_hook, callback))
+ (ptr_hook->callback_data,
+ HOOK_HDATA(ptr_hook, hdata_name));
+ ptr_hook->running = 0;
+
+ hook_exec_end ();
+ return value;
+ }
+
+ ptr_hook = next_hook;
+ }
+
+ hook_exec_end ();
+
+ /* hdata not found */
+ return NULL;
+}
+
+/*
* unhook: unhook something
*/
@@ -2810,6 +2919,12 @@ unhook (struct t_hook *hook)
if (HOOK_INFOLIST(hook, args_description))
free (HOOK_INFOLIST(hook, args_description));
break;
+ case HOOK_TYPE_HDATA:
+ if (HOOK_HDATA(hook, hdata_name))
+ free (HOOK_HDATA(hook, hdata_name));
+ if (HOOK_HDATA(hook, description))
+ free (HOOK_HDATA(hook, description));
+ break;
case HOOK_NUM_TYPES:
/*
* this constant is used to count types only,
@@ -2880,6 +2995,529 @@ unhook_all ()
}
/*
+ * hook_hdata_hook_cb: return hdata for hook (variables common to all hook
+ * types)
+ */
+
+struct t_hdata *
+hook_hdata_hook_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook)
+ return hook_hdata_hook;
+
+ hdata = hdata_new (hdata_name, "prev_hook", "next_hook");
+ if (hdata)
+ {
+ hook_hdata_hook = hdata;
+ HDATA_VAR(struct t_hook, plugin, POINTER);
+ HDATA_VAR(struct t_hook, type, INTEGER);
+ HDATA_VAR(struct t_hook, deleted, INTEGER);
+ HDATA_VAR(struct t_hook, running, INTEGER);
+ HDATA_VAR(struct t_hook, priority, INTEGER);
+ HDATA_VAR(struct t_hook, callback_data, POINTER);
+ HDATA_VAR(struct t_hook, hook_data, POINTER);
+ HDATA_VAR(struct t_hook, prev_hook, POINTER);
+ HDATA_VAR(struct t_hook, next_hook, POINTER);
+ }
+ return hook_hdata_hook;
+}
+
+/*
+ * hook_hdata_hook_command_cb: return hdata for hook of type "command"
+ */
+
+struct t_hdata *
+hook_hdata_hook_command_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_command)
+ return hook_hdata_hook_command;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_command = hdata;
+ HDATA_VAR(struct t_hook_command, callback, POINTER);
+ HDATA_VAR(struct t_hook_command, command, STRING);
+ HDATA_VAR(struct t_hook_command, description, STRING);
+ HDATA_VAR(struct t_hook_command, args, STRING);
+ HDATA_VAR(struct t_hook_command, args_description, STRING);
+ HDATA_VAR(struct t_hook_command, completion, STRING);
+ HDATA_VAR(struct t_hook_command, cplt_num_templates, INTEGER);
+ HDATA_VAR(struct t_hook_command, cplt_templates, POINTER);
+ HDATA_VAR(struct t_hook_command, cplt_templates_static, POINTER);
+ HDATA_VAR(struct t_hook_command, cplt_template_num_args, POINTER);
+ HDATA_VAR(struct t_hook_command, cplt_template_args, POINTER);
+ HDATA_VAR(struct t_hook_command, cplt_template_num_args_concat, INTEGER);
+ HDATA_VAR(struct t_hook_command, cplt_template_args_concat, POINTER);
+ hdata_new_list(hdata, "weechat_hooks_command", &weechat_hooks[HOOK_TYPE_COMMAND]);
+ hdata_new_list(hdata, "last_weechat_hook_command", &last_weechat_hook[HOOK_TYPE_COMMAND]);
+ }
+ return hook_hdata_hook_command;
+}
+
+/*
+ * hook_hdata_hook_command_run_cb: return hdata for hook of type "command_run"
+ */
+
+struct t_hdata *
+hook_hdata_hook_command_run_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_command_run)
+ return hook_hdata_hook_command_run;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_command_run = hdata;
+ HDATA_VAR(struct t_hook_command_run, callback, POINTER);
+ HDATA_VAR(struct t_hook_command_run, command, STRING);
+ hdata_new_list(hdata, "weechat_hooks_command_run", &weechat_hooks[HOOK_TYPE_COMMAND_RUN]);
+ hdata_new_list(hdata, "last_weechat_hook_command_run", &last_weechat_hook[HOOK_TYPE_COMMAND_RUN]);
+ }
+ return hook_hdata_hook_command_run;
+}
+
+/*
+ * hook_hdata_hook_timer_cb: return hdata for hook of type "timer"
+ */
+
+struct t_hdata *
+hook_hdata_hook_timer_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_timer)
+ return hook_hdata_hook_timer;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_timer = hdata;
+ HDATA_VAR(struct t_hook_timer, callback, POINTER);
+ HDATA_VAR(struct t_hook_timer, interval, LONG);
+ HDATA_VAR(struct t_hook_timer, align_second, INTEGER);
+ HDATA_VAR(struct t_hook_timer, remaining_calls, INTEGER);
+ HDATA_VAR(struct t_hook_timer, last_exec, OTHER);
+ HDATA_VAR(struct t_hook_timer, next_exec, OTHER);
+ hdata_new_list(hdata, "weechat_hooks_timer", &weechat_hooks[HOOK_TYPE_TIMER]);
+ hdata_new_list(hdata, "last_weechat_hook_timer", &last_weechat_hook[HOOK_TYPE_TIMER]);
+ }
+ return hook_hdata_hook_timer;
+}
+
+/*
+ * hook_hdata_hook_fd_cb: return hdata for hook of type "fd"
+ */
+
+struct t_hdata *
+hook_hdata_hook_fd_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_fd)
+ return hook_hdata_hook_fd;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_fd = hdata;
+ HDATA_VAR(struct t_hook_fd, callback, POINTER);
+ HDATA_VAR(struct t_hook_fd, fd, INTEGER);
+ HDATA_VAR(struct t_hook_fd, flags, INTEGER);
+ hdata_new_list(hdata, "weechat_hooks_fd", &weechat_hooks[HOOK_TYPE_FD]);
+ hdata_new_list(hdata, "last_weechat_hook_fd", &last_weechat_hook[HOOK_TYPE_FD]);
+ }
+ return hook_hdata_hook_fd;
+}
+
+/*
+ * hook_hdata_hook_process_cb: return hdata for hook of type "process"
+ */
+
+struct t_hdata *
+hook_hdata_hook_process_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_process)
+ return hook_hdata_hook_process;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_process = hdata;
+ HDATA_VAR(struct t_hook_process, callback, POINTER);
+ HDATA_VAR(struct t_hook_process, command, STRING);
+ HDATA_VAR(struct t_hook_process, timeout, LONG);
+ HDATA_VAR(struct t_hook_process, child_read, POINTER);
+ HDATA_VAR(struct t_hook_process, child_write, POINTER);
+ HDATA_VAR(struct t_hook_process, child_pid, OTHER);
+ HDATA_VAR(struct t_hook_process, hook_fd, POINTER);
+ HDATA_VAR(struct t_hook_process, hook_timer, POINTER);
+ HDATA_VAR(struct t_hook_process, buffer, POINTER);
+ HDATA_VAR(struct t_hook_process, buffer_size, POINTER);
+ hdata_new_list(hdata, "weechat_hooks_process", &weechat_hooks[HOOK_TYPE_PROCESS]);
+ hdata_new_list(hdata, "last_weechat_hook_process", &last_weechat_hook[HOOK_TYPE_PROCESS]);
+ }
+ return hook_hdata_hook_process;
+}
+
+/*
+ * hook_hdata_hook_connect_cb: return hdata for hook of type "connect"
+ */
+
+struct t_hdata *
+hook_hdata_hook_connect_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_connect)
+ return hook_hdata_hook_connect;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_connect = hdata;
+ HDATA_VAR(struct t_hook_connect, callback, POINTER);
+ HDATA_VAR(struct t_hook_connect, proxy, STRING);
+ HDATA_VAR(struct t_hook_connect, address, STRING);
+ HDATA_VAR(struct t_hook_connect, port, INTEGER);
+ HDATA_VAR(struct t_hook_connect, sock, INTEGER);
+ HDATA_VAR(struct t_hook_connect, ipv6, INTEGER);
+#ifdef HAVE_GNUTLS
+ HDATA_VAR(struct t_hook_connect, gnutls_sess, POINTER);
+ HDATA_VAR(struct t_hook_connect, gnutls_cb, POINTER);
+ HDATA_VAR(struct t_hook_connect, gnutls_dhkey_size, INTEGER);
+ HDATA_VAR(struct t_hook_connect, gnutls_priorities, STRING);
+#endif
+ HDATA_VAR(struct t_hook_connect, local_hostname, STRING);
+ HDATA_VAR(struct t_hook_connect, child_read, INTEGER);
+ HDATA_VAR(struct t_hook_connect, child_write, INTEGER);
+ HDATA_VAR(struct t_hook_connect, child_pid, OTHER);
+ HDATA_VAR(struct t_hook_connect, hook_fd, POINTER);
+ HDATA_VAR(struct t_hook_connect, handshake_hook_fd, POINTER);
+ HDATA_VAR(struct t_hook_connect, handshake_hook_timer, POINTER);
+ HDATA_VAR(struct t_hook_connect, handshake_fd_flags, INTEGER);
+ HDATA_VAR(struct t_hook_connect, handshake_ip_address, STRING);
+ hdata_new_list(hdata, "weechat_hooks_connect", &weechat_hooks[HOOK_TYPE_CONNECT]);
+ hdata_new_list(hdata, "last_weechat_hook_connect", &last_weechat_hook[HOOK_TYPE_CONNECT]);
+ }
+ return hook_hdata_hook_connect;
+}
+
+/*
+ * hook_hdata_hook_print_cb: return hdata for hook of type "print"
+ */
+
+struct t_hdata *
+hook_hdata_hook_print_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_print)
+ return hook_hdata_hook_print;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_print = hdata;
+ HDATA_VAR(struct t_hook_print, callback, POINTER);
+ HDATA_VAR(struct t_hook_print, buffer, POINTER);
+ HDATA_VAR(struct t_hook_print, tags_count, INTEGER);
+ HDATA_VAR(struct t_hook_print, tags_array, POINTER);
+ HDATA_VAR(struct t_hook_print, message, STRING);
+ HDATA_VAR(struct t_hook_print, strip_colors, INTEGER);
+ hdata_new_list(hdata, "weechat_hooks_print", &weechat_hooks[HOOK_TYPE_PRINT]);
+ hdata_new_list(hdata, "last_weechat_hook_print", &last_weechat_hook[HOOK_TYPE_PRINT]);
+ }
+ return hook_hdata_hook_print;
+}
+
+/*
+ * hook_hdata_hook_signal_cb: return hdata for hook of type "signal"
+ */
+
+struct t_hdata *
+hook_hdata_hook_signal_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_signal)
+ return hook_hdata_hook_signal;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_signal = hdata;
+ HDATA_VAR(struct t_hook_signal, callback, POINTER);
+ HDATA_VAR(struct t_hook_signal, signal, STRING);
+ hdata_new_list(hdata, "weechat_hooks_signal", &weechat_hooks[HOOK_TYPE_SIGNAL]);
+ hdata_new_list(hdata, "last_weechat_hook_signal", &last_weechat_hook[HOOK_TYPE_SIGNAL]);
+ }
+ return hook_hdata_hook_signal;
+}
+
+/*
+ * hook_hdata_hook_hsignal_cb: return hdata for hook of type "hsignal"
+ */
+
+struct t_hdata *
+hook_hdata_hook_hsignal_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_hsignal)
+ return hook_hdata_hook_hsignal;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_hsignal = hdata;
+ HDATA_VAR(struct t_hook_hsignal, callback, POINTER);
+ HDATA_VAR(struct t_hook_hsignal, signal, STRING);
+ hdata_new_list(hdata, "weechat_hooks_hsignal", &weechat_hooks[HOOK_TYPE_HSIGNAL]);
+ hdata_new_list(hdata, "last_weechat_hook_hsignal", &last_weechat_hook[HOOK_TYPE_HSIGNAL]);
+ }
+ return hook_hdata_hook_hsignal;
+}
+
+/*
+ * hook_hdata_hook_config_cb: return hdata for hook of type "config"
+ */
+
+struct t_hdata *
+hook_hdata_hook_config_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_config)
+ return hook_hdata_hook_config;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_config = hdata;
+ HDATA_VAR(struct t_hook_config, callback, POINTER);
+ HDATA_VAR(struct t_hook_config, option, STRING);
+ hdata_new_list(hdata, "weechat_hooks_config", &weechat_hooks[HOOK_TYPE_CONFIG]);
+ hdata_new_list(hdata, "last_weechat_hook_config", &last_weechat_hook[HOOK_TYPE_CONFIG]);
+ }
+ return hook_hdata_hook_config;
+}
+
+/*
+ * hook_hdata_hook_completion_cb: return hdata for hook of type "completion"
+ */
+
+struct t_hdata *
+hook_hdata_hook_completion_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_completion)
+ return hook_hdata_hook_completion;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_completion = hdata;
+ HDATA_VAR(struct t_hook_completion, callback, POINTER);
+ HDATA_VAR(struct t_hook_completion, completion_item, STRING);
+ HDATA_VAR(struct t_hook_completion, description, STRING);
+ hdata_new_list(hdata, "weechat_hooks_completion", &weechat_hooks[HOOK_TYPE_COMPLETION]);
+ hdata_new_list(hdata, "last_weechat_hook_completion", &last_weechat_hook[HOOK_TYPE_COMPLETION]);
+ }
+ return hook_hdata_hook_completion;
+}
+
+/*
+ * hook_hdata_hook_modifier_cb: return hdata for hook of type "modifier"
+ */
+
+struct t_hdata *
+hook_hdata_hook_modifier_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_modifier)
+ return hook_hdata_hook_modifier;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_modifier = hdata;
+ HDATA_VAR(struct t_hook_modifier, callback, POINTER);
+ HDATA_VAR(struct t_hook_modifier, modifier, STRING);
+ hdata_new_list(hdata, "weechat_hooks_modifier", &weechat_hooks[HOOK_TYPE_MODIFIER]);
+ hdata_new_list(hdata, "last_weechat_hook_modifier", &last_weechat_hook[HOOK_TYPE_MODIFIER]);
+ }
+ return hook_hdata_hook_modifier;
+}
+
+/*
+ * hook_hdata_hook_info_cb: return hdata for hook of type "info"
+ */
+
+struct t_hdata *
+hook_hdata_hook_info_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_info)
+ return hook_hdata_hook_info;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_info = hdata;
+ HDATA_VAR(struct t_hook_info, callback, POINTER);
+ HDATA_VAR(struct t_hook_info, info_name, STRING);
+ HDATA_VAR(struct t_hook_info, description, STRING);
+ HDATA_VAR(struct t_hook_info, args_description, STRING);
+ hdata_new_list(hdata, "weechat_hooks_info", &weechat_hooks[HOOK_TYPE_INFO]);
+ hdata_new_list(hdata, "last_weechat_hook_info", &last_weechat_hook[HOOK_TYPE_INFO]);
+ }
+ return hook_hdata_hook_info;
+}
+
+/*
+ * hook_hdata_hook_info_hashtable_cb: return hdata for hook of type
+ * "info_hashtable"
+ */
+
+struct t_hdata *
+hook_hdata_hook_info_hashtable_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_info_hashtable)
+ return hook_hdata_hook_info_hashtable;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_info_hashtable = hdata;
+ HDATA_VAR(struct t_hook_info_hashtable, callback, POINTER);
+ HDATA_VAR(struct t_hook_info_hashtable, info_name, STRING);
+ HDATA_VAR(struct t_hook_info_hashtable, description, STRING);
+ HDATA_VAR(struct t_hook_info_hashtable, args_description, STRING);
+ HDATA_VAR(struct t_hook_info_hashtable, output_description, STRING);
+ hdata_new_list(hdata, "weechat_hooks_info_hashtable", &weechat_hooks[HOOK_TYPE_INFO_HASHTABLE]);
+ hdata_new_list(hdata, "last_weechat_hook_info_hashtable", &last_weechat_hook[HOOK_TYPE_INFO_HASHTABLE]);
+ }
+ return hook_hdata_hook_info_hashtable;
+}
+
+/*
+ * hook_hdata_hook_infolist_cb: return hdata for hook of type "infolist"
+ */
+
+struct t_hdata *
+hook_hdata_hook_infolist_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_infolist)
+ return hook_hdata_hook_infolist;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_infolist = hdata;
+ HDATA_VAR(struct t_hook_infolist, callback, POINTER);
+ HDATA_VAR(struct t_hook_infolist, infolist_name, STRING);
+ HDATA_VAR(struct t_hook_infolist, description, STRING);
+ HDATA_VAR(struct t_hook_infolist, pointer_description, STRING);
+ HDATA_VAR(struct t_hook_infolist, args_description, STRING);
+ hdata_new_list(hdata, "weechat_hooks_infolist", &weechat_hooks[HOOK_TYPE_INFOLIST]);
+ hdata_new_list(hdata, "last_weechat_hook_infolist", &last_weechat_hook[HOOK_TYPE_INFOLIST]);
+ }
+ return hook_hdata_hook_infolist;
+}
+
+/*
+ * hook_hdata_hook_hdata_cb: return hdata for hook of type "hdata"
+ */
+
+struct t_hdata *
+hook_hdata_hook_hdata_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (hook_hdata_hook_hdata)
+ return hook_hdata_hook_hdata;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ hook_hdata_hook_hdata = hdata;
+ HDATA_VAR(struct t_hook_hdata, callback, POINTER);
+ HDATA_VAR(struct t_hook_hdata, hdata_name, STRING);
+ HDATA_VAR(struct t_hook_hdata, description, STRING);
+ hdata_new_list(hdata, "weechat_hooks_hdata", &weechat_hooks[HOOK_TYPE_HDATA]);
+ hdata_new_list(hdata, "last_weechat_hook_hdata", &last_weechat_hook[HOOK_TYPE_HDATA]);
+ }
+ return hook_hdata_hook_hdata;
+}
+
+/*
* hook_add_to_infolist_type: add hooks of a type in an infolist
* return 1 if ok, 0 if error
*/
@@ -3231,6 +3869,22 @@ hook_add_to_infolist_type (struct t_infolist *infolist, int type,
return 0;
}
break;
+ case HOOK_TYPE_HDATA:
+ if (!ptr_hook->deleted)
+ {
+ if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_HDATA(ptr_hook, callback)))
+ return 0;
+ if (!infolist_new_var_string (ptr_item, "hdata_name", HOOK_HDATA(ptr_hook, hdata_name)))
+ return 0;
+ if (!infolist_new_var_string (ptr_item, "description", HOOK_HDATA(ptr_hook, description)))
+ return 0;
+ if (!infolist_new_var_string (ptr_item, "description_nls",
+ (HOOK_HDATA(ptr_hook, description)
+ && HOOK_HDATA(ptr_hook, description)[0]) ?
+ _(HOOK_HDATA(ptr_hook, description)) : ""))
+ return 0;
+ }
+ break;
case HOOK_NUM_TYPES:
/*
* this constant is used to count types only,
@@ -3520,6 +4174,15 @@ hook_print_log ()
log_printf (" args_description. . . : '%s'", HOOK_INFOLIST(ptr_hook, args_description));
}
break;
+ case HOOK_TYPE_HDATA:
+ if (!ptr_hook->deleted)
+ {
+ log_printf (" hdata data:");
+ log_printf (" callback. . . . . . . : 0x%lx", HOOK_HDATA(ptr_hook, callback));
+ log_printf (" hdata_name. . . . . . : '%s'", HOOK_HDATA(ptr_hook, hdata_name));
+ log_printf (" description . . . . . : '%s'", HOOK_HDATA(ptr_hook, description));
+ }
+ break;
case HOOK_NUM_TYPES:
/*
* this constant is used to count types only,
diff --git a/src/core/wee-hook.h b/src/core/wee-hook.h
index dddb79329..14080b71e 100644
--- a/src/core/wee-hook.h
+++ b/src/core/wee-hook.h
@@ -50,6 +50,7 @@ enum t_hook_type
HOOK_TYPE_INFO, /* get some info as string */
HOOK_TYPE_INFO_HASHTABLE, /* get some info as hashtable */
HOOK_TYPE_INFOLIST, /* get some info as infolist */
+ HOOK_TYPE_HDATA, /* get hdata pointer */
/* number of hook types */
HOOK_NUM_TYPES,
};
@@ -89,6 +90,7 @@ enum t_hook_type
#define HOOK_INFO(hook, var) (((struct t_hook_info *)hook->hook_data)->var)
#define HOOK_INFO_HASHTABLE(hook, var) (((struct t_hook_info_hashtable *)hook->hook_data)->var)
#define HOOK_INFOLIST(hook, var) (((struct t_hook_infolist *)hook->hook_data)->var)
+#define HOOK_HDATA(hook, var) (((struct t_hook_hdata *)hook->hook_data)->var)
struct t_hook
{
@@ -358,6 +360,18 @@ struct t_hook_infolist
char *args_description; /* description of arguments */
};
+/* hook hdata */
+
+typedef struct t_hdata *(t_hook_callback_hdata)(void *data,
+ const char *hdata_name);
+
+struct t_hook_hdata
+{
+ t_hook_callback_hdata *callback; /* hdata callback */
+ char *hdata_name; /* hdata name */
+ char *description; /* description */
+};
+
/* hook variables */
extern struct t_hook *weechat_hooks[];
@@ -498,9 +512,50 @@ extern struct t_infolist *hook_infolist_get (struct t_weechat_plugin *plugin,
const char *infolist_name,
void *pointer,
const char *arguments);
+extern struct t_hook *hook_hdata (struct t_weechat_plugin *plugin,
+ const char *hdata_name,
+ const char *description,
+ t_hook_callback_hdata *callback,
+ void *callback_data);
+extern struct t_hdata *hook_hdata_get (struct t_weechat_plugin *plugin,
+ const char *hdata_name);
extern void unhook (struct t_hook *hook);
extern void unhook_all_plugin (struct t_weechat_plugin *plugin);
extern void unhook_all ();
+extern struct t_hdata *hook_hdata_hook_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_command_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_command_run_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_timer_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_fd_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_process_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_connect_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_print_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_signal_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_hsignal_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_config_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_completion_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_modifier_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_info_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_info_hashtable_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_infolist_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *hook_hdata_hook_hdata_cb (void *data,
+ const char *hdata_name);
extern int hook_add_to_infolist (struct t_infolist *infolist,
const char *arguments);
extern void hook_print_log ();
diff --git a/src/gui/gui-bar-item.c b/src/gui/gui-bar-item.c
index 148be7724..814b0c423 100644
--- a/src/gui/gui-bar-item.c
+++ b/src/gui/gui-bar-item.c
@@ -26,12 +26,14 @@
#endif
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <time.h>
#include "../core/weechat.h"
#include "../core/wee-config.h"
#include "../core/wee-hashtable.h"
+#include "../core/wee-hdata.h"
#include "../core/wee-hook.h"
#include "../core/wee-infolist.h"
#include "../core/wee-log.h"
@@ -78,6 +80,8 @@ char *gui_bar_items_default_for_bars[][2] =
struct t_gui_bar_item_hook *gui_bar_item_hooks = NULL;
struct t_hook *gui_bar_item_timer = NULL;
+struct t_hdata *gui_bar_item_hdata_bar_item = NULL;
+
/*
* gui_bar_item_valid: check if a bar item pointer exists
@@ -1686,6 +1690,37 @@ gui_bar_item_end ()
}
/*
+ * gui_bar_item_hdata_bar_item_cb: return hdata for bar item
+ */
+
+struct t_hdata *
+gui_bar_item_hdata_bar_item_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_bar_item_hdata_bar_item)
+ return gui_bar_item_hdata_bar_item;
+
+ hdata = hdata_new (hdata_name, "prev_item", "next_item");
+ if (hdata)
+ {
+ gui_bar_item_hdata_bar_item = hdata;
+ HDATA_VAR(struct t_gui_bar_item, plugin, POINTER);
+ HDATA_VAR(struct t_gui_bar_item, name, STRING);
+ HDATA_VAR(struct t_gui_bar_item, build_callback, POINTER);
+ HDATA_VAR(struct t_gui_bar_item, build_callback_data, POINTER);
+ HDATA_VAR(struct t_gui_bar_item, prev_item, POINTER);
+ HDATA_VAR(struct t_gui_bar_item, next_item, POINTER);
+ HDATA_LIST(gui_bar_items);
+ HDATA_LIST(last_gui_bar_item);
+ }
+ return gui_bar_item_hdata_bar_item;
+}
+
+/*
* gui_bar_item_add_to_infolist: add a bar item in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/gui/gui-bar-item.h b/src/gui/gui-bar-item.h
index 77a064ab7..a6d8bdb06 100644
--- a/src/gui/gui-bar-item.h
+++ b/src/gui/gui-bar-item.h
@@ -93,6 +93,8 @@ extern void gui_bar_item_free_all ();
extern void gui_bar_item_free_all_plugin (struct t_weechat_plugin *plugin);
extern void gui_bar_item_init ();
extern void gui_bar_item_end ();
+extern struct t_hdata *gui_bar_item_hdata_bar_item_cb (void *data,
+ const char *hdata_name);
extern int gui_bar_item_add_to_infolist (struct t_infolist *infolist,
struct t_gui_bar_item *bar_item);
extern void gui_bar_item_print_log ();
diff --git a/src/gui/gui-bar.c b/src/gui/gui-bar.c
index b28b8bd3b..49d0dc3d0 100644
--- a/src/gui/gui-bar.c
+++ b/src/gui/gui-bar.c
@@ -26,11 +26,13 @@
#endif
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <limits.h>
#include "../core/weechat.h"
#include "../core/wee-config.h"
+#include "../core/wee-hdata.h"
#include "../core/wee-hook.h"
#include "../core/wee-infolist.h"
#include "../core/wee-log.h"
@@ -66,6 +68,8 @@ struct t_gui_bar *last_gui_bar = NULL; /* last bar */
struct t_gui_bar *gui_temp_bars = NULL; /* bars used when reading config */
struct t_gui_bar *last_gui_temp_bar = NULL;
+struct t_hdata *gui_bar_hdata_bar = NULL;
+
void gui_bar_free_bar_windows (struct t_gui_bar *bar);
@@ -2143,6 +2147,42 @@ gui_bar_free_bar_windows (struct t_gui_bar *bar)
}
/*
+ * gui_bar_hdata_bar_cb: return hdata for bar
+ */
+
+struct t_hdata *
+gui_bar_hdata_bar_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_bar_hdata_bar)
+ return gui_bar_hdata_bar;
+
+ hdata = hdata_new (hdata_name, "prev_bar", "next_bar");
+ if (hdata)
+ {
+ gui_bar_hdata_bar = hdata;
+ HDATA_VAR(struct t_gui_bar, name, STRING);
+ HDATA_VAR(struct t_gui_bar, options, POINTER);
+ HDATA_VAR(struct t_gui_bar, conditions_count, INTEGER);
+ HDATA_VAR(struct t_gui_bar, conditions_array, POINTER);
+ HDATA_VAR(struct t_gui_bar, items_count, INTEGER);
+ HDATA_VAR(struct t_gui_bar, items_subcount, POINTER);
+ HDATA_VAR(struct t_gui_bar, items_array, POINTER);
+ HDATA_VAR(struct t_gui_bar, bar_window, POINTER);
+ HDATA_VAR(struct t_gui_bar, bar_refresh_needed, INTEGER);
+ HDATA_VAR(struct t_gui_bar, prev_bar, POINTER);
+ HDATA_VAR(struct t_gui_bar, next_bar, POINTER);
+ HDATA_LIST(gui_bars);
+ HDATA_LIST(last_gui_bar);
+ }
+ return gui_bar_hdata_bar;
+}
+
+/*
* gui_bar_add_to_infolist: add a bar in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/gui/gui-bar.h b/src/gui/gui-bar.h
index ff375b932..e53626fa5 100644
--- a/src/gui/gui-bar.h
+++ b/src/gui/gui-bar.h
@@ -151,6 +151,8 @@ extern int gui_bar_scroll (struct t_gui_bar *bar, struct t_gui_buffer *buffer,
const char *scroll);
extern void gui_bar_free (struct t_gui_bar *bar);
extern void gui_bar_free_all ();
+extern struct t_hdata *gui_bar_hdata_bar_cb (void *data,
+ const char *hdata_name);
extern int gui_bar_add_to_infolist (struct t_infolist *infolist,
struct t_gui_bar *bar);
extern void gui_bar_print_log ();
diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c
index c26727c51..9b9280b65 100644
--- a/src/gui/gui-buffer.c
+++ b/src/gui/gui-buffer.c
@@ -26,6 +26,7 @@
#endif
#include <stdlib.h>
+#include <stddef.h>
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
@@ -37,6 +38,7 @@
#include "../core/weechat.h"
#include "../core/wee-config.h"
#include "../core/wee-hashtable.h"
+#include "../core/wee-hdata.h"
#include "../core/wee-hook.h"
#include "../core/wee-infolist.h"
#include "../core/wee-list.h"
@@ -69,6 +71,10 @@ int gui_buffers_visited_index = -1; /* index of pointer in list */
int gui_buffers_visited_count = 0; /* number of visited buffers*/
int gui_buffers_visited_frozen = 0; /* 1 to forbid list updates */
+struct t_hdata *gui_buffer_hdata_buffer = NULL;
+struct t_hdata *gui_buffer_hdata_input_undo = NULL;
+struct t_hdata *gui_buffer_hdata_buffer_visited = NULL;
+
char *gui_buffer_notify_string[GUI_BUFFER_NUM_NOTIFY] =
{ "none", "highlight", "message", "all" };
@@ -426,10 +432,11 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
gui_buffer_input_buffer_init (new_buffer);
/* undo for input */
- (new_buffer->input_undo_snap).data = NULL;
- (new_buffer->input_undo_snap).pos = 0;
- (new_buffer->input_undo_snap).prev_undo = NULL; /* not used */
- (new_buffer->input_undo_snap).next_undo = NULL; /* not used */
+ new_buffer->input_undo_snap = malloc (sizeof (*(new_buffer->input_undo_snap)));
+ (new_buffer->input_undo_snap)->data = NULL;
+ (new_buffer->input_undo_snap)->pos = 0;
+ (new_buffer->input_undo_snap)->prev_undo = NULL; /* not used */
+ (new_buffer->input_undo_snap)->next_undo = NULL; /* not used */
new_buffer->input_undo = NULL;
new_buffer->last_input_undo = NULL;
new_buffer->ptr_input_undo = NULL;
@@ -2058,6 +2065,8 @@ gui_buffer_close (struct t_gui_buffer *buffer)
if (buffer->input_buffer)
free (buffer->input_buffer);
gui_buffer_undo_free_all (buffer);
+ if (buffer->input_undo_snap)
+ free (buffer->input_undo_snap);
if (buffer->completion)
gui_completion_free (buffer->completion);
gui_history_buffer_free (buffer);
@@ -2523,18 +2532,18 @@ gui_buffer_unmerge (struct t_gui_buffer *buffer, int number)
void
gui_buffer_undo_snap (struct t_gui_buffer *buffer)
{
- if ((buffer->input_undo_snap).data)
+ if ((buffer->input_undo_snap)->data)
{
- free ((buffer->input_undo_snap).data);
- (buffer->input_undo_snap).data = NULL;
+ free ((buffer->input_undo_snap)->data);
+ (buffer->input_undo_snap)->data = NULL;
}
- (buffer->input_undo_snap).pos = 0;
+ (buffer->input_undo_snap)->pos = 0;
if (CONFIG_INTEGER(config_look_input_undo_max) > 0)
{
- (buffer->input_undo_snap).data = (buffer->input_buffer) ?
+ (buffer->input_undo_snap)->data = (buffer->input_buffer) ?
strdup (buffer->input_buffer) : NULL;
- (buffer->input_undo_snap).pos = buffer->input_buffer_pos;
+ (buffer->input_undo_snap)->pos = buffer->input_buffer_pos;
}
}
@@ -2545,12 +2554,12 @@ gui_buffer_undo_snap (struct t_gui_buffer *buffer)
void
gui_buffer_undo_snap_free (struct t_gui_buffer *buffer)
{
- if ((buffer->input_undo_snap).data)
+ if ((buffer->input_undo_snap)->data)
{
- free ((buffer->input_undo_snap).data);
- (buffer->input_undo_snap).data = NULL;
+ free ((buffer->input_undo_snap)->data);
+ (buffer->input_undo_snap)->data = NULL;
}
- (buffer->input_undo_snap).pos = 0;
+ (buffer->input_undo_snap)->pos = 0;
}
/*
@@ -2572,8 +2581,8 @@ gui_buffer_undo_add (struct t_gui_buffer *buffer)
* if nothing has changed since snapshot of input buffer, then do nothing
* (just discard snapshot)
*/
- if ((buffer->input_undo_snap).data
- && (strcmp (buffer->input_buffer, (buffer->input_undo_snap).data) == 0))
+ if ((buffer->input_undo_snap)->data
+ && (strcmp (buffer->input_buffer, (buffer->input_undo_snap)->data) == 0))
{
goto end;
}
@@ -2598,8 +2607,8 @@ gui_buffer_undo_add (struct t_gui_buffer *buffer)
/* if input is the same as current undo, then do not add it */
if (buffer->ptr_input_undo
&& (buffer->ptr_input_undo)->data
- && (buffer->input_undo_snap).data
- && (strcmp ((buffer->input_undo_snap).data, (buffer->ptr_input_undo)->data) == 0))
+ && (buffer->input_undo_snap)->data
+ && (strcmp ((buffer->input_undo_snap)->data, (buffer->ptr_input_undo)->data) == 0))
{
goto end;
}
@@ -2608,10 +2617,10 @@ gui_buffer_undo_add (struct t_gui_buffer *buffer)
if (!new_undo)
goto end;
- if ((buffer->input_undo_snap).data)
+ if ((buffer->input_undo_snap)->data)
{
- new_undo->data = strdup ((buffer->input_undo_snap).data);
- new_undo->pos = (buffer->input_undo_snap).pos;
+ new_undo->data = strdup ((buffer->input_undo_snap)->data);
+ new_undo->pos = (buffer->input_undo_snap)->pos;
}
else
{
@@ -2874,6 +2883,148 @@ gui_buffer_visited_get_index_next ()
}
/*
+ * gui_buffer_hdata_buffer_cb: return hdata for buffer
+ */
+
+struct t_hdata *
+gui_buffer_hdata_buffer_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_buffer_hdata_buffer)
+ return gui_buffer_hdata_buffer;
+
+ hdata = hdata_new (hdata_name, "prev_buffer", "next_buffer");
+ if (hdata)
+ {
+ gui_buffer_hdata_buffer = hdata;
+ HDATA_VAR(struct t_gui_buffer, plugin, POINTER);
+ HDATA_VAR(struct t_gui_buffer, plugin_name_for_upgrade, STRING);
+ HDATA_VAR(struct t_gui_buffer, merge_for_upgrade, POINTER);
+ HDATA_VAR(struct t_gui_buffer, number, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, layout_number, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, layout_applied, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, name, STRING);
+ HDATA_VAR(struct t_gui_buffer, short_name, STRING);
+ HDATA_VAR(struct t_gui_buffer, type, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, notify, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, num_displayed, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, active, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, print_hooks_enabled, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, close_callback, POINTER);
+ HDATA_VAR(struct t_gui_buffer, close_callback_data, POINTER);
+ HDATA_VAR(struct t_gui_buffer, title, STRING);
+ HDATA_VAR(struct t_gui_buffer, own_lines, POINTER);
+ HDATA_VAR(struct t_gui_buffer, mixed_lines, POINTER);
+ HDATA_VAR(struct t_gui_buffer, lines, POINTER);
+ HDATA_VAR(struct t_gui_buffer, time_for_each_line, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, chat_refresh_needed, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, nicklist, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, nicklist_case_sensitive, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, nicklist_root, POINTER);
+ HDATA_VAR(struct t_gui_buffer, nicklist_max_length, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, nicklist_display_groups, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, nicklist_visible_count, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, input, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, input_callback, POINTER);
+ HDATA_VAR(struct t_gui_buffer, input_callback_data, POINTER);
+ HDATA_VAR(struct t_gui_buffer, input_get_unknown_commands, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, input_buffer, STRING);
+ HDATA_VAR(struct t_gui_buffer, input_buffer_alloc, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, input_buffer_size, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, input_buffer_length, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, input_buffer_pos, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, input_buffer_1st_display, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, input_undo_snap, POINTER);
+ HDATA_VAR(struct t_gui_buffer, input_undo, POINTER);
+ HDATA_VAR(struct t_gui_buffer, last_input_undo, POINTER);
+ HDATA_VAR(struct t_gui_buffer, ptr_input_undo, POINTER);
+ HDATA_VAR(struct t_gui_buffer, input_undo_count, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, completion, POINTER);
+ HDATA_VAR(struct t_gui_buffer, history, POINTER);
+ HDATA_VAR(struct t_gui_buffer, last_history, POINTER);
+ HDATA_VAR(struct t_gui_buffer, ptr_history, POINTER);
+ HDATA_VAR(struct t_gui_buffer, num_history, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, text_search, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, text_search_exact, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, text_search_found, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, text_search_input, STRING);
+ HDATA_VAR(struct t_gui_buffer, highlight_words, STRING);
+ HDATA_VAR(struct t_gui_buffer, highlight_tags, STRING);
+ HDATA_VAR(struct t_gui_buffer, highlight_tags_count, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, highlight_tags_array, POINTER);
+ HDATA_VAR(struct t_gui_buffer, hotlist_max_level_nicks, POINTER);
+ HDATA_VAR(struct t_gui_buffer, keys, POINTER);
+ HDATA_VAR(struct t_gui_buffer, last_key, POINTER);
+ HDATA_VAR(struct t_gui_buffer, keys_count, INTEGER);
+ HDATA_VAR(struct t_gui_buffer, local_variables, POINTER);
+ HDATA_VAR(struct t_gui_buffer, prev_buffer, POINTER);
+ HDATA_VAR(struct t_gui_buffer, next_buffer, POINTER);
+ HDATA_LIST(gui_buffers);
+ HDATA_LIST(last_gui_buffer);
+ }
+ return gui_buffer_hdata_buffer;
+}
+
+/*
+ * gui_buffer_hdata_input_undo_cb: return hdata for input undo
+ */
+
+struct t_hdata *
+gui_buffer_hdata_input_undo_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_buffer_hdata_input_undo)
+ return gui_buffer_hdata_input_undo;
+
+ hdata = hdata_new (hdata_name, "prev_undo", "next_undo");
+ if (hdata)
+ {
+ gui_buffer_hdata_input_undo = hdata;
+ HDATA_VAR(struct t_gui_input_undo, data, STRING);
+ HDATA_VAR(struct t_gui_input_undo, pos, INTEGER);
+ HDATA_VAR(struct t_gui_input_undo, prev_undo, POINTER);
+ HDATA_VAR(struct t_gui_input_undo, next_undo, POINTER);
+ }
+ return gui_buffer_hdata_input_undo;
+}
+
+/*
+ * gui_buffer_hdata_buffer_visited_cb: return hdata for buffer visited
+ */
+
+struct t_hdata *
+gui_buffer_hdata_buffer_visited_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_buffer_hdata_buffer_visited)
+ return gui_buffer_hdata_buffer_visited;
+
+ hdata = hdata_new (hdata_name, "prev_buffer", "next_buffer");
+ if (hdata)
+ {
+ gui_buffer_hdata_buffer_visited = hdata;
+ HDATA_VAR(struct t_gui_buffer_visited, buffer, POINTER);
+ HDATA_VAR(struct t_gui_buffer_visited, prev_buffer, POINTER);
+ HDATA_VAR(struct t_gui_buffer_visited, next_buffer, POINTER);
+ HDATA_LIST(gui_buffers_visited);
+ HDATA_LIST(last_gui_buffer_visited);
+ }
+ return gui_buffer_hdata_buffer_visited;
+}
+
+/*
* gui_buffer_add_to_infolist: add a buffer in an infolist
* return 1 if ok, 0 if error
*/
@@ -3118,8 +3269,8 @@ gui_buffer_print_log ()
log_printf (" input_buffer_length. . : %d", ptr_buffer->input_buffer_length);
log_printf (" input_buffer_pos . . . : %d", ptr_buffer->input_buffer_pos);
log_printf (" input_buffer_1st_disp. : %d", ptr_buffer->input_buffer_1st_display);
- log_printf (" input_undo_snap.data . : '%s'", (ptr_buffer->input_undo_snap).data);
- log_printf (" input_undo_snap.pos. . : %d", (ptr_buffer->input_undo_snap).pos);
+ log_printf (" input_undo_snap->data. : '%s'", (ptr_buffer->input_undo_snap)->data);
+ log_printf (" input_undo_snap->pos . : %d", (ptr_buffer->input_undo_snap)->pos);
log_printf (" input_undo . . . . . . : 0x%lx", ptr_buffer->input_undo);
log_printf (" last_input_undo. . . . : 0x%lx", ptr_buffer->last_input_undo);
log_printf (" ptr_input_undo . . . . : 0x%lx", ptr_buffer->ptr_input_undo);
diff --git a/src/gui/gui-buffer.h b/src/gui/gui-buffer.h
index b21cc393a..087273884 100644
--- a/src/gui/gui-buffer.h
+++ b/src/gui/gui-buffer.h
@@ -137,7 +137,7 @@ struct t_gui_buffer
int input_buffer_1st_display; /* first char displayed on screen */
/* undo/redo for input */
- struct t_gui_input_undo input_undo_snap; /* snapshot of input buffer */
+ struct t_gui_input_undo *input_undo_snap; /* snapshot of input buffer */
struct t_gui_input_undo *input_undo; /* undo for input */
struct t_gui_input_undo *last_input_undo; /* last undo for input */
struct t_gui_input_undo *ptr_input_undo; /* pointer to current undo */
@@ -284,6 +284,10 @@ extern void gui_buffer_visited_remove_by_buffer (struct t_gui_buffer *buffer);
extern struct t_gui_buffer_visited *gui_buffer_visited_add (struct t_gui_buffer *buffer);
extern int gui_buffer_visited_get_index_previous ();
extern int gui_buffer_visited_get_index_next ();
+extern struct t_hdata *gui_buffer_hdata_buffer_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *gui_buffer_hdata_input_undo_cb (void *data,
+ const char *hdata_name);
extern int gui_buffer_add_to_infolist (struct t_infolist *infolist,
struct t_gui_buffer *buffer);
extern void gui_buffer_dump_hexa (struct t_gui_buffer *buffer);
diff --git a/src/gui/gui-completion.c b/src/gui/gui-completion.c
index 6b1f5b2a6..eba1d9419 100644
--- a/src/gui/gui-completion.c
+++ b/src/gui/gui-completion.c
@@ -26,6 +26,7 @@
#endif
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <strings.h>
#include <sys/stat.h>
@@ -37,6 +38,7 @@
#include "../core/weechat.h"
#include "../core/wee-completion.h"
#include "../core/wee-config.h"
+#include "../core/wee-hdata.h"
#include "../core/wee-hook.h"
#include "../core/wee-list.h"
#include "../core/wee-log.h"
@@ -46,6 +48,10 @@
#include "gui-completion.h"
+struct t_hdata *gui_completion_hdata_completion = NULL;
+struct t_hdata *gui_completion_hdata_completion_partial = NULL;
+
+
/*
* gui_completion_buffer_init: init completion for a buffer
*/
@@ -1182,6 +1188,76 @@ gui_completion_get_string (struct t_gui_completion *completion,
}
/*
+ * gui_completion_hdata_completion_cb: return hdata for completion
+ */
+
+struct t_hdata *
+gui_completion_hdata_completion_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_completion_hdata_completion)
+ return gui_completion_hdata_completion;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ gui_completion_hdata_completion = hdata;
+ HDATA_VAR(struct t_gui_completion, buffer, POINTER);
+ HDATA_VAR(struct t_gui_completion, context, INTEGER);
+ HDATA_VAR(struct t_gui_completion, base_command, STRING);
+ HDATA_VAR(struct t_gui_completion, base_command_arg_index, INTEGER);
+ HDATA_VAR(struct t_gui_completion, base_word, STRING);
+ HDATA_VAR(struct t_gui_completion, base_word_pos, INTEGER);
+ HDATA_VAR(struct t_gui_completion, position, INTEGER);
+ HDATA_VAR(struct t_gui_completion, args, STRING);
+ HDATA_VAR(struct t_gui_completion, direction, INTEGER);
+ HDATA_VAR(struct t_gui_completion, add_space, INTEGER);
+ HDATA_VAR(struct t_gui_completion, force_partial_completion, INTEGER);
+ HDATA_VAR(struct t_gui_completion, completion_list, POINTER);
+ HDATA_VAR(struct t_gui_completion, word_found, STRING);
+ HDATA_VAR(struct t_gui_completion, word_found_is_nick, INTEGER);
+ HDATA_VAR(struct t_gui_completion, position_replace, INTEGER);
+ HDATA_VAR(struct t_gui_completion, diff_size, INTEGER);
+ HDATA_VAR(struct t_gui_completion, diff_length, INTEGER);
+ HDATA_VAR(struct t_gui_completion, partial_completion_list, POINTER);
+ HDATA_VAR(struct t_gui_completion, last_partial_completion, POINTER);
+ }
+ return gui_completion_hdata_completion;
+}
+
+/*
+ * gui_completion_hdata_completion_partial_cb: return hdata for partial
+ * completion
+ */
+
+struct t_hdata *
+gui_completion_hdata_completion_partial_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_completion_hdata_completion_partial)
+ return gui_completion_hdata_completion_partial;
+
+ hdata = hdata_new (hdata_name, "prev_item", "next_item");
+ if (hdata)
+ {
+ gui_completion_hdata_completion_partial = hdata;
+ HDATA_VAR(struct t_gui_completion_partial, word, STRING);
+ HDATA_VAR(struct t_gui_completion_partial, count, INTEGER);
+ HDATA_VAR(struct t_gui_completion_partial, prev_item, POINTER);
+ HDATA_VAR(struct t_gui_completion_partial, next_item, POINTER);
+ }
+ return gui_completion_hdata_completion_partial;
+}
+
+/*
* gui_completion_print_log: print completion list in log (usually for crash dump)
*/
diff --git a/src/gui/gui-completion.h b/src/gui/gui-completion.h
index cecf7c453..635d9bc47 100644
--- a/src/gui/gui-completion.h
+++ b/src/gui/gui-completion.h
@@ -78,6 +78,10 @@ extern void gui_completion_search (struct t_gui_completion *completion,
int pos);
extern const char *gui_completion_get_string (struct t_gui_completion *completion,
const char *property);
+extern struct t_hdata *gui_completion_hdata_completion_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *gui_completion_hdata_completion_partial_cb (void *data,
+ const char *hdata_name);
extern void gui_completion_print_log (struct t_gui_completion *completion);
#endif /* __WEECHAT_GUI_COMPLETION_H */
diff --git a/src/gui/gui-filter.c b/src/gui/gui-filter.c
index 032fd4f9a..104c4bc6c 100644
--- a/src/gui/gui-filter.c
+++ b/src/gui/gui-filter.c
@@ -26,11 +26,13 @@
#endif
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <regex.h>
#include "../core/weechat.h"
#include "../core/wee-config.h"
+#include "../core/wee-hdata.h"
#include "../core/wee-hook.h"
#include "../core/wee-infolist.h"
#include "../core/wee-log.h"
@@ -45,6 +47,8 @@ struct t_gui_filter *gui_filters = NULL; /* first filter */
struct t_gui_filter *last_gui_filter = NULL; /* last filter */
int gui_filters_enabled = 1; /* filters enabled? */
+struct t_hdata *gui_filter_hdata_filter = NULL;
+
/*
* gui_filter_line_has_tag_no_filter: return 1 if line has tag "no_filter",
@@ -474,6 +478,44 @@ gui_filter_free_all ()
}
/*
+ * gui_filter_hdata_filter_cb: return hdata for filter
+ */
+
+struct t_hdata *
+gui_filter_hdata_filter_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_filter_hdata_filter)
+ return gui_filter_hdata_filter;
+
+ hdata = hdata_new (hdata_name, "prev_filter", "next_filter");
+ if (hdata)
+ {
+ gui_filter_hdata_filter = hdata;
+ HDATA_VAR(struct t_gui_filter, enabled, INTEGER);
+ HDATA_VAR(struct t_gui_filter, name, STRING);
+ HDATA_VAR(struct t_gui_filter, buffer_name, STRING);
+ HDATA_VAR(struct t_gui_filter, num_buffers, INTEGER);
+ HDATA_VAR(struct t_gui_filter, buffers, POINTER);
+ HDATA_VAR(struct t_gui_filter, tags, STRING);
+ HDATA_VAR(struct t_gui_filter, tags_count, INTEGER);
+ HDATA_VAR(struct t_gui_filter, tags_array, POINTER);
+ HDATA_VAR(struct t_gui_filter, regex, STRING);
+ HDATA_VAR(struct t_gui_filter, regex_prefix, POINTER);
+ HDATA_VAR(struct t_gui_filter, regex_message, POINTER);
+ HDATA_VAR(struct t_gui_filter, prev_filter, POINTER);
+ HDATA_VAR(struct t_gui_filter, next_filter, POINTER);
+ HDATA_LIST(gui_filters);
+ HDATA_LIST(last_gui_filter);
+ }
+ return gui_filter_hdata_filter;
+}
+
+/*
* gui_filter_add_to_infolist: add a filter in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/gui/gui-filter.h b/src/gui/gui-filter.h
index 668b8a506..a853bca86 100644
--- a/src/gui/gui-filter.h
+++ b/src/gui/gui-filter.h
@@ -69,6 +69,8 @@ extern int gui_filter_rename (struct t_gui_filter *filter,
const char *new_name);
extern void gui_filter_free (struct t_gui_filter *filter);
extern void gui_filter_free_all ();
+extern struct t_hdata *gui_filter_hdata_filter_cb (void *data,
+ const char *hdata_name);
extern int gui_filter_add_to_infolist (struct t_infolist *infolist,
struct t_gui_filter *filter);
extern void gui_filter_print_log ();
diff --git a/src/gui/gui-history.c b/src/gui/gui-history.c
index 435b262c6..1a9e11a85 100644
--- a/src/gui/gui-history.c
+++ b/src/gui/gui-history.c
@@ -27,13 +27,16 @@
#endif
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include "../core/weechat.h"
#include "../core/wee-config.h"
+#include "../core/wee-hdata.h"
#include "../core/wee-hook.h"
#include "../core/wee-infolist.h"
#include "../core/wee-string.h"
+#include "../plugins/plugin.h"
#include "gui-history.h"
#include "gui-buffer.h"
@@ -43,6 +46,8 @@ struct t_gui_history *last_history_global = NULL;
struct t_gui_history *history_global_ptr = NULL;
int num_history_global = 0;
+struct t_hdata *gui_history_hdata_history = NULL;
+
/*
* gui_history_buffer_add: add a text/command to buffer's history
@@ -213,6 +218,32 @@ gui_history_buffer_free (struct t_gui_buffer *buffer)
}
/*
+ * gui_history_hdata_history_cb: return hdata for history
+ */
+
+struct t_hdata *
+gui_history_hdata_history_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_history_hdata_history)
+ return gui_history_hdata_history;
+
+ hdata = hdata_new (hdata_name, "prev_history", "next_history");
+ if (hdata)
+ {
+ gui_history_hdata_history = hdata;
+ HDATA_VAR(struct t_gui_history, text, STRING);
+ HDATA_VAR(struct t_gui_history, prev_history, POINTER);
+ HDATA_VAR(struct t_gui_history, next_history, POINTER);
+ }
+ return gui_history_hdata_history;
+}
+
+/*
* gui_history_add_to_infolist: add history of commands in an infolist
* if buffer is NULL, global history is returned
* return 1 if ok, 0 if error
diff --git a/src/gui/gui-history.h b/src/gui/gui-history.h
index 71b773370..177d8162f 100644
--- a/src/gui/gui-history.h
+++ b/src/gui/gui-history.h
@@ -39,6 +39,8 @@ extern void gui_history_global_add (const char *string);
extern void gui_history_add (struct t_gui_buffer *buffer, const char *string);
extern void gui_history_global_free ();
extern void gui_history_buffer_free (struct t_gui_buffer *buffer);
+extern struct t_hdata *gui_history_hdata_history_cb (void *data,
+ const char *hdata_name);
extern int gui_history_add_to_infolist (struct t_infolist *infolist,
struct t_gui_history *history);
diff --git a/src/gui/gui-input.c b/src/gui/gui-input.c
index 86aa6b4c2..8659e062b 100644
--- a/src/gui/gui-input.c
+++ b/src/gui/gui-input.c
@@ -275,14 +275,14 @@ gui_input_move_to_buffer (struct t_gui_buffer *from_buffer,
/* move undo data */
gui_buffer_undo_free_all (to_buffer);
- (to_buffer->input_undo_snap).data = (from_buffer->input_undo_snap).data;
- (to_buffer->input_undo_snap).pos = (from_buffer->input_undo_snap).pos;
+ (to_buffer->input_undo_snap)->data = (from_buffer->input_undo_snap)->data;
+ (to_buffer->input_undo_snap)->pos = (from_buffer->input_undo_snap)->pos;
to_buffer->input_undo = from_buffer->input_undo;
to_buffer->last_input_undo = from_buffer->last_input_undo;
to_buffer->ptr_input_undo = from_buffer->ptr_input_undo;
to_buffer->input_undo_count = from_buffer->input_undo_count;
- (from_buffer->input_undo_snap).data = NULL;
- (from_buffer->input_undo_snap).pos = 0;
+ (from_buffer->input_undo_snap)->data = NULL;
+ (from_buffer->input_undo_snap)->pos = 0;
from_buffer->input_undo = NULL;
from_buffer->last_input_undo = NULL;
from_buffer->ptr_input_undo = NULL;
diff --git a/src/gui/gui-keyboard.c b/src/gui/gui-keyboard.c
index 0e308eed9..309ec9d42 100644
--- a/src/gui/gui-keyboard.c
+++ b/src/gui/gui-keyboard.c
@@ -26,11 +26,13 @@
#endif
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include "../core/weechat.h"
+#include "../core/wee-hdata.h"
#include "../core/wee-hook.h"
#include "../core/wee-infolist.h"
#include "../core/wee-input.h"
@@ -72,6 +74,8 @@ int gui_keyboard_paste_lines = 0; /* number of lines for pending paste */
time_t gui_keyboard_last_activity_time = 0; /* last activity time (key) */
+struct t_hdata *gui_keyboard_hdata_key = NULL;
+
/*
* gui_keyboard_init: init keyboard
@@ -746,6 +750,37 @@ gui_keyboard_end ()
}
/*
+ * gui_keyboard_hdata_key_cb: return hdata for key
+ */
+
+struct t_hdata *
+gui_keyboard_hdata_key_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_keyboard_hdata_key)
+ return gui_keyboard_hdata_key;
+
+ hdata = hdata_new (hdata_name, "prev_key", "next_key");
+ if (hdata)
+ {
+ gui_keyboard_hdata_key = hdata;
+ HDATA_VAR(struct t_gui_key, key, STRING);
+ HDATA_VAR(struct t_gui_key, command, STRING);
+ HDATA_VAR(struct t_gui_key, prev_key, POINTER);
+ HDATA_VAR(struct t_gui_key, next_key, POINTER);
+ HDATA_LIST(gui_keys);
+ HDATA_LIST(last_gui_key);
+ HDATA_LIST(gui_default_keys);
+ HDATA_LIST(last_gui_default_key);
+ }
+ return gui_keyboard_hdata_key;
+}
+
+/*
* gui_keyboard_add_to_infolist: add a key in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/gui/gui-keyboard.h b/src/gui/gui-keyboard.h
index 3feb766d0..6c5de214b 100644
--- a/src/gui/gui-keyboard.h
+++ b/src/gui/gui-keyboard.h
@@ -80,6 +80,8 @@ extern int gui_keyboard_get_paste_lines ();
extern void gui_keyboard_paste_accept ();
extern void gui_keyboard_paste_cancel ();
extern void gui_keyboard_end ();
+extern struct t_hdata *gui_keyboard_hdata_key_cb (void *data,
+ const char *hdata_name);
extern int gui_keyboard_add_to_infolist (struct t_infolist *infolist,
struct t_gui_key *key);
extern void gui_keyboard_print_log (struct t_gui_buffer *buffer);
diff --git a/src/gui/gui-line.c b/src/gui/gui-line.c
index 173980dda..38b44c693 100644
--- a/src/gui/gui-line.c
+++ b/src/gui/gui-line.c
@@ -26,11 +26,13 @@
#endif
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include "../core/weechat.h"
#include "../core/wee-config.h"
#include "../core/wee-hashtable.h"
+#include "../core/wee-hdata.h"
#include "../core/wee-hook.h"
#include "../core/wee-infolist.h"
#include "../core/wee-log.h"
@@ -45,6 +47,11 @@
#include "gui-window.h"
+struct t_hdata *gui_line_hdata_lines = NULL;
+struct t_hdata *gui_line_hdata_line = NULL;
+struct t_hdata *gui_line_hdata_line_data = NULL;
+
+
/*
* gui_lines_alloc: alloc structure "t_gui_lines" and initialize it
*/
@@ -1133,6 +1140,99 @@ gui_line_mix_buffers (struct t_gui_buffer *buffer)
}
/*
+ * gui_line_hdata_lines_cb: return hdata for lines
+ */
+
+struct t_hdata *
+gui_line_hdata_lines_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_line_hdata_lines)
+ return gui_line_hdata_lines;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ gui_line_hdata_lines = hdata;
+ HDATA_VAR(struct t_gui_lines, first_line, POINTER);
+ HDATA_VAR(struct t_gui_lines, last_line, POINTER);
+ HDATA_VAR(struct t_gui_lines, last_read_line, POINTER);
+ HDATA_VAR(struct t_gui_lines, lines_count, INTEGER);
+ HDATA_VAR(struct t_gui_lines, first_line_not_read, INTEGER);
+ HDATA_VAR(struct t_gui_lines, lines_hidden, INTEGER);
+ HDATA_VAR(struct t_gui_lines, buffer_max_length, INTEGER);
+ HDATA_VAR(struct t_gui_lines, prefix_max_length, INTEGER);
+ }
+ return gui_line_hdata_lines;
+}
+
+/*
+ * gui_line_hdata_line_cb: return hdata for line
+ */
+
+struct t_hdata *
+gui_line_hdata_line_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_line_hdata_line)
+ return gui_line_hdata_line;
+
+ hdata = hdata_new (hdata_name, "prev_line", "next_line");
+ if (hdata)
+ {
+ gui_line_hdata_line = hdata;
+ HDATA_VAR(struct t_gui_line, data, POINTER);
+ HDATA_VAR(struct t_gui_line, prev_line, POINTER);
+ HDATA_VAR(struct t_gui_line, next_line, POINTER);
+ }
+ return gui_line_hdata_line;
+}
+
+/*
+ * gui_line_hdata_line_data_cb: return hdata for line data
+ */
+
+struct t_hdata *
+gui_line_hdata_line_data_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_line_hdata_line_data)
+ return gui_line_hdata_line_data;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ gui_line_hdata_line_data = hdata;
+ HDATA_VAR(struct t_gui_line_data, buffer, POINTER);
+ HDATA_VAR(struct t_gui_line_data, y, INTEGER);
+ HDATA_VAR(struct t_gui_line_data, date, TIME);
+ HDATA_VAR(struct t_gui_line_data, date_printed, TIME);
+ HDATA_VAR(struct t_gui_line_data, str_time, STRING);
+ HDATA_VAR(struct t_gui_line_data, tags_count, INTEGER);
+ HDATA_VAR(struct t_gui_line_data, tags_array, POINTER);
+ HDATA_VAR(struct t_gui_line_data, displayed, INTEGER);
+ HDATA_VAR(struct t_gui_line_data, highlight, INTEGER);
+ HDATA_VAR(struct t_gui_line_data, refresh_needed, INTEGER);
+ HDATA_VAR(struct t_gui_line_data, prefix, STRING);
+ HDATA_VAR(struct t_gui_line_data, prefix_length, INTEGER);
+ HDATA_VAR(struct t_gui_line_data, message, STRING);
+ }
+ return gui_line_hdata_line_data;
+}
+
+/*
* gui_buffer_line_add_to_infolist: add a buffer line in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/gui/gui-line.h b/src/gui/gui-line.h
index c0c78bbcd..2d1566db5 100644
--- a/src/gui/gui-line.h
+++ b/src/gui/gui-line.h
@@ -102,6 +102,12 @@ extern void gui_line_add_y (struct t_gui_buffer *buffer, int y,
const char *message);
extern void gui_line_clear (struct t_gui_line *line);
extern void gui_line_mix_buffers (struct t_gui_buffer *buffer);
+extern struct t_hdata *gui_line_hdata_lines_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *gui_line_hdata_line_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *gui_line_hdata_line_data_cb (void *data,
+ const char *hdata_name);
extern int gui_line_add_to_infolist (struct t_infolist *infolist,
struct t_gui_lines *lines,
struct t_gui_line *line);
diff --git a/src/gui/gui-nicklist.c b/src/gui/gui-nicklist.c
index 2958654d4..a1dc61dab 100644
--- a/src/gui/gui-nicklist.c
+++ b/src/gui/gui-nicklist.c
@@ -26,6 +26,7 @@
#endif
#include <stdlib.h>
+#include <stddef.h>
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
@@ -35,6 +36,7 @@
#include <ctype.h>
#include "../core/weechat.h"
+#include "../core/wee-hdata.h"
#include "../core/wee-hook.h"
#include "../core/wee-infolist.h"
#include "../core/wee-log.h"
@@ -46,6 +48,10 @@
#include "gui-color.h"
+struct t_hdata *gui_nicklist_hdata_nick_group = NULL;
+struct t_hdata *gui_nicklist_hdata_nick = NULL;
+
+
/*
* gui_nicklist_send_signal: send a signal when something has changed in
* nicklist
@@ -940,6 +946,71 @@ gui_nicklist_nick_set (struct t_gui_buffer *buffer,
}
/*
+ * gui_nicklist_hdata_nick_group_cb: return hdata for nick_group
+ */
+
+struct t_hdata *
+gui_nicklist_hdata_nick_group_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_nicklist_hdata_nick_group)
+ return gui_nicklist_hdata_nick_group;
+
+ hdata = hdata_new (hdata_name, "prev_group", "next_group");
+ if (hdata)
+ {
+ gui_nicklist_hdata_nick_group = hdata;
+ HDATA_VAR(struct t_gui_nick_group, name, STRING);
+ HDATA_VAR(struct t_gui_nick_group, color, STRING);
+ HDATA_VAR(struct t_gui_nick_group, visible, INTEGER);
+ HDATA_VAR(struct t_gui_nick_group, level, INTEGER);
+ HDATA_VAR(struct t_gui_nick_group, parent, POINTER);
+ HDATA_VAR(struct t_gui_nick_group, childs, POINTER);
+ HDATA_VAR(struct t_gui_nick_group, last_child, POINTER);
+ HDATA_VAR(struct t_gui_nick_group, nicks, POINTER);
+ HDATA_VAR(struct t_gui_nick_group, last_nick, POINTER);
+ HDATA_VAR(struct t_gui_nick_group, prev_group, POINTER);
+ HDATA_VAR(struct t_gui_nick_group, next_group, POINTER);
+ }
+ return gui_nicklist_hdata_nick_group;
+}
+
+/*
+ * gui_nicklist_hdata_nick_cb: return hdata for nick
+ */
+
+struct t_hdata *
+gui_nicklist_hdata_nick_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_nicklist_hdata_nick)
+ return gui_nicklist_hdata_nick;
+
+ hdata = hdata_new (hdata_name, "prev_nick", "next_nick");
+ if (hdata)
+ {
+ gui_nicklist_hdata_nick = hdata;
+ HDATA_VAR(struct t_gui_nick, group, POINTER);
+ HDATA_VAR(struct t_gui_nick, name, STRING);
+ HDATA_VAR(struct t_gui_nick, color, STRING);
+ HDATA_VAR(struct t_gui_nick, prefix, STRING);
+ HDATA_VAR(struct t_gui_nick, prefix_color, STRING);
+ HDATA_VAR(struct t_gui_nick, visible, INTEGER);
+ HDATA_VAR(struct t_gui_nick, prev_nick, POINTER);
+ HDATA_VAR(struct t_gui_nick, next_nick, POINTER);
+ }
+ return gui_nicklist_hdata_nick;
+}
+
+/*
* gui_nicklist_add_group_to_infolist: add a group in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/gui/gui-nicklist.h b/src/gui/gui-nicklist.h
index 05d0ce4f4..969b47a59 100644
--- a/src/gui/gui-nicklist.h
+++ b/src/gui/gui-nicklist.h
@@ -108,6 +108,10 @@ extern void *gui_nicklist_nick_get_pointer (struct t_gui_buffer *buffer,
extern void gui_nicklist_nick_set (struct t_gui_buffer *buffer,
struct t_gui_nick *nick,
const char *property, const char *value);
+extern struct t_hdata *gui_nicklist_hdata_nick_group_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *gui_nicklist_hdata_nick_cb (void *data,
+ const char *hdata_name);
extern int gui_nicklist_add_to_infolist (struct t_infolist *infolist,
struct t_gui_buffer *buffer,
const char *name);
diff --git a/src/gui/gui-window.c b/src/gui/gui-window.c
index 6a7d94245..eb0a2b832 100644
--- a/src/gui/gui-window.c
+++ b/src/gui/gui-window.c
@@ -26,6 +26,7 @@
#endif
#include <stdlib.h>
+#include <stddef.h>
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
@@ -36,6 +37,7 @@
#include "../core/weechat.h"
#include "../core/wee-config.h"
+#include "../core/wee-hdata.h"
#include "../core/wee-hook.h"
#include "../core/wee-infolist.h"
#include "../core/wee-log.h"
@@ -69,6 +71,10 @@ struct t_gui_layout_window *gui_window_layout_before_zoom = NULL;
int gui_window_layout_id_current_window = -1;
/* current window id before zoom */
+struct t_hdata *gui_window_hdata_window = NULL;
+struct t_hdata *gui_window_hdata_window_scroll = NULL;
+struct t_hdata *gui_window_hdata_window_tree = NULL;
+
/*
* gui_window_ask_refresh: set "gui_window_refresh_needed" flag
@@ -1264,6 +1270,118 @@ gui_window_zoom (struct t_gui_window *window)
}
/*
+ * gui_window_hdata_window_cb: return hdata for window
+ */
+
+struct t_hdata *
+gui_window_hdata_window_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_window_hdata_window)
+ return gui_window_hdata_window;
+
+ hdata = hdata_new (hdata_name, "prev_window", "next_window");
+ if (hdata)
+ {
+ gui_window_hdata_window = hdata;
+ HDATA_VAR(struct t_gui_window, win_x, INTEGER);
+ HDATA_VAR(struct t_gui_window, win_y, INTEGER);
+ HDATA_VAR(struct t_gui_window, win_width, INTEGER);
+ HDATA_VAR(struct t_gui_window, win_height, INTEGER);
+ HDATA_VAR(struct t_gui_window, win_width_pct, INTEGER);
+ HDATA_VAR(struct t_gui_window, win_height_pct, INTEGER);
+ HDATA_VAR(struct t_gui_window, win_chat_x, INTEGER);
+ HDATA_VAR(struct t_gui_window, win_chat_y, INTEGER);
+ HDATA_VAR(struct t_gui_window, win_chat_width, INTEGER);
+ HDATA_VAR(struct t_gui_window, win_chat_height, INTEGER);
+ HDATA_VAR(struct t_gui_window, win_chat_cursor_x, INTEGER);
+ HDATA_VAR(struct t_gui_window, win_chat_cursor_y, INTEGER);
+ HDATA_VAR(struct t_gui_window, bar_windows, POINTER);
+ HDATA_VAR(struct t_gui_window, last_bar_window, POINTER);
+ HDATA_VAR(struct t_gui_window, refresh_needed, INTEGER);
+ HDATA_VAR(struct t_gui_window, gui_objects, POINTER);
+ HDATA_VAR(struct t_gui_window, buffer, POINTER);
+ HDATA_VAR(struct t_gui_window, layout_plugin_name, STRING);
+ HDATA_VAR(struct t_gui_window, layout_buffer_name, STRING);
+ HDATA_VAR(struct t_gui_window, scroll, POINTER);
+ HDATA_VAR(struct t_gui_window, ptr_tree, POINTER);
+ HDATA_VAR(struct t_gui_window, prev_window, POINTER);
+ HDATA_VAR(struct t_gui_window, next_window, POINTER);
+ HDATA_LIST(gui_windows);
+ HDATA_LIST(last_gui_window);
+ HDATA_LIST(gui_current_window);
+ }
+ return gui_window_hdata_window;
+}
+
+/*
+ * gui_window_hdata_window_scroll_cb: return hdata for window scroll
+ */
+
+struct t_hdata *
+gui_window_hdata_window_scroll_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_window_hdata_window_scroll)
+ return gui_window_hdata_window_scroll;
+
+ hdata = hdata_new (hdata_name, "prev_scroll", "next_scroll");
+ if (hdata)
+ {
+ gui_window_hdata_window_scroll = hdata;
+ HDATA_VAR(struct t_gui_window_scroll, buffer, POINTER);
+ HDATA_VAR(struct t_gui_window_scroll, first_line_displayed, INTEGER);
+ HDATA_VAR(struct t_gui_window_scroll, start_line, POINTER);
+ HDATA_VAR(struct t_gui_window_scroll, start_line_pos, INTEGER);
+ HDATA_VAR(struct t_gui_window_scroll, scrolling, INTEGER);
+ HDATA_VAR(struct t_gui_window_scroll, start_col, INTEGER);
+ HDATA_VAR(struct t_gui_window_scroll, lines_after, INTEGER);
+ HDATA_VAR(struct t_gui_window_scroll, reset_allowed, INTEGER);
+ HDATA_VAR(struct t_gui_window_scroll, prev_scroll, POINTER);
+ HDATA_VAR(struct t_gui_window_scroll, next_scroll, POINTER);
+ }
+ return gui_window_hdata_window_scroll;
+}
+
+/*
+ * gui_window_hdata_window_tree_cb: return hdata for window tree
+ */
+
+struct t_hdata *
+gui_window_hdata_window_tree_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (gui_window_hdata_window_tree)
+ return gui_window_hdata_window_tree;
+
+ hdata = hdata_new (hdata_name, NULL, NULL);
+ if (hdata)
+ {
+ gui_window_hdata_window_tree = hdata;
+ HDATA_VAR(struct t_gui_window_tree, parent_node, POINTER);
+ HDATA_VAR(struct t_gui_window_tree, split_pct, INTEGER);
+ HDATA_VAR(struct t_gui_window_tree, split_horizontal, INTEGER);
+ HDATA_VAR(struct t_gui_window_tree, child1, POINTER);
+ HDATA_VAR(struct t_gui_window_tree, child2, POINTER);
+ HDATA_VAR(struct t_gui_window_tree, window, POINTER);
+ HDATA_LIST(gui_windows_tree);
+ }
+ return gui_window_hdata_window_tree;
+}
+
+/*
* gui_window_add_to_infolist: add a window in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/gui/gui-window.h b/src/gui/gui-window.h
index 09fdf0cce..92b76a517 100644
--- a/src/gui/gui-window.h
+++ b/src/gui/gui-window.h
@@ -155,6 +155,12 @@ extern void gui_window_search_restart (struct t_gui_window *window);
extern void gui_window_search_stop (struct t_gui_window *window);
extern int gui_window_search_text (struct t_gui_window *window);
extern void gui_window_zoom (struct t_gui_window *window);
+extern struct t_hdata *gui_window_hdata_window_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *gui_window_hdata_window_scroll_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *gui_window_hdata_window_tree_cb (void *data,
+ const char *hdata_name);
extern int gui_window_add_to_infolist (struct t_infolist *infolist,
struct t_gui_window *window);
extern void gui_window_print_log ();
diff --git a/src/plugins/irc/irc-channel.c b/src/plugins/irc/irc-channel.c
index 8fd832432..e22ddc05c 100644
--- a/src/plugins/irc/irc-channel.c
+++ b/src/plugins/irc/irc-channel.c
@@ -22,6 +22,7 @@
*/
#include <stdlib.h>
+#include <stddef.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
@@ -39,6 +40,10 @@
#include "irc-input.h"
+struct t_hdata *irc_channel_hdata_channel = NULL;
+struct t_hdata *irc_channel_hdata_channel_speaking = NULL;
+
+
/*
* irc_channel_valid: check if a channel pointer exists for a server
* return 1 if channel exists
@@ -833,6 +838,81 @@ irc_channel_free_all (struct t_irc_server *server)
}
/*
+ * irc_channel_hdata_channel_cb: return hdata for channel
+ */
+
+struct t_hdata *
+irc_channel_hdata_channel_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (irc_channel_hdata_channel)
+ return irc_channel_hdata_channel;
+
+ hdata = weechat_hdata_new (hdata_name, "prev_channel", "next_channel");
+ if (hdata)
+ {
+ irc_channel_hdata_channel = hdata;
+ WEECHAT_HDATA_VAR(struct t_irc_channel, type, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, name, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, topic, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, modes, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, limit, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, key, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, checking_away, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, away_message, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, has_quit_server, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, cycle, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, part, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, display_creation_date, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, nick_completion_reset, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, pv_remote_nick_color, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, hook_autorejoin, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, nicks_count, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, nicks, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, last_nick, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, nicks_speaking, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, nicks_speaking_time, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, last_nick_speaking_time, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, buffer, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, buffer_as_string, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, prev_channel, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel, next_channel, POINTER);
+ }
+ return irc_channel_hdata_channel;
+}
+
+/*
+ * irc_channel_hdata_channel_speaking_cb: return hdata for channel_speaking
+ */
+
+struct t_hdata *
+irc_channel_hdata_channel_speaking_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (irc_channel_hdata_channel_speaking)
+ return irc_channel_hdata_channel_speaking;
+
+ hdata = weechat_hdata_new (hdata_name, "prev_nick", "next_nick");
+ if (hdata)
+ {
+ irc_channel_hdata_channel_speaking = hdata;
+ WEECHAT_HDATA_VAR(struct t_irc_channel_speaking, nick, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_channel_speaking, time_last_message, TIME);
+ WEECHAT_HDATA_VAR(struct t_irc_channel_speaking, prev_nick, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_channel_speaking, next_nick, POINTER);
+ }
+ return irc_channel_hdata_channel_speaking;
+}
+
+/*
* irc_channel_add_to_infolist: add a channel in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/plugins/irc/irc-channel.h b/src/plugins/irc/irc-channel.h
index d170a10ab..379fed2cf 100644
--- a/src/plugins/irc/irc-channel.h
+++ b/src/plugins/irc/irc-channel.h
@@ -118,6 +118,10 @@ extern int irc_channel_autorejoin_cb (void *data, int remaining_calls);
extern void irc_channel_display_nick_back_in_pv (struct t_irc_server *server,
struct t_irc_nick *nick,
const char *nickname);
+extern struct t_hdata *irc_channel_hdata_channel_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *irc_channel_hdata_channel_speaking_cb (void *data,
+ const char *hdata_name);
extern int irc_channel_add_to_infolist (struct t_infolist *infolist,
struct t_irc_channel *channel);
extern void irc_channel_print_log (struct t_irc_channel *channel);
diff --git a/src/plugins/irc/irc-ignore.c b/src/plugins/irc/irc-ignore.c
index 50b9b0c1b..71b91b0e6 100644
--- a/src/plugins/irc/irc-ignore.c
+++ b/src/plugins/irc/irc-ignore.c
@@ -22,6 +22,7 @@
*/
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include "../weechat-plugin.h"
@@ -34,6 +35,8 @@
struct t_irc_ignore *irc_ignore_list = NULL; /* list of ignore */
struct t_irc_ignore *last_irc_ignore = NULL; /* last ignore in list */
+struct t_hdata *irc_ignore_hdata_ignore = NULL;
+
/*
* irc_ignore_valid: check if an ignore pointer exists
@@ -302,6 +305,38 @@ irc_ignore_free_all ()
}
/*
+ * irc_ignore_hdata_ignore_cb: return hdata for ignore
+ */
+
+struct t_hdata *
+irc_ignore_hdata_ignore_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (irc_ignore_hdata_ignore)
+ return irc_ignore_hdata_ignore;
+
+ hdata = weechat_hdata_new (hdata_name, "prev_ignore", "next_ignore");
+ if (hdata)
+ {
+ irc_ignore_hdata_ignore = hdata;
+ WEECHAT_HDATA_VAR(struct t_irc_ignore, number, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_ignore, mask, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_ignore, regex_mask, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_ignore, server, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_ignore, channel, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_ignore, prev_ignore, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_ignore, next_ignore, POINTER);
+ WEECHAT_HDATA_LIST(irc_ignore_list);
+ WEECHAT_HDATA_LIST(last_irc_ignore);
+ }
+ return irc_ignore_hdata_ignore;
+}
+
+/*
* irc_ignore_add_to_infolist: add an ignore in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/plugins/irc/irc-ignore.h b/src/plugins/irc/irc-ignore.h
index 7078a761f..e52300e59 100644
--- a/src/plugins/irc/irc-ignore.h
+++ b/src/plugins/irc/irc-ignore.h
@@ -51,6 +51,8 @@ extern int irc_ignore_check (struct t_irc_server *server,
const char *host);
extern void irc_ignore_free (struct t_irc_ignore *ignore);
extern void irc_ignore_free_all ();
+extern struct t_hdata *irc_ignore_hdata_ignore_cb (void *data,
+ const char *hdata_name);
extern int irc_ignore_add_to_infolist (struct t_infolist *infolist,
struct t_irc_ignore *ignore);
extern void irc_ignore_print_log ();
diff --git a/src/plugins/irc/irc-info.c b/src/plugins/irc/irc-info.c
index c4b173ffd..a482be480 100644
--- a/src/plugins/irc/irc-info.c
+++ b/src/plugins/irc/irc-info.c
@@ -18,7 +18,7 @@
*/
/*
- * irc-info.c: info and infolist hooks for IRC plugin
+ * irc-info.c: info, infolist and hdata hooks for IRC plugin
*/
#include <stdlib.h>
@@ -34,6 +34,7 @@
#include "irc-nick.h"
#include "irc-notify.h"
#include "irc-protocol.h"
+#include "irc-redirect.h"
#include "irc-server.h"
@@ -626,4 +627,22 @@ irc_info_init ()
N_("notify pointer (optional)"),
N_("server name (can start or end with \"*\" as wildcard) (optional)"),
&irc_info_get_infolist_cb, NULL);
+
+ /* hdata hooks */
+ weechat_hook_hdata ("irc_nick", N_("irc nick"),
+ &irc_nick_hdata_nick_cb, NULL);
+ weechat_hook_hdata ("irc_channel", N_("irc channel"),
+ &irc_channel_hdata_channel_cb, NULL);
+ weechat_hook_hdata ("irc_channel_speaking", N_("irc channel_speaking"),
+ &irc_channel_hdata_channel_speaking_cb, NULL);
+ weechat_hook_hdata ("irc_ignore", N_("irc ignore"),
+ &irc_ignore_hdata_ignore_cb, NULL);
+ weechat_hook_hdata ("irc_notify", N_("irc notify"),
+ &irc_notify_hdata_notify_cb, NULL);
+ weechat_hook_hdata ("irc_redirect_pattern", N_("pattern for irc redirect"),
+ &irc_redirect_hdata_redirect_pattern_cb, NULL);
+ weechat_hook_hdata ("irc_redirect", N_("irc redirect"),
+ &irc_redirect_hdata_redirect_cb, NULL);
+ weechat_hook_hdata ("irc_server", N_("irc server"),
+ &irc_server_hdata_server_cb, NULL);
}
diff --git a/src/plugins/irc/irc-nick.c b/src/plugins/irc/irc-nick.c
index 322cb10d0..005151db9 100644
--- a/src/plugins/irc/irc-nick.c
+++ b/src/plugins/irc/irc-nick.c
@@ -22,6 +22,7 @@
*/
#include <stdlib.h>
+#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>
@@ -36,6 +37,9 @@
#include "irc-channel.h"
+struct t_hdata *irc_nick_hdata_nick = NULL;
+
+
/*
* irc_nick_valid: check if a nick pointer exists for a channel
* return 1 if nick exists
@@ -928,6 +932,37 @@ irc_nick_color_for_pv (struct t_irc_channel *channel, const char *nickname)
}
/*
+ * irc_nick_hdata_nick_cb: return hdata for nick
+ */
+
+struct t_hdata *
+irc_nick_hdata_nick_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (irc_nick_hdata_nick)
+ return irc_nick_hdata_nick;
+
+ hdata = weechat_hdata_new (hdata_name, "prev_nick", "next_nick");
+ if (hdata)
+ {
+ irc_nick_hdata_nick = hdata;
+ WEECHAT_HDATA_VAR(struct t_irc_nick, name, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_nick, host, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_nick, prefixes, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_nick, prefix, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_nick, away, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_nick, color, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_nick, prev_nick, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_nick, next_nick, POINTER);
+ }
+ return irc_nick_hdata_nick;
+}
+
+/*
* irc_nick_add_to_infolist: add a nick in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/plugins/irc/irc-nick.h b/src/plugins/irc/irc-nick.h
index e40347f23..f6ee95c9c 100644
--- a/src/plugins/irc/irc-nick.h
+++ b/src/plugins/irc/irc-nick.h
@@ -90,6 +90,8 @@ extern char *irc_nick_as_prefix (struct t_irc_server *server,
const char *force_color);
extern const char * irc_nick_color_for_pv (struct t_irc_channel *channel,
const char *nickname);
+extern struct t_hdata *irc_nick_hdata_nick_cb (void *data,
+ const char *hdata_name);
extern int irc_nick_add_to_infolist (struct t_infolist *infolist,
struct t_irc_nick *nick);
extern void irc_nick_print_log (struct t_irc_nick *nick);
diff --git a/src/plugins/irc/irc-notify.c b/src/plugins/irc/irc-notify.c
index fd36d690c..3df305e28 100644
--- a/src/plugins/irc/irc-notify.c
+++ b/src/plugins/irc/irc-notify.c
@@ -22,6 +22,7 @@
*/
#include <stdlib.h>
+#include <stddef.h>
#include <stdio.h>
#include <string.h>
@@ -42,6 +43,8 @@ struct t_hook *irc_notify_timer_whois = NULL; /* timer for "whois" */
/* hsignal for redirected commands */
struct t_hook *irc_notify_hsignal = NULL;
+struct t_hdata *irc_notify_hdata_notify = NULL;
+
/*
* irc_notify_valid: check if a notify pointer exists for a server
@@ -809,6 +812,37 @@ irc_notify_timer_whois_cb (void *data, int remaining_calls)
}
/*
+ * irc_notify_hdata_notify_cb: return hdata for notify
+ */
+
+struct t_hdata *
+irc_notify_hdata_notify_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (irc_notify_hdata_notify)
+ return irc_notify_hdata_notify;
+
+ hdata = weechat_hdata_new (hdata_name, "prev_notify", "next_notify");
+ if (hdata)
+ {
+ irc_notify_hdata_notify = hdata;
+ WEECHAT_HDATA_VAR(struct t_irc_notify, server, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_notify, nick, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_notify, check_away, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_notify, is_on_server, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_notify, away_message, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_notify, ison_received, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_notify, prev_notify, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_notify, next_notify, POINTER);
+ }
+ return irc_notify_hdata_notify;
+}
+
+/*
* irc_notify_add_to_infolist: add a notify in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/plugins/irc/irc-notify.h b/src/plugins/irc/irc-notify.h
index ce6a85c38..c348c9ae3 100644
--- a/src/plugins/irc/irc-notify.h
+++ b/src/plugins/irc/irc-notify.h
@@ -55,6 +55,8 @@ extern void irc_notify_free_all (struct t_irc_server *server);
extern void irc_notify_display_list (struct t_irc_server *server);
extern int irc_notify_timer_ison_cb (void *data, int remaining_calls);
extern int irc_notify_timer_whois_cb (void *data, int remaining_calls);
+extern struct t_hdata *irc_notify_hdata_notify_cb (void *data,
+ const char *hdata_name);
extern int irc_notify_add_to_infolist (struct t_infolist *infolist,
struct t_irc_notify *notify);
extern void irc_notify_print_log (struct t_irc_server *server);
diff --git a/src/plugins/irc/irc-redirect.c b/src/plugins/irc/irc-redirect.c
index 1ef7301bc..4f7f83ece 100644
--- a/src/plugins/irc/irc-redirect.c
+++ b/src/plugins/irc/irc-redirect.c
@@ -22,6 +22,7 @@
*/
#include <stdlib.h>
+#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
@@ -36,6 +37,9 @@
struct t_irc_redirect_pattern *irc_redirect_patterns = NULL;
struct t_irc_redirect_pattern *last_irc_redirect_pattern = NULL;
+struct t_hdata *irc_redirect_hdata_redirect_pattern = NULL;
+struct t_hdata *irc_redirect_hdata_redirect = NULL;
+
/* default redirect patterns */
struct t_irc_redirect_pattern irc_redirect_patterns_default[] =
{
@@ -952,6 +956,81 @@ irc_redirect_free_all (struct t_irc_server *server)
}
/*
+ * irc_redirect_hdata_redirect_pattern_cb: return hdata for redirect pattern
+ */
+
+struct t_hdata *
+irc_redirect_hdata_redirect_pattern_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (irc_redirect_hdata_redirect_pattern)
+ return irc_redirect_hdata_redirect_pattern;
+
+ hdata = weechat_hdata_new (hdata_name, "prev_redirect", "next_redirect");
+ if (hdata)
+ {
+ irc_redirect_hdata_redirect_pattern = hdata;
+ WEECHAT_HDATA_VAR(struct t_irc_redirect_pattern, name, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect_pattern, temp_pattern, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect_pattern, timeout, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect_pattern, cmd_start, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect_pattern, cmd_stop, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect_pattern, cmd_extra, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect_pattern, prev_redirect, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect_pattern, next_redirect, POINTER);
+ WEECHAT_HDATA_LIST(irc_redirect_patterns);
+ WEECHAT_HDATA_LIST(last_irc_redirect_pattern);
+ }
+ return irc_redirect_hdata_redirect_pattern;
+}
+
+/*
+ * irc_redirect_hdata_redirect_cb: return hdata for redirect
+ */
+
+struct t_hdata *
+irc_redirect_hdata_redirect_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (irc_redirect_hdata_redirect)
+ return irc_redirect_hdata_redirect;
+
+ hdata = weechat_hdata_new (hdata_name, "prev_redirect", "next_redirect");
+ if (hdata)
+ {
+ irc_redirect_hdata_redirect = hdata;
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, server, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, pattern, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, signal, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, count, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, current_count, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, string, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, timeout, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, command, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, start_time, TIME);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, cmd_start, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, cmd_stop, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, cmd_extra, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, cmd_start_received, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, cmd_stop_received, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, cmd_filter, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, output, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, output_size, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, prev_redirect, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_redirect, next_redirect, POINTER);
+ }
+ return irc_redirect_hdata_redirect;
+}
+
+/*
* irc_redirect_pattern_add_to_infolist: add a redirect pattern in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/plugins/irc/irc-redirect.h b/src/plugins/irc/irc-redirect.h
index 02d03e78f..4d7aef7d1 100644
--- a/src/plugins/irc/irc-redirect.h
+++ b/src/plugins/irc/irc-redirect.h
@@ -108,6 +108,10 @@ extern int irc_redirect_message (struct t_irc_server *server,
const char *arguments);
extern void irc_redirect_free (struct t_irc_redirect *redirect);
extern void irc_redirect_free_all (struct t_irc_server *server);
+extern struct t_hdata *irc_redirect_hdata_redirect_pattern_cb (void *data,
+ const char *hdata_name);
+extern struct t_hdata *irc_redirect_hdata_redirect_cb (void *data,
+ const char *hdata_name);
extern int irc_redirect_pattern_add_to_infolist (struct t_infolist *infolist,
struct t_irc_redirect_pattern *redirect_pattern);
extern int irc_redirect_add_to_infolist (struct t_infolist *infolist,
diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c
index c2eca6189..55ca31154 100644
--- a/src/plugins/irc/irc-server.c
+++ b/src/plugins/irc/irc-server.c
@@ -23,6 +23,7 @@
*/
#include <stdlib.h>
+#include <stddef.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
@@ -64,6 +65,8 @@ struct t_irc_server *last_irc_server = NULL;
struct t_irc_message *irc_recv_msgq = NULL;
struct t_irc_message *irc_msgq_last_msg = NULL;
+struct t_hdata *irc_server_hdata_server = NULL;
+
char *irc_server_option_string[IRC_SERVER_NUM_OPTIONS] =
{ "addresses", "proxy", "ipv6",
"ssl", "ssl_cert", "ssl_priorities", "ssl_dhkey_size", "ssl_verify",
@@ -3935,6 +3938,92 @@ irc_server_xfer_send_accept_resume_cb (void *data, const char *signal,
}
/*
+ * irc_server_hdata_server_cb: return hdata for server
+ */
+
+struct t_hdata *
+irc_server_hdata_server_cb (void *data, const char *hdata_name)
+{
+ struct t_hdata *hdata;
+
+ /* make C compiler happy */
+ (void) data;
+
+ if (irc_server_hdata_server)
+ return irc_server_hdata_server;
+
+ hdata = weechat_hdata_new (hdata_name, "prev_server", "next_server");
+ if (hdata)
+ {
+ irc_server_hdata_server = hdata;
+ WEECHAT_HDATA_VAR(struct t_irc_server, name, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_server, options, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, temp_server, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, reloading_from_config, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, reloaded_from_config, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, addresses_count, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, addresses_array, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, ports_array, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, index_current_address, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, current_address, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_server, current_ip, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_server, current_port, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, sock, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, hook_connect, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, hook_fd, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, hook_timer_connection, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, hook_timer_sasl, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, is_connected, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, ssl_connected, INTEGER);
+#ifdef HAVE_GNUTLS
+ WEECHAT_HDATA_VAR(struct t_irc_server, gnutls_sess, OTHER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, tls_cert, OTHER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, tls_cert_key, OTHER);
+#endif
+ WEECHAT_HDATA_VAR(struct t_irc_server, unterminated_message, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_server, nicks_count, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, nicks_array, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, nick_first_tried, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, nick, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_server, nick_modes, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_server, isupport, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_server, prefix_modes, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_server, prefix_chars, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_server, reconnect_delay, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, reconnect_start, TIME);
+ WEECHAT_HDATA_VAR(struct t_irc_server, command_time, TIME);
+ WEECHAT_HDATA_VAR(struct t_irc_server, reconnect_join, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, disable_autojoin, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, is_away, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, away_message, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_server, away_time, TIME);
+ WEECHAT_HDATA_VAR(struct t_irc_server, lag, INTEGER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, lag_check_time, OTHER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, lag_next_check, TIME);
+ WEECHAT_HDATA_VAR(struct t_irc_server, lag_last_refresh, TIME);
+ WEECHAT_HDATA_VAR(struct t_irc_server, cmd_list_regexp, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, last_user_message, TIME);
+ WEECHAT_HDATA_VAR(struct t_irc_server, last_away_check, TIME);
+ WEECHAT_HDATA_VAR(struct t_irc_server, outqueue, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, last_outqueue, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, redirects, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, last_redirect, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, notify_list, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, last_notify, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, manual_joins, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, buffer, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, buffer_as_string, STRING);
+ WEECHAT_HDATA_VAR(struct t_irc_server, channels, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, last_channel, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, prev_server, POINTER);
+ WEECHAT_HDATA_VAR(struct t_irc_server, next_server, POINTER);
+ WEECHAT_HDATA_LIST(irc_servers);
+ WEECHAT_HDATA_LIST(last_irc_server);
+ }
+ return irc_server_hdata_server;
+}
+
+/*
* irc_server_add_to_infolist: add a server in an infolist
* return 1 if ok, 0 if error
*/
diff --git a/src/plugins/irc/irc-server.h b/src/plugins/irc/irc-server.h
index 676959edd..ae2c53677 100644
--- a/src/plugins/irc/irc-server.h
+++ b/src/plugins/irc/irc-server.h
@@ -272,6 +272,8 @@ extern int irc_server_xfer_resume_ready_cb (void *data, const char *signal,
extern int irc_server_xfer_send_accept_resume_cb (void *data, const char *signal,
const char *type_data,
void *signal_data);
+extern struct t_hdata *irc_server_hdata_server_cb (void *data,
+ const char *hdata_name);
extern int irc_server_add_to_infolist (struct t_infolist *infolist,
struct t_irc_server *server);
extern void irc_server_print_log ();
diff --git a/src/plugins/plugin-api.c b/src/plugins/plugin-api.c
index a5c467594..454b7d380 100644
--- a/src/plugins/plugin-api.c
+++ b/src/plugins/plugin-api.c
@@ -37,6 +37,7 @@
#include "../core/weechat.h"
#include "../core/wee-config.h"
+#include "../core/wee-hashtable.h"
#include "../core/wee-hook.h"
#include "../core/wee-infolist.h"
#include "../core/wee-input.h"
@@ -47,6 +48,7 @@
#include "../gui/gui-bar-window.h"
#include "../gui/gui-buffer.h"
#include "../gui/gui-chat.h"
+#include "../gui/gui-completion.h"
#include "../gui/gui-color.h"
#include "../gui/gui-filter.h"
#include "../gui/gui-history.h"
@@ -56,6 +58,7 @@
#include "../gui/gui-nicklist.h"
#include "../gui/gui-window.h"
#include "plugin.h"
+#include "plugin-api.h"
#include "plugin-config.h"
@@ -1046,4 +1049,80 @@ plugin_api_init ()
N_("window pointer (optional)"),
N_("window name (can start or end with \"*\" as wildcard) (optional)"),
&plugin_api_infolist_get_internal, NULL);
+
+ /* WeeChat core hdata */
+ hook_hdata (NULL, "bar", N_("bar"),
+ &gui_bar_hdata_bar_cb, NULL);
+ hook_hdata (NULL, "bar_item", N_("bar item"),
+ &gui_bar_item_hdata_bar_item_cb, NULL);
+ hook_hdata (NULL, "buffer", N_("buffer"),
+ &gui_buffer_hdata_buffer_cb, NULL);
+ hook_hdata (NULL, "completion", N_("completion"),
+ &gui_completion_hdata_completion_cb, NULL);
+ hook_hdata (NULL, "completion_partial", N_("partial completion"),
+ &gui_completion_hdata_completion_partial_cb, NULL);
+ hook_hdata (NULL, "config_file", N_("config file"),
+ &config_file_hdata_config_file_cb, NULL);
+ hook_hdata (NULL, "config_section", N_("config section"),
+ &config_file_hdata_config_section_cb, NULL);
+ hook_hdata (NULL, "config_option", N_("config option"),
+ &config_file_hdata_config_option_cb, NULL);
+ hook_hdata (NULL, "filter", N_("filter"),
+ &gui_filter_hdata_filter_cb, NULL);
+ hook_hdata (NULL, "history", N_("history of commands in buffer"),
+ &gui_history_hdata_history_cb, NULL);
+ hook_hdata (NULL, "hook", N_("hook (variables common to all hook types)"),
+ &hook_hdata_hook_cb, NULL);
+ hook_hdata (NULL, "hook_command", N_("hook of type \"command\""),
+ &hook_hdata_hook_command_cb, NULL);
+ hook_hdata (NULL, "hook_command_run", N_("hook of type \"command_run\""),
+ &hook_hdata_hook_command_run_cb, NULL);
+ hook_hdata (NULL, "hook_timer", N_("hook of type \"timer\""),
+ &hook_hdata_hook_timer_cb, NULL);
+ hook_hdata (NULL, "hook_fd", N_("hook of type \"fd\""),
+ &hook_hdata_hook_fd_cb, NULL);
+ hook_hdata (NULL, "hook_process", N_("hook of type \"process\""),
+ &hook_hdata_hook_process_cb, NULL);
+ hook_hdata (NULL, "hook_connect", N_("hook of type \"connect\""),
+ &hook_hdata_hook_connect_cb, NULL);
+ hook_hdata (NULL, "hook_print", N_("hook of type \"print\""),
+ &hook_hdata_hook_print_cb, NULL);
+ hook_hdata (NULL, "hook_signal", N_("hook of type \"signal\""),
+ &hook_hdata_hook_signal_cb, NULL);
+ hook_hdata (NULL, "hook_hsignal", N_("hook of type \"hsignal\""),
+ &hook_hdata_hook_hsignal_cb, NULL);
+ hook_hdata (NULL, "hook_config", N_("hook of type \"config\""),
+ &hook_hdata_hook_config_cb, NULL);
+ hook_hdata (NULL, "hook_completion", N_("hook of type \"completion\""),
+ &hook_hdata_hook_completion_cb, NULL);
+ hook_hdata (NULL, "hook_modifier", N_("hook of type \"modifier\""),
+ &hook_hdata_hook_modifier_cb, NULL);
+ hook_hdata (NULL, "hook_info", N_("hook of type \"info\""),
+ &hook_hdata_hook_info_cb, NULL);
+ hook_hdata (NULL, "hook_info_hashtable", N_("hook of type \"info_hashtable\""),
+ &hook_hdata_hook_info_hashtable_cb, NULL);
+ hook_hdata (NULL, "hook_infolist", N_("hook of type \"infolist\""),
+ &hook_hdata_hook_infolist_cb, NULL);
+ hook_hdata (NULL, "hook_hdata", N_("hook of type \"hdata\""),
+ &hook_hdata_hook_hdata_cb, NULL);
+ hook_hdata (NULL, "input_undo", N_("undo for input line"),
+ &gui_buffer_hdata_input_undo_cb, NULL);
+ hook_hdata (NULL, "key", N_("key"),
+ &gui_keyboard_hdata_key_cb, NULL);
+ hook_hdata (NULL, "lines", N_("lines"),
+ &gui_line_hdata_lines_cb, NULL);
+ hook_hdata (NULL, "line", N_("line"),
+ &gui_line_hdata_line_cb, NULL);
+ hook_hdata (NULL, "line_data", N_("line data"),
+ &gui_line_hdata_line_data_cb, NULL);
+ hook_hdata (NULL, "nick_group", N_("group in nicklist"),
+ &gui_nicklist_hdata_nick_group_cb, NULL);
+ hook_hdata (NULL, "nick", N_("nick in nicklist"),
+ &gui_nicklist_hdata_nick_cb, NULL);
+ hook_hdata (NULL, "window", N_("window"),
+ &gui_window_hdata_window_cb, NULL);
+ hook_hdata (NULL, "window_scroll", N_("scroll info in window"),
+ &gui_window_hdata_window_scroll_cb, NULL);
+ hook_hdata (NULL, "window_tree", N_("tree of windows"),
+ &gui_window_hdata_window_tree_cb, NULL);
}
diff --git a/src/plugins/plugin-api.h b/src/plugins/plugin-api.h
index 4d9e70baa..a0bf42f84 100644
--- a/src/plugins/plugin-api.h
+++ b/src/plugins/plugin-api.h
@@ -20,6 +20,12 @@
#ifndef __WEECHAT_PLUGIN_API_H
#define __WEECHAT_PLUGIN_API_H 1
+struct t_plugin_api_hdata
+{
+ char *name; /* hdata name */
+ struct t_hdata *(*callback_get_hdata)(); /* callback to get hdata */
+};
+
/* strings */
extern void plugin_api_charset_set (struct t_weechat_plugin *plugin,
const char *charset);
diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c
index cb0a95588..5f3d466f4 100644
--- a/src/plugins/plugin.c
+++ b/src/plugins/plugin.c
@@ -39,6 +39,7 @@
#include "../core/weechat.h"
#include "../core/wee-config.h"
#include "../core/wee-hashtable.h"
+#include "../core/wee-hdata.h"
#include "../core/wee-hook.h"
#include "../core/wee-infolist.h"
#include "../core/wee-list.h"
@@ -604,6 +605,7 @@ plugin_load (const char *filename)
new_plugin->hook_info = &hook_info;
new_plugin->hook_info_hashtable = &hook_info_hashtable;
new_plugin->hook_infolist = &hook_infolist;
+ new_plugin->hook_hdata = &hook_hdata;
new_plugin->unhook = &unhook;
new_plugin->unhook_all = &unhook_all_plugin;
@@ -680,6 +682,24 @@ plugin_load (const char *filename)
new_plugin->infolist_buffer = &plugin_api_infolist_buffer;
new_plugin->infolist_time = &plugin_api_infolist_time;
new_plugin->infolist_free = &plugin_api_infolist_free;
+
+ new_plugin->hdata_new = &hdata_new;
+ new_plugin->hdata_new_var = &hdata_new_var;
+ new_plugin->hdata_new_list = &hdata_new_list;
+ new_plugin->hdata_get = &hook_hdata_get;
+ new_plugin->hdata_get_var_offset = &hdata_get_var_offset;
+ new_plugin->hdata_get_var_type = &hdata_get_var_type;
+ new_plugin->hdata_get_var_type_string = &hdata_get_var_type_string;
+ new_plugin->hdata_get_var = &hdata_get_var;
+ new_plugin->hdata_get_var_at_offset = &hdata_get_var_at_offset;
+ new_plugin->hdata_get_list = &hdata_get_list;
+ new_plugin->hdata_move = &hdata_move;
+ new_plugin->hdata_integer = &hdata_integer;
+ new_plugin->hdata_long = &hdata_long;
+ new_plugin->hdata_string = &hdata_string;
+ new_plugin->hdata_pointer = &hdata_pointer;
+ new_plugin->hdata_time = &hdata_time;
+ new_plugin->hdata_get_string = &hdata_get_string;
new_plugin->upgrade_new = &upgrade_file_new;
new_plugin->upgrade_write_object = &upgrade_file_write_object;
diff --git a/src/plugins/scripts/lua/weechat-lua-api.c b/src/plugins/scripts/lua/weechat-lua-api.c
index 50a505b39..9bb680dc6 100644
--- a/src/plugins/scripts/lua/weechat-lua-api.c
+++ b/src/plugins/scripts/lua/weechat-lua-api.c
@@ -40,21 +40,24 @@
#define LUA_RETURN_OK return 1
#define LUA_RETURN_ERROR return 0
-#define LUA_RETURN_EMPTY \
- lua_pushstring (lua_current_interpreter, ""); \
+#define LUA_RETURN_EMPTY \
+ lua_pushstring (lua_current_interpreter, ""); \
return 0
-#define LUA_RETURN_STRING(__string) \
- lua_pushstring (lua_current_interpreter, \
- (__string) ? __string : ""); \
+#define LUA_RETURN_STRING(__string) \
+ lua_pushstring (lua_current_interpreter, \
+ (__string) ? __string : ""); \
return 1;
-#define LUA_RETURN_STRING_FREE(__string) \
- lua_pushstring (lua_current_interpreter, \
- (__string) ? __string : ""); \
- if (__string) \
- free (__string); \
+#define LUA_RETURN_STRING_FREE(__string) \
+ lua_pushstring (lua_current_interpreter, \
+ (__string) ? __string : ""); \
+ if (__string) \
+ free (__string); \
return 1;
-#define LUA_RETURN_INT(__int) \
- lua_pushnumber (lua_current_interpreter, __int); \
+#define LUA_RETURN_INT(__int) \
+ lua_pushnumber (lua_current_interpreter, __int); \
+ return 1;
+#define LUA_RETURN_LONG(__long) \
+ lua_pushnumber (lua_current_interpreter, __long); \
return 1;
@@ -7187,7 +7190,390 @@ weechat_lua_api_infolist_free (lua_State *L)
}
/*
- * weechat_lua_api_config_new: create a new configuration file
+ * weechat_lua_api_hdata_get: get hdata
+ */
+
+static int
+weechat_lua_api_hdata_get (lua_State *L)
+{
+ const char *name;
+ char *result;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script || !lua_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(LUA_CURRENT_SCRIPT_NAME, "hdata_get");
+ LUA_RETURN_EMPTY;
+ }
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(LUA_CURRENT_SCRIPT_NAME, "hdata_get");
+ LUA_RETURN_EMPTY;
+ }
+
+ name = lua_tostring (lua_current_interpreter, -1);
+
+ result = script_ptr2str (weechat_hdata_get (name));
+
+ LUA_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_lua_api_hdata_get_var_type_string: get type of variable as string in
+ * hdata
+ */
+
+static int
+weechat_lua_api_hdata_get_var_type_string (lua_State *L)
+{
+ const char *hdata, *name, *result;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script || !lua_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(LUA_CURRENT_SCRIPT_NAME, "hdata_get_var_type_string");
+ LUA_RETURN_EMPTY;
+ }
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(LUA_CURRENT_SCRIPT_NAME, "hdata_get_var_type_string");
+ LUA_RETURN_EMPTY;
+ }
+
+ hdata = lua_tostring (lua_current_interpreter, -2);
+ name = lua_tostring (lua_current_interpreter, -1);
+
+ result = weechat_hdata_get_var_type_string (script_str2ptr (hdata), name);
+
+ LUA_RETURN_STRING(result);
+}
+
+/*
+ * weechat_lua_api_hdata_get_list: get list pointer in hdata
+ */
+
+static int
+weechat_lua_api_hdata_get_list (lua_State *L)
+{
+ const char *hdata, *name;
+ char *result;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script || !lua_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(LUA_CURRENT_SCRIPT_NAME, "hdata_get_list");
+ LUA_RETURN_EMPTY;
+ }
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(LUA_CURRENT_SCRIPT_NAME, "hdata_get_list");
+ LUA_RETURN_EMPTY;
+ }
+
+ hdata = lua_tostring (lua_current_interpreter, -2);
+ name = lua_tostring (lua_current_interpreter, -1);
+
+ result = script_ptr2str (weechat_hdata_get_list (script_str2ptr (hdata),
+ name));
+
+ LUA_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_lua_api_hdata_move: move pointer to another element in list
+ */
+
+static int
+weechat_lua_api_hdata_move (lua_State *L)
+{
+ const char *hdata, *pointer;
+ char *result;
+ int count, n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script || !lua_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(LUA_CURRENT_SCRIPT_NAME, "hdata_move");
+ LUA_RETURN_EMPTY;
+ }
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(LUA_CURRENT_SCRIPT_NAME, "hdata_move");
+ LUA_RETURN_EMPTY;
+ }
+
+ hdata = lua_tostring (lua_current_interpreter, -3);
+ pointer = lua_tostring (lua_current_interpreter, -2);
+ count = lua_tonumber (lua_current_interpreter, -1);
+
+ result = script_ptr2str (weechat_hdata_move (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ count));
+
+ LUA_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_lua_api_hdata_integer: get integer value of a variable in structure
+ * using hdata
+ */
+
+static int
+weechat_lua_api_hdata_integer (lua_State *L)
+{
+ const char *hdata, *pointer, *name;
+ int n, value;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script || !lua_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(LUA_CURRENT_SCRIPT_NAME, "hdata_integer");
+ LUA_RETURN_INT(0);
+ }
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(LUA_CURRENT_SCRIPT_NAME, "hdata_integer");
+ LUA_RETURN_INT(0);
+ }
+
+ hdata = lua_tostring (lua_current_interpreter, -3);
+ pointer = lua_tostring (lua_current_interpreter, -2);
+ name = lua_tostring (lua_current_interpreter, -1);
+
+ value = weechat_hdata_integer (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+
+ LUA_RETURN_INT(value);
+}
+
+/*
+ * weechat_lua_api_hdata_long: get long value of a variable in structure using
+ * hdata
+ */
+
+static int
+weechat_lua_api_hdata_long (lua_State *L)
+{
+ const char *hdata, *pointer, *name;
+ long value;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script || !lua_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(LUA_CURRENT_SCRIPT_NAME, "hdata_long");
+ LUA_RETURN_LONG(0);
+ }
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(LUA_CURRENT_SCRIPT_NAME, "hdata_long");
+ LUA_RETURN_LONG(0);
+ }
+
+ hdata = lua_tostring (lua_current_interpreter, -3);
+ pointer = lua_tostring (lua_current_interpreter, -2);
+ name = lua_tostring (lua_current_interpreter, -1);
+
+ value = weechat_hdata_long (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+
+ LUA_RETURN_LONG(value);
+}
+
+/*
+ * weechat_lua_api_hdata_string: get string value of a variable in structure
+ * using hdata
+ */
+
+static int
+weechat_lua_api_hdata_string (lua_State *L)
+{
+ const char *hdata, *pointer, *name, *result;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script || !lua_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(LUA_CURRENT_SCRIPT_NAME, "hdata_string");
+ LUA_RETURN_EMPTY;
+ }
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(LUA_CURRENT_SCRIPT_NAME, "hdata_string");
+ LUA_RETURN_EMPTY;
+ }
+
+ hdata = lua_tostring (lua_current_interpreter, -3);
+ pointer = lua_tostring (lua_current_interpreter, -2);
+ name = lua_tostring (lua_current_interpreter, -1);
+
+ result = weechat_hdata_string (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+
+ LUA_RETURN_STRING(result);
+}
+
+/*
+ * weechat_lua_api_hdata_pointer: get pointer value of a variable in structure
+ * using hdata
+ */
+
+static int
+weechat_lua_api_hdata_pointer (lua_State *L)
+{
+ const char *hdata, *pointer, *name;
+ char *result;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script || !lua_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(LUA_CURRENT_SCRIPT_NAME, "hdata_pointer");
+ LUA_RETURN_EMPTY;
+ }
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(LUA_CURRENT_SCRIPT_NAME, "hdata_pointer");
+ LUA_RETURN_EMPTY;
+ }
+
+ hdata = lua_tostring (lua_current_interpreter, -3);
+ pointer = lua_tostring (lua_current_interpreter, -2);
+ name = lua_tostring (lua_current_interpreter, -1);
+
+ result = script_ptr2str (weechat_hdata_pointer (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name));
+
+ LUA_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_lua_api_hdata_time: get time value of a variable in structure using
+ * hdata
+ */
+
+static int
+weechat_lua_api_hdata_time (lua_State *L)
+{
+ const char *hdata, *pointer, *name;
+ time_t time;
+ char timebuffer[64], *result;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script || !lua_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(LUA_CURRENT_SCRIPT_NAME, "hdata_time");
+ LUA_RETURN_EMPTY;
+ }
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(LUA_CURRENT_SCRIPT_NAME, "hdata_time");
+ LUA_RETURN_EMPTY;
+ }
+
+ hdata = lua_tostring (lua_current_interpreter, -3);
+ pointer = lua_tostring (lua_current_interpreter, -2);
+ name = lua_tostring (lua_current_interpreter, -1);
+
+ time = weechat_hdata_time (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+ strftime (timebuffer, sizeof (timebuffer), "%F %T", localtime (&time));
+ result = strdup (timebuffer);
+
+ LUA_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_lua_api_hdata_get_string: get hdata property as string
+ */
+
+static int
+weechat_lua_api_hdata_get_string (lua_State *L)
+{
+ const char *hdata, *property, *result;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script || !lua_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(LUA_CURRENT_SCRIPT_NAME, "hdata_get_string");
+ LUA_RETURN_EMPTY;
+ }
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(LUA_CURRENT_SCRIPT_NAME, "hdata_get_string");
+ LUA_RETURN_EMPTY;
+ }
+
+ hdata = lua_tostring (lua_current_interpreter, -2);
+ property = lua_tostring (lua_current_interpreter, -1);
+
+ result = weechat_hdata_get_string (script_str2ptr (hdata), property);
+
+ LUA_RETURN_STRING(result);
+}
+
+/*
+ * weechat_lua_api_upgrade_new: create an upgrade file
*/
static int
@@ -7931,6 +8317,16 @@ const struct luaL_reg weechat_lua_api_funcs[] = {
{ "infolist_pointer", &weechat_lua_api_infolist_pointer },
{ "infolist_time", &weechat_lua_api_infolist_time },
{ "infolist_free", &weechat_lua_api_infolist_free },
+ { "hdata_get", &weechat_lua_api_hdata_get },
+ { "hdata_get_var_type_string", &weechat_lua_api_hdata_get_var_type_string },
+ { "hdata_get_list", &weechat_lua_api_hdata_get_list },
+ { "hdata_move", &weechat_lua_api_hdata_move },
+ { "hdata_integer", &weechat_lua_api_hdata_integer },
+ { "hdata_long", &weechat_lua_api_hdata_long },
+ { "hdata_string", &weechat_lua_api_hdata_string },
+ { "hdata_pointer", &weechat_lua_api_hdata_pointer },
+ { "hdata_time", &weechat_lua_api_hdata_time },
+ { "hdata_get_string", &weechat_lua_api_hdata_get_string },
{ "upgrade_new", &weechat_lua_api_upgrade_new },
{ "upgrade_write_object", &weechat_lua_api_upgrade_write_object },
{ "upgrade_read", &weechat_lua_api_upgrade_read },
diff --git a/src/plugins/scripts/perl/weechat-perl-api.c b/src/plugins/scripts/perl/weechat-perl-api.c
index 3847d945a..30b82d5b7 100644
--- a/src/plugins/scripts/perl/weechat-perl-api.c
+++ b/src/plugins/scripts/perl/weechat-perl-api.c
@@ -39,29 +39,32 @@
#define PERL_RETURN_OK XSRETURN_YES
#define PERL_RETURN_ERROR XSRETURN_NO
#define PERL_RETURN_EMPTY XSRETURN_EMPTY
-#define PERL_RETURN_STRING(__string) \
- if (__string) \
- { \
- XST_mPV (0, __string); \
- XSRETURN (1); \
- } \
- XST_mPV (0, ""); \
+#define PERL_RETURN_STRING(__string) \
+ if (__string) \
+ { \
+ XST_mPV (0, __string); \
+ XSRETURN (1); \
+ } \
+ XST_mPV (0, ""); \
XSRETURN (1)
-#define PERL_RETURN_STRING_FREE(__string) \
- if (__string) \
- { \
- XST_mPV (0, __string); \
- free (__string); \
- XSRETURN (1); \
- } \
- XST_mPV (0, ""); \
+#define PERL_RETURN_STRING_FREE(__string) \
+ if (__string) \
+ { \
+ XST_mPV (0, __string); \
+ free (__string); \
+ XSRETURN (1); \
+ } \
+ XST_mPV (0, ""); \
XSRETURN (1)
-#define PERL_RETURN_INT(__int) \
- XST_mIV (0, __int); \
+#define PERL_RETURN_INT(__int) \
+ XST_mIV (0, __int); \
XSRETURN (1);
-#define PERL_RETURN_OBJ(__obj) \
- ST (0) = newRV_inc((SV *)__obj); \
- if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); \
+#define PERL_RETURN_LONG(__long) \
+ XST_mIV (0, __long); \
+ XSRETURN (1);
+#define PERL_RETURN_OBJ(__obj) \
+ ST (0) = newRV_inc((SV *)__obj); \
+ if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); \
XSRETURN (1);
@@ -6502,6 +6505,358 @@ XS (XS_weechat_api_infolist_free)
}
/*
+ * weechat::hdata_get: get hdata
+ */
+
+XS (XS_weechat_api_hdata_get)
+{
+ char *result, *name;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script || !perl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PERL_CURRENT_SCRIPT_NAME, "hdata_get");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PERL_CURRENT_SCRIPT_NAME, "hdata_get");
+ PERL_RETURN_EMPTY;
+ }
+
+ name = SvPV (ST (0), PL_na);
+
+ result = script_ptr2str (weechat_hdata_get (name));
+
+ PERL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat::hdata_get_var_type_string: get type of variable as string in hdata
+ */
+
+XS (XS_weechat_api_hdata_get_var_type_string)
+{
+ const char *result;
+ char *hdata, *name;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script || !perl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PERL_CURRENT_SCRIPT_NAME, "hdata_get_var_type_string");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PERL_CURRENT_SCRIPT_NAME, "hdata_get_var_type_string");
+ PERL_RETURN_EMPTY;
+ }
+
+ hdata = SvPV (ST (0), PL_na);
+ name = SvPV (ST (1), PL_na);
+
+ result = weechat_hdata_get_var_type_string (script_str2ptr (hdata), name);
+
+ PERL_RETURN_STRING(result);
+}
+
+/*
+ * weechat::hdata_get_list: get list pointer in hdata
+ */
+
+XS (XS_weechat_api_hdata_get_list)
+{
+ char *hdata, *name;
+ char *result;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script || !perl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PERL_CURRENT_SCRIPT_NAME, "hdata_get_list");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PERL_CURRENT_SCRIPT_NAME, "hdata_get_list");
+ PERL_RETURN_EMPTY;
+ }
+
+ hdata = SvPV (ST (0), PL_na);
+ name = SvPV (ST (1), PL_na);
+
+ result = script_ptr2str (weechat_hdata_get_list (script_str2ptr (hdata),
+ name));
+
+ PERL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat::hdata_move: move pointer to another element in list
+ */
+
+XS (XS_weechat_api_hdata_move)
+{
+ char *result, *hdata, *pointer;
+ int count;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script || !perl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PERL_CURRENT_SCRIPT_NAME, "hdata_move");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PERL_CURRENT_SCRIPT_NAME, "hdata_move");
+ PERL_RETURN_EMPTY;
+ }
+
+ hdata = SvPV (ST (0), PL_na);
+ pointer = SvPV (ST (1), PL_na);
+ count = SvIV(ST (2));
+
+ result = script_ptr2str (weechat_hdata_move (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ count));
+
+ PERL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat::hdata_integer: get integer value of a variable in structure using
+ * hdata
+ */
+
+XS (XS_weechat_api_hdata_integer)
+{
+ char *hdata, *pointer, *name;
+ int value;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script || !perl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PERL_CURRENT_SCRIPT_NAME, "hdata_integer");
+ PERL_RETURN_INT(0);
+ }
+
+ if (items < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PERL_CURRENT_SCRIPT_NAME, "hdata_integer");
+ PERL_RETURN_INT(0);
+ }
+
+ hdata = SvPV (ST (0), PL_na);
+ pointer = SvPV (ST (1), PL_na);
+ name = SvPV (ST (2), PL_na);
+
+ value = weechat_hdata_integer (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+
+ PERL_RETURN_INT(value);
+}
+
+/*
+ * weechat::hdata_long: get long value of a variable in structure using hdata
+ */
+
+XS (XS_weechat_api_hdata_long)
+{
+ char *hdata, *pointer, *name;
+ long value;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script || !perl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PERL_CURRENT_SCRIPT_NAME, "hdata_long");
+ PERL_RETURN_LONG(0);
+ }
+
+ if (items < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PERL_CURRENT_SCRIPT_NAME, "hdata_long");
+ PERL_RETURN_LONG(0);
+ }
+
+ hdata = SvPV (ST (0), PL_na);
+ pointer = SvPV (ST (1), PL_na);
+ name = SvPV (ST (2), PL_na);
+
+ value = weechat_hdata_long (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+
+ PERL_RETURN_LONG(value);
+}
+
+/*
+ * weechat::hdata_string: get string value of a variable in structure using
+ * hdata
+ */
+
+XS (XS_weechat_api_hdata_string)
+{
+ char *hdata, *pointer, *name;
+ const char *result;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script || !perl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PERL_CURRENT_SCRIPT_NAME, "hdata_string");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PERL_CURRENT_SCRIPT_NAME, "hdata_string");
+ PERL_RETURN_EMPTY;
+ }
+
+ hdata = SvPV (ST (0), PL_na);
+ pointer = SvPV (ST (1), PL_na);
+ name = SvPV (ST (2), PL_na);
+
+ result = weechat_hdata_string (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+
+ PERL_RETURN_STRING(result);
+}
+
+/*
+ * weechat::hdata_pointer: get pointer value of a variable in structure using
+ * hdata
+ */
+
+XS (XS_weechat_api_hdata_pointer)
+{
+ char *hdata, *pointer, *name;
+ char *result;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script || !perl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PERL_CURRENT_SCRIPT_NAME, "hdata_pointer");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PERL_CURRENT_SCRIPT_NAME, "hdata_pointer");
+ PERL_RETURN_EMPTY;
+ }
+
+ hdata = SvPV (ST (0), PL_na);
+ pointer = SvPV (ST (1), PL_na);
+ name = SvPV (ST (2), PL_na);
+
+ result = script_ptr2str (weechat_hdata_pointer (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name));
+
+ PERL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat::hdata_time: get time value of a variable in structure using hdata
+ */
+
+XS (XS_weechat_api_hdata_time)
+{
+ time_t time;
+ char timebuffer[64], *result, *hdata, *pointer, *name;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script || !perl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PERL_CURRENT_SCRIPT_NAME, "hdata_time");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PERL_CURRENT_SCRIPT_NAME, "hdata_time");
+ PERL_RETURN_EMPTY;
+ }
+
+ hdata = SvPV (ST (0), PL_na);
+ pointer = SvPV (ST (1), PL_na);
+ name = SvPV (ST (2), PL_na);
+
+ time = weechat_hdata_time (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+ strftime (timebuffer, sizeof (timebuffer), "%F %T", localtime (&time));
+ result = strdup (timebuffer);
+
+ PERL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat::hdata_get_string: get hdata property as string
+ */
+
+XS (XS_weechat_api_hdata_get_string)
+{
+ char *hdata, *property;
+ const char *result;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script || !perl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PERL_CURRENT_SCRIPT_NAME, "hdata_get_string");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PERL_CURRENT_SCRIPT_NAME, "hdata_get_string");
+ PERL_RETURN_EMPTY;
+ }
+
+ hdata = SvPV (ST (0), PL_na);
+ property = SvPV (ST (1), PL_na);
+
+ result = weechat_hdata_get_string (script_str2ptr (hdata), property);
+
+ PERL_RETURN_STRING(result);
+}
+
+/*
* weechat::upgrade_new: create an upgrade file
*/
@@ -6857,6 +7212,16 @@ weechat_perl_api_init (pTHX)
newXS ("weechat::infolist_pointer", XS_weechat_api_infolist_pointer, "weechat");
newXS ("weechat::infolist_time", XS_weechat_api_infolist_time, "weechat");
newXS ("weechat::infolist_free", XS_weechat_api_infolist_free, "weechat");
+ newXS ("weechat::hdata_get", XS_weechat_api_hdata_get, "weechat");
+ newXS ("weechat::hdata_get_var_type_string", XS_weechat_api_hdata_get_var_type_string, "weechat");
+ newXS ("weechat::hdata_get_list", XS_weechat_api_hdata_get_list, "weechat");
+ newXS ("weechat::hdata_move", XS_weechat_api_hdata_move, "weechat");
+ newXS ("weechat::hdata_integer", XS_weechat_api_hdata_integer, "weechat");
+ newXS ("weechat::hdata_long", XS_weechat_api_hdata_long, "weechat");
+ newXS ("weechat::hdata_string", XS_weechat_api_hdata_string, "weechat");
+ newXS ("weechat::hdata_pointer", XS_weechat_api_hdata_pointer, "weechat");
+ newXS ("weechat::hdata_time", XS_weechat_api_hdata_time, "weechat");
+ newXS ("weechat::hdata_get_string", XS_weechat_api_hdata_get_string, "weechat");
newXS ("weechat::upgrade_new", XS_weechat_api_upgrade_new, "weechat");
newXS ("weechat::upgrade_write_object", XS_weechat_api_upgrade_write_object, "weechat");
newXS ("weechat::upgrade_read", XS_weechat_api_upgrade_read, "weechat");
diff --git a/src/plugins/scripts/python/weechat-python-api.c b/src/plugins/scripts/python/weechat-python-api.c
index 12b74ed7e..8a9ccfcab 100644
--- a/src/plugins/scripts/python/weechat-python-api.c
+++ b/src/plugins/scripts/python/weechat-python-api.c
@@ -36,23 +36,25 @@
#define PYTHON_RETURN_OK return Py_BuildValue ("i", 1);
#define PYTHON_RETURN_ERROR return Py_BuildValue ("i", 0);
-#define PYTHON_RETURN_EMPTY \
- Py_INCREF(Py_None); \
+#define PYTHON_RETURN_EMPTY \
+ Py_INCREF(Py_None); \
return Py_None;
-#define PYTHON_RETURN_STRING(__string) \
- if (__string) \
- return Py_BuildValue ("s", __string); \
+#define PYTHON_RETURN_STRING(__string) \
+ if (__string) \
+ return Py_BuildValue ("s", __string); \
return Py_BuildValue ("s", "")
-#define PYTHON_RETURN_STRING_FREE(__string) \
- if (__string) \
- { \
- object = Py_BuildValue ("s", __string); \
- free (__string); \
- return object; \
- } \
+#define PYTHON_RETURN_STRING_FREE(__string) \
+ if (__string) \
+ { \
+ object = Py_BuildValue ("s", __string); \
+ free (__string); \
+ return object; \
+ } \
return Py_BuildValue ("s", "")
-#define PYTHON_RETURN_INT(__int) \
+#define PYTHON_RETURN_INT(__int) \
return Py_BuildValue("i", __int);
+#define PYTHON_RETURN_LONG(__long) \
+ return Py_BuildValue("l", __long);
/*
@@ -6842,6 +6844,364 @@ weechat_python_api_infolist_free (PyObject *self, PyObject *args)
}
/*
+ * weechat_python_api_hdata_get: get hdata
+ */
+
+static PyObject *
+weechat_python_api_hdata_get (PyObject *self, PyObject *args)
+{
+ char *name, *result;
+ PyObject *object;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script || !python_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PYTHON_CURRENT_SCRIPT_NAME, "hdata_get");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ name = NULL;
+
+ if (!PyArg_ParseTuple (args, "s", &name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PYTHON_CURRENT_SCRIPT_NAME, "hdata_get");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ result = script_ptr2str (weechat_hdata_get (name));
+
+ PYTHON_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_python_api_hdata_get_var_type_string: get type of variable as string
+ * in hdata
+ */
+
+static PyObject *
+weechat_python_api_hdata_get_var_type_string (PyObject *self, PyObject *args)
+{
+ char *hdata, *name;
+ const char *result;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script || !python_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PYTHON_CURRENT_SCRIPT_NAME, "hdata_get_var_type_string");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ hdata = NULL;
+ name = NULL;
+
+ if (!PyArg_ParseTuple (args, "ss", &hdata, &name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PYTHON_CURRENT_SCRIPT_NAME, "hdata_get_var_type_string");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ result = weechat_hdata_get_var_type_string (script_str2ptr (hdata), name);
+
+ PYTHON_RETURN_STRING(result);
+}
+
+/*
+ * weechat_python_api_hdata_get_list: get list pointer in hdata
+ */
+
+static PyObject *
+weechat_python_api_hdata_get_list (PyObject *self, PyObject *args)
+{
+ char *hdata, *name, *result;
+ PyObject *object;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script || !python_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PYTHON_CURRENT_SCRIPT_NAME, "hdata_get_list");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ hdata = NULL;
+ name = NULL;
+
+ if (!PyArg_ParseTuple (args, "ss", &hdata, &name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PYTHON_CURRENT_SCRIPT_NAME, "hdata_get_list");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ result = script_ptr2str (weechat_hdata_get_list (script_str2ptr (hdata),
+ name));
+
+ PYTHON_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_python_api_hdata_move: move pointer to another element in list
+ */
+
+static PyObject *
+weechat_python_api_hdata_move (PyObject *self, PyObject *args)
+{
+ char *result, *hdata, *pointer;
+ int count;
+ PyObject *object;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script || !python_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PYTHON_CURRENT_SCRIPT_NAME, "hdata_move");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ hdata = NULL;
+ pointer = NULL;
+ count = 0;
+
+ if (!PyArg_ParseTuple (args, "ssi", &hdata, &pointer, &count))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PYTHON_CURRENT_SCRIPT_NAME, "hdata_move");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ result = script_ptr2str (weechat_hdata_move (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ count));
+
+ PYTHON_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_python_api_hdata_integer: get integer value of a variable in
+ * structure using hdata
+ */
+
+static PyObject *
+weechat_python_api_hdata_integer (PyObject *self, PyObject *args)
+{
+ char *hdata, *pointer, *name;
+ int value;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script || !python_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PYTHON_CURRENT_SCRIPT_NAME, "hdata_integer");
+ PYTHON_RETURN_INT(0);
+ }
+
+ hdata = NULL;
+ pointer = NULL;
+ name = NULL;
+
+ if (!PyArg_ParseTuple (args, "sss", &hdata, &pointer, &name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PYTHON_CURRENT_SCRIPT_NAME, "hdata_integer");
+ PYTHON_RETURN_INT(0);
+ }
+
+ value = weechat_hdata_integer (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+
+ PYTHON_RETURN_INT(value);
+}
+
+/*
+ * weechat_python_api_hdata_long: get long value of a variable in structure
+ * using hdata
+ */
+
+static PyObject *
+weechat_python_api_hdata_long (PyObject *self, PyObject *args)
+{
+ char *hdata, *pointer, *name;
+ long value;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script || !python_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PYTHON_CURRENT_SCRIPT_NAME, "hdata_long");
+ PYTHON_RETURN_LONG(0);
+ }
+
+ hdata = NULL;
+ pointer = NULL;
+ name = NULL;
+
+ if (!PyArg_ParseTuple (args, "sss", &hdata, &pointer, &name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PYTHON_CURRENT_SCRIPT_NAME, "hdata_long");
+ PYTHON_RETURN_LONG(0);
+ }
+
+ value = weechat_hdata_long (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+
+ PYTHON_RETURN_LONG(value);
+}
+
+/*
+ * weechat_python_api_hdata_string: get string value of a variable in structure
+ * using hdata
+ */
+
+static PyObject *
+weechat_python_api_hdata_string (PyObject *self, PyObject *args)
+{
+ char *hdata, *pointer, *name;
+ const char *result;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script || !python_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PYTHON_CURRENT_SCRIPT_NAME, "hdata_string");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ hdata = NULL;
+ pointer = NULL;
+ name = NULL;
+
+ if (!PyArg_ParseTuple (args, "sss", &hdata, &pointer, &name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PYTHON_CURRENT_SCRIPT_NAME, "hdata_string");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ result = weechat_hdata_string (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+
+ PYTHON_RETURN_STRING(result);
+}
+
+/*
+ * weechat_python_api_hdata_pointer: get pointer value of a variable in
+ * structure using hdata
+ */
+
+static PyObject *
+weechat_python_api_hdata_pointer (PyObject *self, PyObject *args)
+{
+ char *hdata, *pointer, *name, *result;
+ PyObject *object;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script || !python_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PYTHON_CURRENT_SCRIPT_NAME, "hdata_pointer");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ hdata = NULL;
+ pointer = NULL;
+ name = NULL;
+
+ if (!PyArg_ParseTuple (args, "sss", &hdata, &pointer, &name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PYTHON_CURRENT_SCRIPT_NAME, "hdata_pointer");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ result = script_ptr2str (weechat_hdata_pointer (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name));
+
+ PYTHON_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_python_api_hdata_time: get time value of a variable in structure
+ * using hdata
+ */
+
+static PyObject *
+weechat_python_api_hdata_time (PyObject *self, PyObject *args)
+{
+ char *hdata, *pointer, *name, timebuffer[64], *result;
+ time_t time;
+ PyObject *object;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script || !python_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PYTHON_CURRENT_SCRIPT_NAME, "hdata_time");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ hdata = NULL;
+ pointer = NULL;
+ name = NULL;
+
+ if (!PyArg_ParseTuple (args, "sss", &hdata, &pointer, &name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PYTHON_CURRENT_SCRIPT_NAME, "hdata_time");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ time = weechat_hdata_time (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+ strftime (timebuffer, sizeof (timebuffer), "%F %T", localtime (&time));
+ result = strdup (timebuffer);
+
+ PYTHON_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_python_api_hdata_get_string: get hdata property as string
+ */
+
+static PyObject *
+weechat_python_api_hdata_get_string (PyObject *self, PyObject *args)
+{
+ char *hdata, *property;
+ const char *result;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script || !python_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(PYTHON_CURRENT_SCRIPT_NAME, "hdata_get_string");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ hdata = NULL;
+ property = NULL;
+
+ if (!PyArg_ParseTuple (args, "ss", &hdata, &property))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(PYTHON_CURRENT_SCRIPT_NAME, "hdata_get_string");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ result = weechat_hdata_get_string (script_str2ptr (hdata), property);
+
+ PYTHON_RETURN_STRING(result);
+}
+
+/*
* weechat_python_api_upgrade_new: create an upgrade file
*/
@@ -7194,6 +7554,16 @@ PyMethodDef weechat_python_funcs[] =
{ "infolist_pointer", &weechat_python_api_infolist_pointer, METH_VARARGS, "" },
{ "infolist_time", &weechat_python_api_infolist_time, METH_VARARGS, "" },
{ "infolist_free", &weechat_python_api_infolist_free, METH_VARARGS, "" },
+ { "hdata_get", &weechat_python_api_hdata_get, METH_VARARGS, "" },
+ { "hdata_get_var_type_string", &weechat_python_api_hdata_get_var_type_string, METH_VARARGS, "" },
+ { "hdata_get_list", &weechat_python_api_hdata_get_list, METH_VARARGS, "" },
+ { "hdata_move", &weechat_python_api_hdata_move, METH_VARARGS, "" },
+ { "hdata_integer", &weechat_python_api_hdata_integer, METH_VARARGS, "" },
+ { "hdata_long", &weechat_python_api_hdata_long, METH_VARARGS, "" },
+ { "hdata_string", &weechat_python_api_hdata_string, METH_VARARGS, "" },
+ { "hdata_pointer", &weechat_python_api_hdata_pointer, METH_VARARGS, "" },
+ { "hdata_time", &weechat_python_api_hdata_time, METH_VARARGS, "" },
+ { "hdata_get_string", &weechat_python_api_hdata_get_string, METH_VARARGS, "" },
{ "upgrade_new", &weechat_python_api_upgrade_new, METH_VARARGS, "" },
{ "upgrade_write_object", &weechat_python_api_upgrade_write_object, METH_VARARGS, "" },
{ "upgrade_read", &weechat_python_api_upgrade_read, METH_VARARGS, "" },
diff --git a/src/plugins/scripts/ruby/weechat-ruby-api.c b/src/plugins/scripts/ruby/weechat-ruby-api.c
index 17e0476d3..6674b222b 100644
--- a/src/plugins/scripts/ruby/weechat-ruby-api.c
+++ b/src/plugins/scripts/ruby/weechat-ruby-api.c
@@ -36,20 +36,22 @@
#define RUBY_RETURN_OK return INT2FIX (1);
#define RUBY_RETURN_ERROR return INT2FIX (0);
#define RUBY_RETURN_EMPTY return Qnil;
-#define RUBY_RETURN_STRING(__string) \
- if (__string) \
- return rb_str_new2 (__string); \
+#define RUBY_RETURN_STRING(__string) \
+ if (__string) \
+ return rb_str_new2 (__string); \
return rb_str_new2 ("")
-#define RUBY_RETURN_STRING_FREE(__string) \
- if (__string) \
- { \
- return_value = rb_str_new2 (__string); \
- free (__string); \
- return return_value; \
- } \
+#define RUBY_RETURN_STRING_FREE(__string) \
+ if (__string) \
+ { \
+ return_value = rb_str_new2 (__string); \
+ free (__string); \
+ return return_value; \
+ } \
return rb_str_new2 ("")
-#define RUBY_RETURN_INT(__int) \
+#define RUBY_RETURN_INT(__int) \
return INT2FIX(__int);
+#define RUBY_RETURN_LONG(__long) \
+ return LONG2FIX(__long);
/*
@@ -7455,6 +7457,407 @@ weechat_ruby_api_infolist_free (VALUE class, VALUE infolist)
}
/*
+ * weechat_ruby_api_hdata_get: get hdata
+ */
+
+static VALUE
+weechat_ruby_api_hdata_get (VALUE class, VALUE name)
+{
+ char *c_name, *result;
+ VALUE return_value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script || !ruby_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(RUBY_CURRENT_SCRIPT_NAME, "hdata_get");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(RUBY_CURRENT_SCRIPT_NAME, "hdata_get");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (name, T_STRING);
+
+ c_name = StringValuePtr (name);
+
+ result = script_ptr2str (weechat_hdata_get (c_name));
+
+ RUBY_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_ruby_api_hdata_get_var_type_string: get type of variable as string
+ * in hdata
+ */
+
+static VALUE
+weechat_ruby_api_hdata_get_var_type_string (VALUE class, VALUE hdata,
+ VALUE name)
+{
+ char *c_hdata, *c_name;
+ const char *result;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script || !ruby_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(RUBY_CURRENT_SCRIPT_NAME, "hdata_get_var_type_string");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (hdata) || NIL_P (name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(RUBY_CURRENT_SCRIPT_NAME, "hdata_get_var_type_string");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (hdata, T_STRING);
+ Check_Type (name, T_STRING);
+
+ c_hdata = StringValuePtr (hdata);
+ c_name = StringValuePtr (name);
+
+ result = weechat_hdata_get_var_type_string (script_str2ptr (c_hdata), c_name);
+
+ RUBY_RETURN_STRING(result);
+}
+
+/*
+ * weechat_ruby_api_hdata_get_list: get list pointer in hdata
+ */
+
+static VALUE
+weechat_ruby_api_hdata_get_list (VALUE class, VALUE hdata, VALUE name)
+{
+ char *c_hdata, *c_name, *result;
+ VALUE return_value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script || !ruby_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(RUBY_CURRENT_SCRIPT_NAME, "hdata_get_list");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (hdata) || NIL_P (name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(RUBY_CURRENT_SCRIPT_NAME, "hdata_get_list");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (hdata, T_STRING);
+ Check_Type (name, T_STRING);
+
+ c_hdata = StringValuePtr (hdata);
+ c_name = StringValuePtr (name);
+
+ result = script_ptr2str (weechat_hdata_get_list (script_str2ptr (c_hdata),
+ c_name));
+
+ RUBY_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_ruby_api_hdata_move: move pointer to another element in list
+ */
+
+static VALUE
+weechat_ruby_api_hdata_move (VALUE class, VALUE hdata, VALUE pointer,
+ VALUE count)
+{
+ char *c_hdata, *c_pointer, *result;
+ int c_count;
+ VALUE return_value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script || !ruby_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(RUBY_CURRENT_SCRIPT_NAME, "hdata_move");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (hdata) || NIL_P (pointer) || NIL_P (count))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(RUBY_CURRENT_SCRIPT_NAME, "hdata_move");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (hdata, T_STRING);
+ Check_Type (pointer, T_STRING);
+ Check_Type (count, T_FIXNUM);
+
+ c_hdata = StringValuePtr (hdata);
+ c_pointer = StringValuePtr (pointer);
+ c_count = FIX2INT (count);
+
+ result = weechat_hdata_move (script_str2ptr (c_hdata),
+ script_str2ptr (c_pointer),
+ c_count);
+
+ RUBY_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_ruby_api_hdata_integer: get integer value of a variable in structure
+ * using hdata
+ */
+
+static VALUE
+weechat_ruby_api_hdata_integer (VALUE class, VALUE hdata, VALUE pointer,
+ VALUE name)
+{
+ char *c_hdata, *c_pointer, *c_name;
+ int value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script || !ruby_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(RUBY_CURRENT_SCRIPT_NAME, "hdata_integer");
+ RUBY_RETURN_INT(0);
+ }
+
+ if (NIL_P (hdata) || NIL_P (pointer) || NIL_P (name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(RUBY_CURRENT_SCRIPT_NAME, "hdata_integer");
+ RUBY_RETURN_INT(0);
+ }
+
+ Check_Type (hdata, T_STRING);
+ Check_Type (pointer, T_STRING);
+ Check_Type (name, T_STRING);
+
+ c_hdata = StringValuePtr (hdata);
+ c_pointer = StringValuePtr (pointer);
+ c_name = StringValuePtr (name);
+
+ value = weechat_hdata_integer (script_str2ptr (c_hdata),
+ script_str2ptr (c_pointer),
+ c_name);
+
+ RUBY_RETURN_INT(value);
+}
+
+/*
+ * weechat_ruby_api_hdata_long: get long value of a variable in structure using
+ * hdata
+ */
+
+static VALUE
+weechat_ruby_api_hdata_long (VALUE class, VALUE hdata, VALUE pointer,
+ VALUE name)
+{
+ char *c_hdata, *c_pointer, *c_name;
+ long value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script || !ruby_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(RUBY_CURRENT_SCRIPT_NAME, "hdata_long");
+ RUBY_RETURN_LONG(0);
+ }
+
+ if (NIL_P (hdata) || NIL_P (pointer) || NIL_P (name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(RUBY_CURRENT_SCRIPT_NAME, "hdata_long");
+ RUBY_RETURN_LONG(0);
+ }
+
+ Check_Type (hdata, T_STRING);
+ Check_Type (pointer, T_STRING);
+ Check_Type (name, T_STRING);
+
+ c_hdata = StringValuePtr (hdata);
+ c_pointer = StringValuePtr (pointer);
+ c_name = StringValuePtr (name);
+
+ value = weechat_hdata_long (script_str2ptr (c_hdata),
+ script_str2ptr (c_pointer),
+ c_name);
+
+ RUBY_RETURN_LONG(value);
+}
+
+/*
+ * weechat_ruby_api_hdata_string: get string value of a variable in structure
+ * using hdata
+ */
+
+static VALUE
+weechat_ruby_api_hdata_string (VALUE class, VALUE hdata, VALUE pointer,
+ VALUE name)
+{
+ char *c_hdata, *c_pointer, *c_name;
+ const char *result;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script || !ruby_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(RUBY_CURRENT_SCRIPT_NAME, "hdata_string");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (hdata) || NIL_P (pointer) || NIL_P (name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(RUBY_CURRENT_SCRIPT_NAME, "hdata_string");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (hdata, T_STRING);
+ Check_Type (pointer, T_STRING);
+ Check_Type (name, T_STRING);
+
+ c_hdata = StringValuePtr (hdata);
+ c_pointer = StringValuePtr (pointer);
+ c_name = StringValuePtr (name);
+
+ result = weechat_hdata_string (script_str2ptr (c_hdata),
+ script_str2ptr (c_pointer),
+ c_name);
+
+ RUBY_RETURN_STRING(result);
+}
+
+/*
+ * weechat_ruby_api_hdata_pointer: get pointer value of a variable in structure
+ * using hdata
+ */
+
+static VALUE
+weechat_ruby_api_hdata_pointer (VALUE class, VALUE hdata, VALUE pointer,
+ VALUE name)
+{
+ char *c_hdata, *c_pointer, *c_name, *result;
+ VALUE return_value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script || !ruby_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(RUBY_CURRENT_SCRIPT_NAME, "hdata_pointer");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (hdata) || NIL_P (pointer) || NIL_P (name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(RUBY_CURRENT_SCRIPT_NAME, "hdata_pointer");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (hdata, T_STRING);
+ Check_Type (pointer, T_STRING);
+ Check_Type (name, T_STRING);
+
+ c_hdata = StringValuePtr (hdata);
+ c_pointer = StringValuePtr (pointer);
+ c_name = StringValuePtr (name);
+
+ result = script_ptr2str (weechat_hdata_pointer (script_str2ptr (c_hdata),
+ script_str2ptr (c_pointer),
+ c_name));
+
+ RUBY_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_ruby_api_hdata_time: get time value of a variable in structure using
+ * hdata
+ */
+
+static VALUE
+weechat_ruby_api_hdata_time (VALUE class, VALUE hdata, VALUE pointer,
+ VALUE name)
+{
+ char *c_hdata, *c_pointer, *c_name, timebuffer[64], *result;
+ time_t time;
+ VALUE return_value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script || !ruby_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(RUBY_CURRENT_SCRIPT_NAME, "hdata_time");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (hdata) || NIL_P (pointer) || NIL_P (name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(RUBY_CURRENT_SCRIPT_NAME, "hdata_time");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (hdata, T_STRING);
+ Check_Type (pointer, T_STRING);
+ Check_Type (name, T_STRING);
+
+ c_hdata = StringValuePtr (hdata);
+ c_pointer = StringValuePtr (pointer);
+ c_name = StringValuePtr (name);
+
+ time = weechat_hdata_time (script_str2ptr (c_hdata),
+ script_str2ptr (c_pointer),
+ c_name);
+ strftime (timebuffer, sizeof (timebuffer), "%F %T", localtime (&time));
+ result = strdup (timebuffer);
+
+ RUBY_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_ruby_api_hdata_get_string: get hdata property as string
+ */
+
+static VALUE
+weechat_ruby_api_hdata_get_string (VALUE class, VALUE hdata, VALUE property)
+{
+ char *c_hdata, *c_property;
+ const char *result;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script || !ruby_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(RUBY_CURRENT_SCRIPT_NAME, "hdata_get_string");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (hdata) || NIL_P (property))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(RUBY_CURRENT_SCRIPT_NAME, "hdata_get_string");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (hdata, T_STRING);
+ Check_Type (property, T_STRING);
+
+ c_hdata = StringValuePtr (hdata);
+ c_property = StringValuePtr (property);
+
+ result = weechat_hdata_get_var_type_string (script_str2ptr (c_hdata),
+ c_property);
+
+ RUBY_RETURN_STRING(result);
+}
+
+/*
* weechat_ruby_api_upgrade_new: create an upgrade file
*/
@@ -7869,6 +8272,16 @@ weechat_ruby_api_init (VALUE ruby_mWeechat)
rb_define_module_function (ruby_mWeechat, "infolist_pointer", &weechat_ruby_api_infolist_pointer, 2);
rb_define_module_function (ruby_mWeechat, "infolist_time", &weechat_ruby_api_infolist_time, 2);
rb_define_module_function (ruby_mWeechat, "infolist_free", &weechat_ruby_api_infolist_free, 1);
+ rb_define_module_function (ruby_mWeechat, "hdata_get", &weechat_ruby_api_hdata_get, 1);
+ rb_define_module_function (ruby_mWeechat, "hdata_get_var_type_string", &weechat_ruby_api_hdata_get_var_type_string, 2);
+ rb_define_module_function (ruby_mWeechat, "hdata_get_list", &weechat_ruby_api_hdata_get_list, 2);
+ rb_define_module_function (ruby_mWeechat, "hdata_move", &weechat_ruby_api_hdata_move, 3);
+ rb_define_module_function (ruby_mWeechat, "hdata_integer", &weechat_ruby_api_hdata_integer, 3);
+ rb_define_module_function (ruby_mWeechat, "hdata_long", &weechat_ruby_api_hdata_long, 3);
+ rb_define_module_function (ruby_mWeechat, "hdata_string", &weechat_ruby_api_hdata_string, 3);
+ rb_define_module_function (ruby_mWeechat, "hdata_pointer", &weechat_ruby_api_hdata_pointer, 3);
+ rb_define_module_function (ruby_mWeechat, "hdata_time", &weechat_ruby_api_hdata_time, 3);
+ rb_define_module_function (ruby_mWeechat, "hdata_get_string", &weechat_ruby_api_hdata_get_string, 2);
rb_define_module_function (ruby_mWeechat, "upgrade_new", &weechat_ruby_api_upgrade_new, 2);
rb_define_module_function (ruby_mWeechat, "upgrade_write_object", &weechat_ruby_api_upgrade_write_object, 3);
rb_define_module_function (ruby_mWeechat, "upgrade_read", &weechat_ruby_api_upgrade_read, 3);
diff --git a/src/plugins/scripts/tcl/weechat-tcl-api.c b/src/plugins/scripts/tcl/weechat-tcl-api.c
index bb5b5d250..e0e3705c8 100644
--- a/src/plugins/scripts/tcl/weechat-tcl-api.c
+++ b/src/plugins/scripts/tcl/weechat-tcl-api.c
@@ -36,130 +36,145 @@
#include "../script-callback.h"
#include "weechat-tcl.h"
-#define TCL_RETURN_OK \
- { \
- objp = Tcl_GetObjResult (interp); \
- if (Tcl_IsShared (objp)) \
- { \
- objp = Tcl_DuplicateObj (objp); \
- Tcl_IncrRefCount (objp); \
- Tcl_SetIntObj (objp, 1); \
- Tcl_SetObjResult (interp, objp); \
- Tcl_DecrRefCount (objp); \
- } \
- else \
- Tcl_SetIntObj (objp, 1); \
- return TCL_OK; \
- }
-#define TCL_RETURN_ERROR \
- { \
- objp = Tcl_GetObjResult (interp); \
- if (Tcl_IsShared (objp)) \
- { \
- objp = Tcl_DuplicateObj (objp); \
- Tcl_IncrRefCount (objp); \
- Tcl_SetIntObj (objp, 0); \
- Tcl_SetObjResult (interp, objp); \
- Tcl_DecrRefCount (objp); \
- } \
- else \
- Tcl_SetIntObj (objp, 0); \
- return TCL_ERROR; \
- }
-#define TCL_RETURN_EMPTY \
- { \
- objp = Tcl_GetObjResult (interp); \
- if (Tcl_IsShared (objp)) \
- { \
- objp = Tcl_DuplicateObj (objp); \
- Tcl_IncrRefCount (objp); \
- Tcl_SetStringObj (objp, "", -1); \
- Tcl_SetObjResult (interp, objp); \
- Tcl_DecrRefCount (objp); \
- } \
- else \
- Tcl_SetStringObj (objp, "", -1); \
- return TCL_OK; \
- }
-#define TCL_RETURN_STRING(__string) \
- { \
- objp = Tcl_GetObjResult (interp); \
- if (Tcl_IsShared (objp)) \
- { \
- objp = Tcl_DuplicateObj (objp); \
- Tcl_IncrRefCount (objp); \
- if (__string) \
- { \
- Tcl_SetStringObj (objp, __string, -1); \
- Tcl_SetObjResult (interp, objp); \
- Tcl_DecrRefCount (objp); \
- return TCL_OK; \
- } \
- Tcl_SetStringObj (objp, "", -1); \
- Tcl_SetObjResult (interp, objp); \
- Tcl_DecrRefCount (objp); \
- } \
- else \
- { \
- if (__string) \
- { \
- Tcl_SetStringObj (objp, __string, -1); \
- return TCL_OK; \
- } \
- Tcl_SetStringObj (objp, "", -1); \
- } \
- return TCL_OK; \
- }
-#define TCL_RETURN_STRING_FREE(__string) \
- { \
- objp = Tcl_GetObjResult (interp); \
- if (Tcl_IsShared (objp)) \
- { \
- objp = Tcl_DuplicateObj (objp); \
- Tcl_IncrRefCount (objp); \
- if (__string) \
- { \
- Tcl_SetStringObj (objp, __string, -1); \
- Tcl_SetObjResult (interp, objp); \
- Tcl_DecrRefCount (objp); \
- free (__string); \
- return TCL_OK; \
- } \
- Tcl_SetStringObj (objp, "", -1); \
- Tcl_SetObjResult (interp, objp); \
- Tcl_DecrRefCount (objp); \
- } \
- else \
- { \
- if (__string) \
- { \
- Tcl_SetStringObj (objp, __string, -1); \
- free (__string); \
- return TCL_OK; \
- } \
- Tcl_SetStringObj (objp, "", -1); \
- } \
- return TCL_OK; \
- }
-#define TCL_RETURN_INT(__int) \
- { \
- objp = Tcl_GetObjResult (interp); \
- if (Tcl_IsShared (objp)) \
- { \
- objp = Tcl_DuplicateObj (objp); \
- Tcl_IncrRefCount (objp); \
- Tcl_SetIntObj (objp, __int); \
- Tcl_SetObjResult (interp, objp); \
- Tcl_DecrRefCount (objp); \
- } \
- else \
- Tcl_SetIntObj (objp, __int); \
- return TCL_OK; \
- }
-#define TCL_RETURN_OBJ(__obj) \
- { \
- Tcl_SetObjResult (interp, __obj); \
- return TCL_OK; \
+#define TCL_RETURN_OK \
+ { \
+ objp = Tcl_GetObjResult (interp); \
+ if (Tcl_IsShared (objp)) \
+ { \
+ objp = Tcl_DuplicateObj (objp); \
+ Tcl_IncrRefCount (objp); \
+ Tcl_SetIntObj (objp, 1); \
+ Tcl_SetObjResult (interp, objp); \
+ Tcl_DecrRefCount (objp); \
+ } \
+ else \
+ Tcl_SetIntObj (objp, 1); \
+ return TCL_OK; \
+ }
+#define TCL_RETURN_ERROR \
+ { \
+ objp = Tcl_GetObjResult (interp); \
+ if (Tcl_IsShared (objp)) \
+ { \
+ objp = Tcl_DuplicateObj (objp); \
+ Tcl_IncrRefCount (objp); \
+ Tcl_SetIntObj (objp, 0); \
+ Tcl_SetObjResult (interp, objp); \
+ Tcl_DecrRefCount (objp); \
+ } \
+ else \
+ Tcl_SetIntObj (objp, 0); \
+ return TCL_ERROR; \
+ }
+#define TCL_RETURN_EMPTY \
+ { \
+ objp = Tcl_GetObjResult (interp); \
+ if (Tcl_IsShared (objp)) \
+ { \
+ objp = Tcl_DuplicateObj (objp); \
+ Tcl_IncrRefCount (objp); \
+ Tcl_SetStringObj (objp, "", -1); \
+ Tcl_SetObjResult (interp, objp); \
+ Tcl_DecrRefCount (objp); \
+ } \
+ else \
+ Tcl_SetStringObj (objp, "", -1); \
+ return TCL_OK; \
+ }
+#define TCL_RETURN_STRING(__string) \
+ { \
+ objp = Tcl_GetObjResult (interp); \
+ if (Tcl_IsShared (objp)) \
+ { \
+ objp = Tcl_DuplicateObj (objp); \
+ Tcl_IncrRefCount (objp); \
+ if (__string) \
+ { \
+ Tcl_SetStringObj (objp, __string, -1); \
+ Tcl_SetObjResult (interp, objp); \
+ Tcl_DecrRefCount (objp); \
+ return TCL_OK; \
+ } \
+ Tcl_SetStringObj (objp, "", -1); \
+ Tcl_SetObjResult (interp, objp); \
+ Tcl_DecrRefCount (objp); \
+ } \
+ else \
+ { \
+ if (__string) \
+ { \
+ Tcl_SetStringObj (objp, __string, -1); \
+ return TCL_OK; \
+ } \
+ Tcl_SetStringObj (objp, "", -1); \
+ } \
+ return TCL_OK; \
+ }
+#define TCL_RETURN_STRING_FREE(__string) \
+ { \
+ objp = Tcl_GetObjResult (interp); \
+ if (Tcl_IsShared (objp)) \
+ { \
+ objp = Tcl_DuplicateObj (objp); \
+ Tcl_IncrRefCount (objp); \
+ if (__string) \
+ { \
+ Tcl_SetStringObj (objp, __string, -1); \
+ Tcl_SetObjResult (interp, objp); \
+ Tcl_DecrRefCount (objp); \
+ free (__string); \
+ return TCL_OK; \
+ } \
+ Tcl_SetStringObj (objp, "", -1); \
+ Tcl_SetObjResult (interp, objp); \
+ Tcl_DecrRefCount (objp); \
+ } \
+ else \
+ { \
+ if (__string) \
+ { \
+ Tcl_SetStringObj (objp, __string, -1); \
+ free (__string); \
+ return TCL_OK; \
+ } \
+ Tcl_SetStringObj (objp, "", -1); \
+ } \
+ return TCL_OK; \
+ }
+#define TCL_RETURN_INT(__int) \
+ { \
+ objp = Tcl_GetObjResult (interp); \
+ if (Tcl_IsShared (objp)) \
+ { \
+ objp = Tcl_DuplicateObj (objp); \
+ Tcl_IncrRefCount (objp); \
+ Tcl_SetIntObj (objp, __int); \
+ Tcl_SetObjResult (interp, objp); \
+ Tcl_DecrRefCount (objp); \
+ } \
+ else \
+ Tcl_SetIntObj (objp, __int); \
+ return TCL_OK; \
+ }
+#define TCL_RETURN_LONG(__long) \
+ { \
+ objp = Tcl_GetObjResult (interp); \
+ if (Tcl_IsShared (objp)) \
+ { \
+ objp = Tcl_DuplicateObj (objp); \
+ Tcl_IncrRefCount (objp); \
+ Tcl_SetLongObj (objp, __long); \
+ Tcl_SetObjResult (interp, objp); \
+ Tcl_DecrRefCount (objp); \
+ } \
+ else \
+ Tcl_SetLongObj (objp, __long); \
+ return TCL_OK; \
+ }
+#define TCL_RETURN_OBJ(__obj) \
+ { \
+ Tcl_SetObjResult (interp, __obj); \
+ return TCL_OK; \
}
@@ -7235,6 +7250,393 @@ weechat_tcl_api_infolist_free (ClientData clientData, Tcl_Interp *interp,
}
/*
+ * weechat_tcl_api_hdata_get: get hdata
+ */
+
+static int
+weechat_tcl_api_hdata_get (ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *CONST objv[])
+{
+ Tcl_Obj *objp;
+ char *result, *name;
+ int i;
+
+ /* make C compiler happy */
+ (void) clientData;
+
+ if (!tcl_current_script || !tcl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(TCL_CURRENT_SCRIPT_NAME, "hdata_get");
+ TCL_RETURN_EMPTY;
+ }
+
+ if (objc < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(TCL_CURRENT_SCRIPT_NAME, "hdata_get");
+ TCL_RETURN_EMPTY;
+ }
+
+ name = Tcl_GetStringFromObj (objv[1], &i);
+
+ result = script_ptr2str (weechat_hdata_get (name));
+
+ TCL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_tcl_api_hdata_get_var_type_string: get type of variable as string in
+ * hdata
+ */
+
+static int
+weechat_tcl_api_hdata_get_var_type_string (ClientData clientData,
+ Tcl_Interp *interp,
+ int objc, Tcl_Obj *CONST objv[])
+{
+ Tcl_Obj *objp;
+ char *hdata, *name;
+ const char *result;
+ int i;
+
+ /* make C compiler happy */
+ (void) clientData;
+
+ if (!tcl_current_script || !tcl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(TCL_CURRENT_SCRIPT_NAME, "hdata_get_var_type_string");
+ TCL_RETURN_EMPTY;
+ }
+
+ if (objc < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(TCL_CURRENT_SCRIPT_NAME, "hdata_get_var_type_string");
+ TCL_RETURN_EMPTY;
+ }
+
+ hdata = Tcl_GetStringFromObj (objv[1], &i);
+ name = Tcl_GetStringFromObj (objv[2], &i);
+
+ result = weechat_hdata_get_var_type_string (script_str2ptr (hdata), name);
+
+ TCL_RETURN_STRING(result);
+}
+
+/*
+ * weechat_tcl_api_hdata_get_list: get list pointer in hdata
+ */
+
+static int
+weechat_tcl_api_hdata_get_list (ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *CONST objv[])
+{
+ Tcl_Obj *objp;
+ char *hdata, *name, *result;
+ int i;
+
+ /* make C compiler happy */
+ (void) clientData;
+
+ if (!tcl_current_script || !tcl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(TCL_CURRENT_SCRIPT_NAME, "hdata_get_list");
+ TCL_RETURN_EMPTY;
+ }
+
+ if (objc < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(TCL_CURRENT_SCRIPT_NAME, "hdata_get_list");
+ TCL_RETURN_EMPTY;
+ }
+
+ hdata = Tcl_GetStringFromObj (objv[1], &i);
+ name = Tcl_GetStringFromObj (objv[2], &i);
+
+ result = script_ptr2str (weechat_hdata_get_list (script_str2ptr (hdata),
+ name));
+
+ TCL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_tcl_api_hdata_move: move pointer to another element in list
+ */
+
+static int
+weechat_tcl_api_hdata_move (ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *CONST objv[])
+{
+ Tcl_Obj *objp;
+ char *hdata, *pointer, *result;
+ int i, count;
+
+ /* make C compiler happy */
+ (void) clientData;
+
+ if (!tcl_current_script || !tcl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(TCL_CURRENT_SCRIPT_NAME, "hdata_move");
+ TCL_RETURN_EMPTY;
+ }
+
+ if (objc < 4)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(TCL_CURRENT_SCRIPT_NAME, "hdata_move");
+ TCL_RETURN_EMPTY;
+ }
+
+ hdata = Tcl_GetStringFromObj (objv[1], &i);
+ pointer = Tcl_GetStringFromObj (objv[2], &i);
+
+ if (Tcl_GetIntFromObj (interp, objv[3], &count) != TCL_OK)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(TCL_CURRENT_SCRIPT_NAME, "hdata_move");
+ TCL_RETURN_EMPTY;
+ }
+
+ result = script_ptr2str (weechat_hdata_move (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ count));
+
+ TCL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_tcl_api_hdata_integer: get integer value of a variable in structure
+ * using hdata
+ */
+
+static int
+weechat_tcl_api_hdata_integer (ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *CONST objv[])
+{
+ Tcl_Obj *objp;
+ char *hdata, *pointer, *name;
+ int result, i;
+
+ /* make C compiler happy */
+ (void) clientData;
+
+ if (!tcl_current_script || !tcl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(TCL_CURRENT_SCRIPT_NAME, "hdata_integer");
+ TCL_RETURN_INT(0);
+ }
+
+ if (objc < 4)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(TCL_CURRENT_SCRIPT_NAME, "hdata_integer");
+ TCL_RETURN_INT(0);
+ }
+
+ hdata = Tcl_GetStringFromObj (objv[1], &i);
+ pointer = Tcl_GetStringFromObj (objv[2], &i);
+ name = Tcl_GetStringFromObj (objv[3], &i);
+
+ result = weechat_hdata_integer (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+
+ TCL_RETURN_INT(result);
+}
+
+/*
+ * weechat_tcl_api_hdata_long: get long value of a variable in structure using
+ * hdata
+ */
+
+static int
+weechat_tcl_api_hdata_long (ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *CONST objv[])
+{
+ Tcl_Obj *objp;
+ char *hdata, *pointer, *name;
+ int result, i;
+
+ /* make C compiler happy */
+ (void) clientData;
+
+ if (!tcl_current_script || !tcl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(TCL_CURRENT_SCRIPT_NAME, "hdata_long");
+ TCL_RETURN_LONG(0);
+ }
+
+ if (objc < 4)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(TCL_CURRENT_SCRIPT_NAME, "hdata_long");
+ TCL_RETURN_LONG(0);
+ }
+
+ hdata = Tcl_GetStringFromObj (objv[1], &i);
+ pointer = Tcl_GetStringFromObj (objv[2], &i);
+ name = Tcl_GetStringFromObj (objv[3], &i);
+
+ result = weechat_hdata_long (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+
+ TCL_RETURN_LONG(result);
+}
+
+/*
+ * weechat_tcl_api_hdata_string: get string value of a variable in structure
+ * using hdata
+ */
+
+static int
+weechat_tcl_api_hdata_string (ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *CONST objv[])
+{
+ Tcl_Obj *objp;
+ char *hdata, *pointer, *name;
+ const char *result;
+ int i;
+
+ /* make C compiler happy */
+ (void) clientData;
+
+ if (!tcl_current_script || !tcl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(TCL_CURRENT_SCRIPT_NAME, "hdata_string");
+ TCL_RETURN_EMPTY;
+ }
+
+ if (objc < 4)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(TCL_CURRENT_SCRIPT_NAME, "hdata_string");
+ TCL_RETURN_EMPTY;
+ }
+
+ hdata = Tcl_GetStringFromObj (objv[1], &i);
+ pointer = Tcl_GetStringFromObj (objv[2], &i);
+ name = Tcl_GetStringFromObj (objv[3], &i);
+
+ result = weechat_hdata_string (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+
+ TCL_RETURN_STRING(result);
+}
+
+/*
+ * weechat_tcl_api_hdata_pointer: get pointer value of a variable in structure
+ * using hdata
+ */
+
+static int
+weechat_tcl_api_hdata_pointer (ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *CONST objv[])
+{
+ Tcl_Obj *objp;
+ char *hdata, *pointer, *name, *result;
+ int i;
+
+ /* make C compiler happy */
+ (void) clientData;
+
+ if (!tcl_current_script || !tcl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(TCL_CURRENT_SCRIPT_NAME, "hdata_pointer");
+ TCL_RETURN_EMPTY;
+ }
+
+ if (objc < 4)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(TCL_CURRENT_SCRIPT_NAME, "hdata_pointer");
+ TCL_RETURN_EMPTY;
+ }
+
+ hdata = Tcl_GetStringFromObj (objv[1], &i);
+ pointer = Tcl_GetStringFromObj (objv[2], &i);
+ name = Tcl_GetStringFromObj (objv[3], &i);
+
+ result = script_ptr2str (weechat_hdata_pointer (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name));
+
+ TCL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_tcl_api_hdata_time: get time value of a variable in structure using
+ * hdata
+ */
+
+static int
+weechat_tcl_api_hdata_time (ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *CONST objv[])
+{
+ Tcl_Obj *objp;
+ time_t time;
+ char timebuffer[64], *result, *hdata, *pointer, *name;
+ int i;
+
+ /* make C compiler happy */
+ (void) clientData;
+
+ if (!tcl_current_script || !tcl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(TCL_CURRENT_SCRIPT_NAME, "hdata_time");
+ TCL_RETURN_EMPTY;
+ }
+
+ if (objc < 4)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(TCL_CURRENT_SCRIPT_NAME, "hdata_time");
+ TCL_RETURN_EMPTY;
+ }
+
+ hdata = Tcl_GetStringFromObj (objv[1], &i);
+ pointer = Tcl_GetStringFromObj (objv[2], &i);
+ name = Tcl_GetStringFromObj (objv[3], &i);
+
+ time = weechat_hdata_time (script_str2ptr (hdata),
+ script_str2ptr (pointer),
+ name);
+ strftime (timebuffer, sizeof (timebuffer), "%F %T", localtime (&time));
+
+ result = strdup (timebuffer);
+
+ TCL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_tcl_api_hdata_get_string: get hdata property as string
+ */
+
+static int
+weechat_tcl_api_hdata_get_string (ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *CONST objv[])
+{
+ Tcl_Obj *objp;
+ char *hdata, *property;
+ const char *result;
+ int i;
+
+ /* make C compiler happy */
+ (void) clientData;
+
+ if (!tcl_current_script || !tcl_current_script->name)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INIT(TCL_CURRENT_SCRIPT_NAME, "hdata_get_string");
+ TCL_RETURN_EMPTY;
+ }
+
+ if (objc < 3)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGS(TCL_CURRENT_SCRIPT_NAME, "hdata_get_string");
+ TCL_RETURN_EMPTY;
+ }
+
+ hdata = Tcl_GetStringFromObj (objv[1], &i);
+ property = Tcl_GetStringFromObj (objv[2], &i);
+
+ result = weechat_hdata_get_string (script_str2ptr (hdata), property);
+
+ TCL_RETURN_STRING(result);
+}
+
+/*
* weechat_tcl_api_upgrade_new: create an upgrade file
*/
@@ -7862,6 +8264,26 @@ void weechat_tcl_api_init (Tcl_Interp *interp)
weechat_tcl_api_infolist_time, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
Tcl_CreateObjCommand (interp, "weechat::infolist_free",
weechat_tcl_api_infolist_free, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
+ Tcl_CreateObjCommand (interp, "weechat::hdata_get",
+ weechat_tcl_api_hdata_get, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
+ Tcl_CreateObjCommand (interp, "weechat::hdata_get_var_type_string",
+ weechat_tcl_api_hdata_get_var_type_string, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
+ Tcl_CreateObjCommand (interp, "weechat::hdata_get_list",
+ weechat_tcl_api_hdata_get_list, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
+ Tcl_CreateObjCommand (interp, "weechat::hdata_move",
+ weechat_tcl_api_hdata_move, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
+ Tcl_CreateObjCommand (interp, "weechat::hdata_integer",
+ weechat_tcl_api_hdata_integer, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
+ Tcl_CreateObjCommand (interp, "weechat::hdata_long",
+ weechat_tcl_api_hdata_long, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
+ Tcl_CreateObjCommand (interp, "weechat::hdata_string",
+ weechat_tcl_api_hdata_string, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
+ Tcl_CreateObjCommand (interp, "weechat::hdata_pointer",
+ weechat_tcl_api_hdata_pointer, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
+ Tcl_CreateObjCommand (interp, "weechat::hdata_time",
+ weechat_tcl_api_hdata_time, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
+ Tcl_CreateObjCommand (interp, "weechat::hdata_get_string",
+ weechat_tcl_api_hdata_get_string, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
Tcl_CreateObjCommand (interp, "weechat::upgrade_new",
weechat_tcl_api_upgrade_new, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
Tcl_CreateObjCommand (interp, "weechat::upgrade_write_object",
diff --git a/src/plugins/weechat-plugin.h b/src/plugins/weechat-plugin.h
index 852e8d0fd..b2b6fe0e5 100644
--- a/src/plugins/weechat-plugin.h
+++ b/src/plugins/weechat-plugin.h
@@ -37,6 +37,7 @@ struct t_infolist;
struct t_infolist_item;
struct t_weelist;
struct t_hashtable;
+struct t_hdata;
struct timeval;
/*
@@ -45,7 +46,7 @@ struct timeval;
*/
/* API version (used to check that plugin has same API and can be loaded) */
-#define WEECHAT_PLUGIN_API_VERSION "20110428-01"
+#define WEECHAT_PLUGIN_API_VERSION "20110613-01"
/* macros for defining plugin infos */
#define WEECHAT_PLUGIN_NAME(__name) \
@@ -102,6 +103,14 @@ struct timeval;
#define WEECHAT_HASHTABLE_BUFFER "buffer"
#define WEECHAT_HASHTABLE_TIME "time"
+/* types for hdata */
+#define WEECHAT_HDATA_OTHER 0
+#define WEECHAT_HDATA_INTEGER 1
+#define WEECHAT_HDATA_LONG 2
+#define WEECHAT_HDATA_STRING 3
+#define WEECHAT_HDATA_POINTER 4
+#define WEECHAT_HDATA_TIME 5
+
/* buffer hotlist */
#define WEECHAT_HOTLIST_LOW "0"
#define WEECHAT_HOTLIST_MESSAGE "1"
@@ -569,6 +578,12 @@ struct t_weechat_plugin
void *pointer,
const char *arguments),
void *callback_data);
+ struct t_hook *(*hook_hdata) (struct t_weechat_plugin *plugin,
+ const char *hdata_name,
+ const char *description,
+ struct t_hdata *(*callback)(void *data,
+ const char *hdata_name),
+ void *callback_data);
void (*unhook) (struct t_hook *hook);
void (*unhook_all) (struct t_weechat_plugin *plugin);
@@ -745,7 +760,39 @@ struct t_weechat_plugin
int *size);
time_t (*infolist_time) (struct t_infolist *infolist, const char *var);
void (*infolist_free) (struct t_infolist *infolist);
-
+
+ /* hdata */
+ struct t_hdata *(*hdata_new) (const char *hdata_name, const char *var_prev,
+ const char *var_next);
+ void (*hdata_new_var) (struct t_hdata *hdata, const char *name, int offset,
+ int type);
+ void (*hdata_new_list) (struct t_hdata *hdata, const char *name,
+ void *pointer);
+ struct t_hdata *(*hdata_get) (struct t_weechat_plugin *plugin,
+ const char *hdata_name);
+ int (*hdata_get_var_offset) (struct t_hdata *hdata, const char *name);
+ int (*hdata_get_var_type) (struct t_hdata *hdata, const char *name);
+ const char *(*hdata_get_var_type_string) (struct t_hdata *hdata,
+ const char *name);
+ void *(*hdata_get_var) (struct t_hdata *hdata, void *pointer,
+ const char *name);
+ void *(*hdata_get_var_at_offset) (struct t_hdata *hdata, void *pointer,
+ int offset);
+ void *(*hdata_get_list) (struct t_hdata *hdata, const char *name);
+ void *(*hdata_move) (struct t_hdata *hdata, void *pointer, int count);
+ int (*hdata_integer) (struct t_hdata *hdata, void *pointer,
+ const char *name);
+ long (*hdata_long) (struct t_hdata *hdata, void *pointer,
+ const char *name);
+ const char *(*hdata_string) (struct t_hdata *hdata, void *pointer,
+ const char *name);
+ void *(*hdata_pointer) (struct t_hdata *hdata, void *pointer,
+ const char *name);
+ time_t (*hdata_time) (struct t_hdata *hdata, void *pointer,
+ const char *name);
+ const char *(*hdata_get_string) (struct t_hdata *hdata,
+ const char *property);
+
/* upgrade */
struct t_upgrade_file *(*upgrade_new) (const char *filename,
int write);
@@ -1227,6 +1274,10 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin);
__description, __pointer_description, \
__args_description, __callback, \
__data)
+#define weechat_hook_hdata(__hdata_name, __description, __callback, \
+ __data) \
+ weechat_plugin->hook_hdata(weechat_plugin, __hdata_name, \
+ __description, __callback, __data)
#define weechat_unhook(__hook) \
weechat_plugin->unhook( __hook)
#define weechat_unhook_all() \
@@ -1424,6 +1475,48 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin);
#define weechat_infolist_free(__list) \
weechat_plugin->infolist_free(__list)
+/* hdata */
+#define weechat_hdata_new(__hdata_name, __var_prev, __var_next) \
+ weechat_plugin->hdata_new(__hdata_name, __var_prev, __var_next)
+#define weechat_hdata_new_var(__hdata, __name, __offset, __type) \
+ weechat_plugin->hdata_new_var(__hdata, __name, __offset, __type)
+#define WEECHAT_HDATA_VAR(__struct, __name, __type) \
+ weechat_hdata_new_var (hdata, #__name, offsetof (__struct, __name), \
+ WEECHAT_HDATA_##__type);
+#define weechat_hdata_new_list(__hdata, __name, __pointer) \
+ weechat_plugin->hdata_new_list(__hdata, __name, __pointer)
+#define WEECHAT_HDATA_LIST(__name) \
+ weechat_hdata_new_list (hdata, #__name, &(__name));
+#define weechat_hdata_get(__hdata_name) \
+ weechat_plugin->hdata_get(weechat_plugin, __hdata_name)
+#define weechat_hdata_get_var_offset(__hdata, __name) \
+ weechat_plugin->hdata_get_var_offset(__hdata, __name)
+#define weechat_hdata_get_var_type(__hdata, __name) \
+ weechat_plugin->hdata_get_var_type(__hdata, __name)
+#define weechat_hdata_get_var_type_string(__hdata, __name) \
+ weechat_plugin->hdata_get_var_type_string(__hdata, __name)
+#define weechat_hdata_get_var(__hdata, __pointer, __name) \
+ weechat_plugin->hdata_get_var(__hdata, __pointer, __name)
+#define weechat_hdata_get_var_at_offset(__hdata, __pointer, __offset) \
+ weechat_plugin->hdata_get_var_at_offset(__hdata, __pointer, \
+ __offset)
+#define weechat_hdata_get_list(__hdata, __name) \
+ weechat_plugin->hdata_get_list(__hdata, __name)
+#define weechat_hdata_move(__hdata, __pointer, __count) \
+ weechat_plugin->hdata_move(__hdata, __pointer, __count)
+#define weechat_hdata_integer(__hdata, __pointer, __name) \
+ weechat_plugin->hdata_integer(__hdata, __pointer, __name)
+#define weechat_hdata_long(__hdata, __pointer, __name) \
+ weechat_plugin->hdata_long(__hdata, __pointer, __name)
+#define weechat_hdata_string(__hdata, __pointer, __name) \
+ weechat_plugin->hdata_string(__hdata, __pointer, __name)
+#define weechat_hdata_pointer(__hdata, __pointer, __name) \
+ weechat_plugin->hdata_pointer(__hdata, __pointer, __name)
+#define weechat_hdata_time(__hdata, __pointer, __name) \
+ weechat_plugin->hdata_time(__hdata, __pointer, __name)
+#define weechat_hdata_get_string(__hdata, __property) \
+ weechat_plugin->hdata_get_string(__hdata, __property)
+
/* upgrade */
#define weechat_upgrade_new(__filename, __write) \
weechat_plugin->upgrade_new(__filename, __write)