From 855bd4775d5388bc5198dc155399f6c90809da3b Mon Sep 17 00:00:00 2001 From: Benoit Caccinolo Date: Tue, 12 Aug 2014 10:25:14 +0200 Subject: [PATCH] update --- .weechat/alias.conf | 2 +- .weechat/charset.conf | 2 +- .weechat/irc.conf | 15 +- .weechat/logger.conf | 2 +- .weechat/plugins.conf | 2 +- .weechat/relay.conf | 2 +- .weechat/rmodifier.conf | 2 +- .weechat/script.conf | 2 +- .weechat/script/buffers.pl | 1783 ++++++++++++++++++++++++++++++++ .weechat/script/plugins.xml.gz | Bin 0 -> 93136 bytes .weechat/sec.conf | 11 + .weechat/weechat.conf | 28 +- .weechat/xfer.conf | 4 +- 13 files changed, 1840 insertions(+), 15 deletions(-) create mode 100644 .weechat/script/buffers.pl create mode 100644 .weechat/script/plugins.xml.gz create mode 100644 .weechat/sec.conf diff --git a/.weechat/alias.conf b/.weechat/alias.conf index a8018d0..2a5d648 100644 --- a/.weechat/alias.conf +++ b/.weechat/alias.conf @@ -1,5 +1,5 @@ # -# alias.conf -- weechat v0.4.1 +# alias.conf -- weechat v0.4.3 # [cmd] diff --git a/.weechat/charset.conf b/.weechat/charset.conf index 050c5ec..54dc741 100644 --- a/.weechat/charset.conf +++ b/.weechat/charset.conf @@ -1,5 +1,5 @@ # -# charset.conf -- weechat v0.4.1 +# charset.conf -- weechat v0.4.3 # [default] diff --git a/.weechat/irc.conf b/.weechat/irc.conf index 5c37c69..f2b0691 100644 --- a/.weechat/irc.conf +++ b/.weechat/irc.conf @@ -1,5 +1,5 @@ # -# irc.conf -- weechat v0.4.1 +# irc.conf -- weechat v0.4.3 # [look] @@ -24,7 +24,7 @@ display_pv_back = on highlight_channel = "$nick" highlight_pv = "$nick" highlight_server = "$nick" -highlight_tags = "irc_privmsg,irc_notice" +highlight_tags_restrict = "irc_privmsg,irc_notice" item_away_message = on item_channel_modes_hide_key = off item_display_server = buffer_plugin @@ -34,22 +34,27 @@ msgbuffer_fallback = current new_channel_position = none new_pv_position = none nick_color_force = "" +nick_color_hash = sum nick_color_stop_chars = "_|[" nick_completion_smart = speakers nick_mode = prefix nick_mode_empty = off nicks_hide_password = "nickserv" notice_as_pv = auto +notice_welcome_redirect = on +notice_welcome_tags = "" notify_tags_ison = "notify_message" notify_tags_whois = "notify_message" part_closes_buffer = off pv_buffer = independent +pv_tags = "notify_private" raw_messages = 256 server_buffer = merge_with_core smart_filter = on smart_filter_delay = 5 smart_filter_join = on smart_filter_join_unmask = 30 +smart_filter_mode = "ovh" smart_filter_nick = on smart_filter_quit = on topic_strip_colors = off @@ -73,9 +78,11 @@ topic_old = darkgray alternate_nick = on autoreconnect_delay_growing = 2 autoreconnect_delay_max = 1800 +ban_mask_default = "*!$user@$host" colors_receive = on colors_send = on lag_check = 60 +lag_max = 1800 lag_min_show = 500 lag_reconnect = 0 lag_refresh_interval = 1 @@ -106,6 +113,7 @@ capabilities = "" command = "" command_delay = 0 connection_timeout = 60 +default_msg_kick = "" default_msg_part = "WeeChat %v" default_msg_quit = "WeeChat %v" ipv6 = on @@ -122,6 +130,7 @@ sasl_username = "" ssl = off ssl_cert = "" ssl_dhkey_size = 2048 +ssl_fingerprint = "" ssl_priorities = "NORMAL" ssl_verify = on username = "cacci" @@ -134,6 +143,7 @@ freenode.ssl freenode.ssl_cert freenode.ssl_priorities freenode.ssl_dhkey_size +freenode.ssl_fingerprint freenode.ssl_verify freenode.password freenode.capabilities @@ -158,6 +168,7 @@ freenode.anti_flood_prio_high freenode.anti_flood_prio_low freenode.away_check freenode.away_check_max_nicks +freenode.default_msg_kick freenode.default_msg_part freenode.default_msg_quit freenode.notify diff --git a/.weechat/logger.conf b/.weechat/logger.conf index b395104..9b32f4d 100644 --- a/.weechat/logger.conf +++ b/.weechat/logger.conf @@ -1,5 +1,5 @@ # -# logger.conf -- weechat v0.4.1 +# logger.conf -- weechat v0.4.3 # [look] diff --git a/.weechat/plugins.conf b/.weechat/plugins.conf index 98921ec..080bbcd 100644 --- a/.weechat/plugins.conf +++ b/.weechat/plugins.conf @@ -1,5 +1,5 @@ # -# plugins.conf -- weechat v0.4.1 +# plugins.conf -- weechat v0.4.3 # [var] diff --git a/.weechat/relay.conf b/.weechat/relay.conf index 9597141..e5c404c 100644 --- a/.weechat/relay.conf +++ b/.weechat/relay.conf @@ -1,5 +1,5 @@ # -# relay.conf -- weechat v0.4.1 +# relay.conf -- weechat v0.4.3 # [look] diff --git a/.weechat/rmodifier.conf b/.weechat/rmodifier.conf index a135a67..c454770 100644 --- a/.weechat/rmodifier.conf +++ b/.weechat/rmodifier.conf @@ -1,5 +1,5 @@ # -# rmodifier.conf -- weechat v0.4.1 +# rmodifier.conf -- weechat v0.4.3 # [look] diff --git a/.weechat/script.conf b/.weechat/script.conf index 54be061..23f9320 100644 --- a/.weechat/script.conf +++ b/.weechat/script.conf @@ -1,5 +1,5 @@ # -# script.conf -- weechat v0.4.1 +# script.conf -- weechat v0.4.3 # [look] diff --git a/.weechat/script/buffers.pl b/.weechat/script/buffers.pl new file mode 100644 index 0000000..8147341 --- /dev/null +++ b/.weechat/script/buffers.pl @@ -0,0 +1,1783 @@ +# +# Copyright (C) 2008-2014 Sebastien Helleu +# Copyright (C) 2011-2013 Nils G +# +# This program 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. +# +# This program 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 this program. If not, see . +# +# +# Display sidebar with list of buffers. +# +# History: +# +# 2014-07-19, Sebastien Helleu : +# v4.8: add support of ctrl + mouse wheel to jump to previous/next buffer, +# new option "mouse_wheel" +# 2014-06-22, Sebastien Helleu : +# v4.7: fix typos in options +# 2014-04-05, Sebastien Helleu : +# v4.6: add support of hidden buffers (WeeChat >= 0.4.4) +# 2014-01-01, Sebastien Helleu : +# v4.5: add option "mouse_move_buffer" +# 2013-12-11, Sebastien Helleu : +# v4.4: fix buffer number on drag to the end of list when option +# weechat.look.buffer_auto_renumber is off +# 2013-12-10, nils_2@freenode.#weechat: +# v4.3: add options "prefix_bufname" and "suffix_bufname (idea by silverd) +# : fix hook_timer() for show_lag wasn't disabled +# : improved signal handling (less updating of buffers list) +# 2013-11-07, Sebastien Helleu : +# v4.2: use default filling "columns_vertical" when bar position is top/bottom +# 2013-10-31, nils_2@freenode.#weechat: +# v4.1: add option "detach_buffer_immediately" (idea by farn) +# 2013-10-20, nils_2@freenode.#weechat: +# v4.0: add options "detach_displayed_buffers", "detach_display_window_number" +# 2013-09-27, nils_2@freenode.#weechat: +# v3.9: add option "toggle_bar" and option "show_prefix_query" (idea by IvarB) +# : fix problem with linefeed at end of list of buffers (reported by grawity) +# 2012-10-18, nils_2@freenode.#weechat: +# v3.8: add option "mark_inactive", to mark buffers you are not in (idea by xrdodrx) +# : add wildcard "*" for immune_detach_buffers (idea by StarWeaver) +# : add new options "detach_query" and "detach_free_content" (idea by StarWeaver) +# 2012-10-06, Nei : +# v3.7: call menu on right mouse if menu script is loaded. +# 2012-10-06, nils_2 : +# v3.6: add new option "hotlist_counter" (idea by torque). +# 2012-06-02, nils_2 : +# v3.5: add values "server|channel|private|all|keepserver|none" to option "hide_merged_buffers" (suggested by dominikh). +# 2012-05-25, nils_2 : +# v3.4: add new option "show_lag". +# 2012-04-07, Sebastien Helleu : +# v3.3: fix truncation of wide chars in buffer name (option name_size_max) (bug #36034) +# 2012-03-15, nils_2 : +# v3.2: add new option "detach"(weechat >= 0.3.8) +# add new option "immune_detach_buffers" (requested by Mkaysi) +# add new function buffers_whitelist add|del|reset (suggested by FiXato) +# add new function buffers_detach add|del|reset +# 2012-03-09, Sebastien Helleu : +# v3.1: fix reload of config file +# 2012-01-29, nils_2 : +# v3.0: fix: buffers did not update directly during window_switch (reported by FiXato) +# 2012-01-29, nils_2 : +# v2.9: add options "name_size_max" and "name_crop_suffix" +# 2012-01-08, nils_2 : +# v2.8: fix indenting for option "show_number off" +# fix unset of buffer activity in hotlist when buffer was moved with mouse +# add buffer with free content and core buffer sorted first (suggested by nyuszika7h) +# add options queries_default_fg/bg and queries_message_fg/bg (suggested by FiXato) +# add clicking with left button on current buffer will do a jump_previously_visited_buffer (suggested by FiXato) +# add clicking with right button on current buffer will do a jump_next_visited_buffer +# add additional informations in help texts +# add default_fg and default_bg for whitelist channels +# internal changes (script is now 3Kb smaller) +# 2012-01-04, Sebastien Helleu : +# v2.7: fix regex lookup in whitelist buffers list +# 2011-12-04, nils_2 : +# v2.6: add own config file (buffers.conf) +# add new behavior for indenting (under_name) +# add new option to set different color for server buffers and buffers with free content +# 2011-10-30, nils_2 : +# v2.5: add new options "show_number_char" and "color_number_char", +# add help-description for options +# 2011-08-24, Sebastien Helleu : +# v2.4: add mouse support +# 2011-06-06, nils_2 : +# v2.3: added: missed option "color_whitelist_default" +# 2011-03-23, Sebastien Helleu : +# v2.2: fix color of nick prefix with WeeChat >= 0.3.5 +# 2011-02-13, nils_2 : +# v2.1: add options "color_whitelist_*" +# 2010-10-05, Sebastien Helleu : +# v2.0: add options "sort" and "show_number" +# 2010-04-12, Sebastien Helleu : +# v1.9: replace call to log() by length() to align buffer numbers +# 2010-04-02, Sebastien Helleu : +# v1.8: fix bug with background color and option indenting_number +# 2010-04-02, Helios : +# v1.7: add indenting_number option +# 2010-02-25, m4v : +# v1.6: add option to hide empty prefixes +# 2010-02-12, Sebastien Helleu : +# v1.5: add optional nick prefix for buffers like IRC channels +# 2009-09-30, Sebastien Helleu : +# v1.4: remove spaces for indenting when bar position is top/bottom +# 2009-06-14, Sebastien Helleu : +# v1.3: add option "hide_merged_buffers" +# 2009-06-14, Sebastien Helleu : +# v1.2: improve display with merged buffers +# 2009-05-02, Sebastien Helleu : +# v1.1: sync with last API changes +# 2009-02-21, Sebastien Helleu : +# v1.0: remove timer used to update bar item first time (not needed any more) +# 2009-02-17, Sebastien Helleu : +# v0.9: fix bug with indenting of private buffers +# 2009-01-04, Sebastien Helleu : +# v0.8: update syntax for command /set (comments) +# 2008-10-20, Jiri Golembiovsky : +# v0.7: add indenting option +# 2008-10-01, Sebastien Helleu : +# v0.6: add default color for buffers, and color for current active buffer +# 2008-09-18, Sebastien Helleu : +# v0.5: fix color for "low" level entry in hotlist +# 2008-09-18, Sebastien Helleu : +# v0.4: rename option "show_category" to "short_names", +# remove option "color_slash" +# 2008-09-15, Sebastien Helleu : +# v0.3: fix bug with priority in hotlist (var not defined) +# 2008-09-02, Sebastien Helleu : +# v0.2: add color for buffers with activity and config options for +# colors, add config option to display/hide categories +# 2008-03-15, Sebastien Helleu : +# v0.1: script creation +# +# Help about settings: +# display all settings for script (or use iset.pl script to change settings): +# /set buffers* +# show help text for option buffers.look.whitelist_buffers: +# /help buffers.look.whitelist_buffers +# +# Mouse-support (standard key bindings): +# left mouse-button: +# - click on a buffer to switch to selected buffer +# - click on current buffer will do action jump_previously_visited_buffer +# - drag a buffer and drop it on another position will move the buffer to position +# right mouse-button: +# - click on current buffer will do action jump_next_visited_buffer +# - moving buffer to the left/right will close buffer. +# + +use strict; +use Encode qw( decode encode ); +# -----------------------------[ internal ]------------------------------------- +my $SCRIPT_NAME = "buffers"; +my $SCRIPT_VERSION = "4.8"; + +my $BUFFERS_CONFIG_FILE_NAME = "buffers"; +my $buffers_config_file; +my $cmd_buffers_whitelist= "buffers_whitelist"; +my $cmd_buffers_detach = "buffers_detach"; + +my %mouse_keys = ("\@item(buffers):button1*" => "hsignal:buffers_mouse", + "\@item(buffers):button2*" => "hsignal:buffers_mouse", + "\@bar(buffers):ctrl-wheelup" => "hsignal:buffers_mouse", + "\@bar(buffers):ctrl-wheeldown" => "hsignal:buffers_mouse"); +my %options; +my %hotlist_level = (0 => "low", 1 => "message", 2 => "private", 3 => "highlight"); +my @whitelist_buffers = (); +my @immune_detach_buffers= (); +my @detach_buffer_immediately= (); +my @buffers_focus = (); +my %buffers_timer = (); +my %Hooks = (); + +# --------------------------------[ init ]-------------------------------------- +weechat::register($SCRIPT_NAME, "Sebastien Helleu ", + $SCRIPT_VERSION, "GPL3", + "Sidebar with list of buffers", "shutdown_cb", ""); +my $weechat_version = weechat::info_get("version_number", "") || 0; + +buffers_config_init(); +buffers_config_read(); + +weechat::bar_item_new($SCRIPT_NAME, "build_buffers", ""); +weechat::bar_new($SCRIPT_NAME, "0", "0", "root", "", "left", "columns_vertical", + "vertical", "0", "0", "default", "default", "default", "1", + $SCRIPT_NAME); + +if ( check_bar_item() == 0 ) +{ + weechat::command("", "/bar show " . $SCRIPT_NAME) if ( weechat::config_boolean($options{"toggle_bar"}) eq 1 ); +} + +weechat::hook_signal("buffer_opened", "buffers_signal_buffer", ""); +weechat::hook_signal("buffer_closed", "buffers_signal_buffer", ""); +weechat::hook_signal("buffer_merged", "buffers_signal_buffer", ""); +weechat::hook_signal("buffer_unmerged", "buffers_signal_buffer", ""); +weechat::hook_signal("buffer_moved", "buffers_signal_buffer", ""); +weechat::hook_signal("buffer_renamed", "buffers_signal_buffer", ""); +weechat::hook_signal("buffer_switch", "buffers_signal_buffer", ""); +weechat::hook_signal("buffer_hidden", "buffers_signal_buffer", ""); # WeeChat >= 0.4.4 +weechat::hook_signal("buffer_unhidden", "buffers_signal_buffer", ""); # WeeChat >= 0.4.4 + +weechat::hook_signal("window_switch", "buffers_signal_buffer", ""); +weechat::hook_signal("hotlist_changed", "buffers_signal_hotlist", ""); +#weechat::hook_command_run("/input switch_active_*", "buffers_signal_buffer", ""); +weechat::bar_item_update($SCRIPT_NAME); + + +if ($weechat_version >= 0x00030600) +{ + weechat::hook_focus($SCRIPT_NAME, "buffers_focus_buffers", ""); + weechat::hook_hsignal("buffers_mouse", "buffers_hsignal_mouse", ""); + weechat::key_bind("mouse", \%mouse_keys); +} + +weechat::hook_command($cmd_buffers_whitelist, + "add/del current buffer to/from buffers whitelist", + "[add] || [del] || [reset]", + " add: add current buffer in configuration file\n". + " del: delete current buffer from configuration file\n". + "reset: reset all buffers from configuration file ". + "(no confirmation!)\n\n". + "Examples:\n". + "/$cmd_buffers_whitelist add\n", + "add %-||". + "del %-||". + "reset %-", + "buffers_cmd_whitelist", ""); +weechat::hook_command($cmd_buffers_detach, + "add/del current buffer to/from buffers detach", + "[add] || [del] || [reset]", + " add: add current buffer in configuration file\n". + " del: delete current buffer from configuration file\n". + "reset: reset all buffers from configuration file ". + "(no confirmation!)\n\n". + "Examples:\n". + "/$cmd_buffers_detach add\n", + "add %-||". + "del %-||". + "reset %-", + "buffers_cmd_detach", ""); + +if ($weechat_version >= 0x00030800) +{ + weechat::hook_config("buffers.look.detach", "hook_timer_detach", ""); + if (weechat::config_integer($options{"detach"}) > 0) + { + $Hooks{timer_detach} = weechat::hook_timer(weechat::config_integer($options{"detach"}) * 1000, + 60, 0, "buffers_signal_hotlist", ""); + } +} + +weechat::hook_config("buffers.look.show_lag", "hook_timer_lag", ""); + +if (weechat::config_boolean($options{"show_lag"})) +{ + $Hooks{timer_lag} = weechat::hook_timer( + weechat::config_integer(weechat::config_get("irc.network.lag_refresh_interval")) * 1000, + 0, 0, "buffers_signal_hotlist", ""); +} + +# -------------------------------- [ command ] -------------------------------- +sub buffers_cmd_whitelist +{ +my ( $data, $buffer, $args ) = @_; + $args = lc($args); + my $buffers_whitelist = weechat::config_string( weechat::config_get("buffers.look.whitelist_buffers") ); + return weechat::WEECHAT_RC_OK if ( $buffers_whitelist eq "" and $args eq "del" or $buffers_whitelist eq "" and $args eq "reset" ); + my @buffers_list = split( /,/, $buffers_whitelist ); + # get buffers name + my $infolist = weechat::infolist_get("buffer", weechat::current_buffer(), ""); + weechat::infolist_next($infolist); + my $buffers_name = weechat::infolist_string($infolist, "name"); + weechat::infolist_free($infolist); + return weechat::WEECHAT_RC_OK if ( $buffers_name eq "" ); # should never happen + + if ( $args eq "add" ) + { + return weechat::WEECHAT_RC_OK if ( grep /^$buffers_name$/, @buffers_list ); # check if buffer already in list + push @buffers_list, ( $buffers_name ); + my $buffers_list = &create_whitelist(\@buffers_list); + weechat::config_option_set( weechat::config_get("buffers.look.whitelist_buffers"), $buffers_list, 1); + weechat::print(weechat::current_buffer(), "buffer \"$buffers_name\" added to buffers whitelist"); + } + elsif ( $args eq "del" ) + { + return weechat::WEECHAT_RC_OK unless ( grep /^$buffers_name$/, @buffers_list ); # check if buffer is in list + @buffers_list = grep {$_ ne $buffers_name} @buffers_list; # delete entry + my $buffers_list = &create_whitelist(\@buffers_list); + weechat::config_option_set( weechat::config_get("buffers.look.whitelist_buffers"), $buffers_list, 1); + weechat::print(weechat::current_buffer(), "buffer \"$buffers_name\" deleted from buffers whitelist"); + } + elsif ( $args eq "reset" ) + { + return weechat::WEECHAT_RC_OK if ( $buffers_whitelist eq "" ); + weechat::config_option_set( weechat::config_get("buffers.look.whitelist_buffers"), "", 1); + weechat::print(weechat::current_buffer(), "buffers whitelist is empty, now..."); + } + return weechat::WEECHAT_RC_OK; +} +sub buffers_cmd_detach +{ + my ( $data, $buffer, $args ) = @_; + $args = lc($args); + my $immune_detach_buffers = weechat::config_string( weechat::config_get("buffers.look.immune_detach_buffers") ); + return weechat::WEECHAT_RC_OK if ( $immune_detach_buffers eq "" and $args eq "del" or $immune_detach_buffers eq "" and $args eq "reset" ); + + my @buffers_list = split( /,/, $immune_detach_buffers ); + # get buffers name + my $infolist = weechat::infolist_get("buffer", weechat::current_buffer(), ""); + weechat::infolist_next($infolist); + my $buffers_name = weechat::infolist_string($infolist, "name"); + weechat::infolist_free($infolist); + return weechat::WEECHAT_RC_OK if ( $buffers_name eq "" ); # should never happen + + if ( $args eq "add" ) + { + return weechat::WEECHAT_RC_OK if ( grep /^$buffers_name$/, @buffers_list ); # check if buffer already in list + push @buffers_list, ( $buffers_name ); + my $buffers_list = &create_whitelist(\@buffers_list); + weechat::config_option_set( weechat::config_get("buffers.look.immune_detach_buffers"), $buffers_list, 1); + weechat::print(weechat::current_buffer(), "buffer \"$buffers_name\" added to immune detach buffers"); + } + elsif ( $args eq "del" ) + { + return weechat::WEECHAT_RC_OK unless ( grep /^$buffers_name$/, @buffers_list ); # check if buffer is in list + @buffers_list = grep {$_ ne $buffers_name} @buffers_list; # delete entry + my $buffers_list = &create_whitelist(\@buffers_list); + weechat::config_option_set( weechat::config_get("buffers.look.immune_detach_buffers"), $buffers_list, 1); + weechat::print(weechat::current_buffer(), "buffer \"$buffers_name\" deleted from immune detach buffers"); + } + elsif ( $args eq "reset" ) + { + return weechat::WEECHAT_RC_OK if ( $immune_detach_buffers eq "" ); + weechat::config_option_set( weechat::config_get("buffers.look.immune_detach_buffers"), "", 1); + weechat::print(weechat::current_buffer(), "immune detach buffers is empty, now..."); + } + return weechat::WEECHAT_RC_OK; +} + +sub create_whitelist +{ + my @buffers_list = @{$_[0]}; + my $buffers_list = ""; + foreach (@buffers_list) + { + $buffers_list .= $_ .","; + } + # remove last "," + chop $buffers_list; + return $buffers_list; +} + +# -------------------------------- [ config ] -------------------------------- +sub hook_timer_detach +{ + my $detach = $_[2]; + if ( $detach eq 0 ) + { + weechat::unhook($Hooks{timer_detach}) if $Hooks{timer_detach}; + $Hooks{timer_detach} = ""; + } + else + { + weechat::unhook($Hooks{timer_detach}) if $Hooks{timer_detach}; + $Hooks{timer_detach} = weechat::hook_timer( weechat::config_integer( $options{"detach"}) * 1000, 60, 0, "buffers_signal_hotlist", ""); + } + weechat::bar_item_update($SCRIPT_NAME); + return weechat::WEECHAT_RC_OK; +} + +sub hook_timer_lag +{ + my $lag = $_[2]; + if ( $lag eq "off" ) + { + weechat::unhook($Hooks{timer_lag}) if $Hooks{timer_lag}; + $Hooks{timer_lag} = ""; + } + else + { + weechat::unhook($Hooks{timer_lag}) if $Hooks{timer_lag}; + $Hooks{timer_lag} = weechat::hook_timer( weechat::config_integer(weechat::config_get("irc.network.lag_refresh_interval")) * 1000, 0, 0, "buffers_signal_hotlist", ""); + } + weechat::bar_item_update($SCRIPT_NAME); + return weechat::WEECHAT_RC_OK; +} + +sub buffers_config_read +{ + return weechat::config_read($buffers_config_file) if ($buffers_config_file ne ""); +} +sub buffers_config_write +{ + return weechat::config_write($buffers_config_file) if ($buffers_config_file ne ""); +} +sub buffers_config_reload_cb +{ + my ($data, $config_file) = ($_[0], $_[1]); + return weechat::config_reload($config_file) +} +sub buffers_config_init +{ + $buffers_config_file = weechat::config_new($BUFFERS_CONFIG_FILE_NAME, + "buffers_config_reload_cb", ""); + return if ($buffers_config_file eq ""); + +my %default_options_color = +("color_current_fg" => [ + "current_fg", "color", + "foreground color for current buffer", + "", 0, 0, "lightcyan", "lightcyan", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_current_bg" => [ + "current_bg", "color", + "background color for current buffer", + "", 0, 0, "red", "red", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_default_fg" => [ + "default_fg", "color", + "default foreground color for buffer name", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_default_bg" => [ + "default_bg", "color", + "default background color for buffer name", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_hotlist_highlight_fg" => [ + "hotlist_highlight_fg", "color", + "change foreground color of buffer name if a highlight messaged received", + "", 0, 0, "magenta", "magenta", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_hotlist_highlight_bg" => [ + "hotlist_highlight_bg", "color", + "change background color of buffer name if a highlight messaged received", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_hotlist_low_fg" => [ + "hotlist_low_fg", "color", + "change foreground color of buffer name if a low message received", + "", 0, 0, "white", "white", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_hotlist_low_bg" => [ + "hotlist_low_bg", "color", + "change background color of buffer name if a low message received", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_hotlist_message_fg" => [ + "hotlist_message_fg", "color", + "change foreground color of buffer name if a normal message received", + "", 0, 0, "yellow", "yellow", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_hotlist_message_bg" => [ + "hotlist_message_bg", "color", + "change background color of buffer name if a normal message received", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_hotlist_private_fg" => [ + "hotlist_private_fg", "color", + "change foreground color of buffer name if a private message received", + "", 0, 0, "lightgreen", "lightgreen", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_hotlist_private_bg" => [ + "hotlist_private_bg", "color", + "change background color of buffer name if a private message received", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_number" => [ + "number", "color", + "color for buffer number", + "", 0, 0, "lightgreen", "lightgreen", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_number_char" => [ + "number_char", "color", + "color for buffer number char", + "", 0, 0, "lightgreen", "lightgreen", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_whitelist_default_fg" => [ + "whitelist_default_fg", "color", + "default foreground color for whitelist buffer name", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_whitelist_default_bg" => [ + "whitelist_default_bg", "color", + "default background color for whitelist buffer name", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_whitelist_low_fg" => [ + "whitelist_low_fg", "color", + "low color of whitelist buffer name", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_whitelist_low_bg" => [ + "whitelist_low_bg", "color", + "low color of whitelist buffer name", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_whitelist_message_fg" => [ + "whitelist_message_fg", "color", + "message color of whitelist buffer name", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_whitelist_message_bg" => [ + "whitelist_message_bg", "color", + "message color of whitelist buffer name", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_whitelist_private_fg" => [ + "whitelist_private_fg", "color", + "private color of whitelist buffer name", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_whitelist_private_bg" => [ + "whitelist_private_bg", "color", + "private color of whitelist buffer name", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_whitelist_highlight_fg" => [ + "whitelist_highlight_fg", "color", + "highlight color of whitelist buffer name", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_whitelist_highlight_bg" => [ + "whitelist_highlight_bg", "color", + "highlight color of whitelist buffer name", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_none_channel_fg" => [ + "none_channel_fg", "color", + "foreground color for none channel buffer (e.g.: core/server/plugin ". + "buffer)", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_none_channel_bg" => [ + "none_channel_bg", "color", + "background color for none channel buffer (e.g.: core/server/plugin ". + "buffer)", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "queries_default_fg" => [ + "queries_default_fg", "color", + "foreground color for query buffer without message", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "queries_default_bg" => [ + "queries_default_bg", "color", + "background color for query buffer without message", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "queries_message_fg" => [ + "queries_message_fg", "color", + "foreground color for query buffer with unread message", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "queries_message_bg" => [ + "queries_message_bg", "color", + "background color for query buffer with unread message", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "queries_highlight_fg" => [ + "queries_highlight_fg", "color", + "foreground color for query buffer with unread highlight", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "queries_highlight_bg" => [ + "queries_highlight_bg", "color", + "background color for query buffer with unread highlight", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_prefix_bufname" => [ + "prefix_bufname", "color", + "color for prefix of buffer name", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "color_suffix_bufname" => [ + "suffix_bufname", "color", + "color for suffix of buffer name", + "", 0, 0, "default", "default", 0, + "", "", "buffers_signal_config", "", "", "" + ], +); + +my %default_options_look = +( + "hotlist_counter" => [ + "hotlist_counter", "boolean", + "show number of message for the buffer (this option needs WeeChat >= ". + "0.3.5). The relevant option for notification is \"weechat.look.". + "buffer_notify_default\"", + "", 0, 0, "off", "off", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "show_lag" => [ + "show_lag", "boolean", + "show lag behind server name. This option is using \"irc.color.". + "item_lag_finished\", ". + "\"irc.network.lag_min_show\" and \"irc.network.lag_refresh_interval\"", + "", 0, 0, "off", "off", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "look_whitelist_buffers" => [ + "whitelist_buffers", "string", + "comma separated list of buffers for using a different color scheme ". + "(for example: freenode.#weechat,freenode.#weechat-fr)", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config_whitelist", "", "", "" + ], + "hide_merged_buffers" => [ + "hide_merged_buffers", "integer", + "hide merged buffers. The value determines which merged buffers should ". + "be hidden, keepserver meaning 'all except server buffers'. Other values ". + "correspondent to the buffer type.", + "server|channel|private|keepserver|all|none", 0, 0, "none", "none", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "indenting" => [ + "indenting", "integer", "use indenting for channel and query buffers. ". + "This option only takes effect if bar is left/right positioned", + "off|on|under_name", 0, 0, "off", "off", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "indenting_number" => [ + "indenting_number", "boolean", + "use indenting for numbers. This option only takes effect if bar is ". + "left/right positioned", + "", 0, 0, "on", "on", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "short_names" => [ + "short_names", "boolean", + "display short names (remove text before first \".\" in buffer name)", + "", 0, 0, "on", "on", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "show_number" => [ + "show_number", "boolean", + "display buffer number in front of buffer name", + "", 0, 0, "on", "on", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "show_number_char" => [ + "number_char", "string", + "display a char behind buffer number", + "", 0, 0, ".", ".", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "show_prefix_bufname" => [ + "prefix_bufname", "string", + "prefix displayed in front of buffer name", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "show_suffix_bufname" => [ + "suffix_bufname", "string", + "suffix displayed at end of buffer name", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "show_prefix" => [ + "prefix", "boolean", + "displays your prefix for channel in front of buffer name", + "", 0, 0, "off", "off", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "show_prefix_empty" => [ + "prefix_empty", "boolean", + "use a placeholder for channels without prefix", + "", 0, 0, "on", "on", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "show_prefix_query" => [ + "prefix_for_query", "string", + "prefix displayed in front of query buffer", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "sort" => [ + "sort", "integer", + "sort buffer-list by \"number\" or \"name\"", + "number|name", 0, 0, "number", "number", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "core_to_front" => [ + "core_to_front", "boolean", + "core buffer and buffers with free content will be listed first. ". + "Take only effect if buffer sort is by name", + "", 0, 0, "off", "off", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "jump_prev_next_visited_buffer" => [ + "jump_prev_next_visited_buffer", "boolean", + "jump to previously or next visited buffer if you click with ". + "left/right mouse button on currently visiting buffer", + "", 0, 0, "off", "off", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "name_size_max" => [ + "name_size_max", "integer", + "maximum size of buffer name. 0 means no limitation", + "", 0, 256, 0, 0, 0, + "", "", "buffers_signal_config", "", "", "" + ], + "name_crop_suffix" => [ + "name_crop_suffix", "string", + "contains an optional char(s) that is appended when buffer name is ". + "shortened", + "", 0, 0, "+", "+", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "detach" => [ + "detach", "integer", + "detach buffer from buffers list after a specific period of time ". + "(in seconds) without action (weechat ≥ 0.3.8 required) (0 means \"off\")", + "", 0, 31536000, 0, "number", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "immune_detach_buffers" => [ + "immune_detach_buffers", "string", + "comma separated list of buffers to NOT automatically detach. ". + "Allows \"*\" wildcard. Ex: \"BitlBee,freenode.*\"", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config_immune_detach_buffers", "", "", "" + ], + "detach_query" => [ + "detach_query", "boolean", + "query buffer will be detached", + "", 0, 0, "off", "off", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "detach_buffer_immediately" => [ + "detach_buffer_immediately", "string", + "comma separated list of buffers to detach immediately. A query and ". + "highlight message will attach buffer again. Allows \"*\" wildcard. ". + "Ex: \"BitlBee,freenode.*\"", + "", 0, 0, "", "", 0, + "", "", "buffers_signal_config_detach_buffer_immediately", "", "", "" + ], + "detach_free_content" => [ + "detach_free_content", "boolean", + "buffers with free content will be detached (Ex: iset, chanmon)", + "", 0, 0, "off", "off", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "detach_displayed_buffers" => [ + "detach_displayed_buffers", "boolean", + "buffers displayed in a (split) window will be detached", + "", 0, 0, "on", "on", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "detach_display_window_number" => [ + "detach_display_window_number", "boolean", + "window number will be add, behind buffer name (this option takes only ". + "effect with \"detach_displayed_buffers\" option)", + "", 0, 0, "off", "off", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "mark_inactive" => [ + "mark_inactive", "boolean", + "if option is \"on\", inactive buffers (those you are not in) will have ". + "parentheses around them. An inactive buffer will not be detached.", + "", 0, 0, "off", "off", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "toggle_bar" => [ + "toggle_bar", "boolean", + "if option is \"on\", buffers bar will hide/show when script is ". + "(un)loaded.", + "", 0, 0, "on", "on", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "mouse_move_buffer" => [ + "mouse_move_buffer", "boolean", + "if option is \"on\", mouse gestures (drag & drop) can move buffers in list.", + "", 0, 0, "on", "on", 0, + "", "", "buffers_signal_config", "", "", "" + ], + "mouse_wheel" => [ + "mouse_wheel", "boolean", + "if option is \"on\", mouse wheel jumps to previous/next buffer in list.", + "", 0, 0, "on", "on", 0, + "", "", "buffers_signal_config", "", "", "" + ], +); + # section "color" + my $section_color = weechat::config_new_section( + $buffers_config_file, + "color", 0, 0, "", "", "", "", "", "", "", "", "", ""); + if ($section_color eq "") + { + weechat::config_free($buffers_config_file); + return; + } + foreach my $option (keys %default_options_color) + { + $options{$option} = weechat::config_new_option( + $buffers_config_file, + $section_color, + $default_options_color{$option}[0], + $default_options_color{$option}[1], + $default_options_color{$option}[2], + $default_options_color{$option}[3], + $default_options_color{$option}[4], + $default_options_color{$option}[5], + $default_options_color{$option}[6], + $default_options_color{$option}[7], + $default_options_color{$option}[8], + $default_options_color{$option}[9], + $default_options_color{$option}[10], + $default_options_color{$option}[11], + $default_options_color{$option}[12], + $default_options_color{$option}[13], + $default_options_color{$option}[14]); + } + + # section "look" + my $section_look = weechat::config_new_section( + $buffers_config_file, + "look", 0, 0, "", "", "", "", "", "", "", "", "", ""); + if ($section_look eq "") + { + weechat::config_free($buffers_config_file); + return; + } + foreach my $option (keys %default_options_look) + { + $options{$option} = weechat::config_new_option( + $buffers_config_file, + $section_look, + $default_options_look{$option}[0], + $default_options_look{$option}[1], + $default_options_look{$option}[2], + $default_options_look{$option}[3], + $default_options_look{$option}[4], + $default_options_look{$option}[5], + $default_options_look{$option}[6], + $default_options_look{$option}[7], + $default_options_look{$option}[8], + $default_options_look{$option}[9], + $default_options_look{$option}[10], + $default_options_look{$option}[11], + $default_options_look{$option}[12], + $default_options_look{$option}[13], + $default_options_look{$option}[14], + $default_options_look{$option}[15]); + } +} + +sub build_buffers +{ + my $str = ""; + + # get bar position (left/right/top/bottom) + my $position = "left"; + my $option_position = weechat::config_get("weechat.bar.buffers.position"); + if ($option_position ne "") + { + $position = weechat::config_string($option_position); + } + + # read hotlist + my %hotlist; + my $infolist = weechat::infolist_get("hotlist", "", ""); + while (weechat::infolist_next($infolist)) + { + $hotlist{weechat::infolist_pointer($infolist, "buffer_pointer")} = + weechat::infolist_integer($infolist, "priority"); + if ( weechat::config_boolean( $options{"hotlist_counter"} ) eq 1 and $weechat_version >= 0x00030500) + { + $hotlist{weechat::infolist_pointer($infolist, "buffer_pointer")."_count_00"} = + weechat::infolist_integer($infolist, "count_00"); # low message + $hotlist{weechat::infolist_pointer($infolist, "buffer_pointer")."_count_01"} = + weechat::infolist_integer($infolist, "count_01"); # channel message + $hotlist{weechat::infolist_pointer($infolist, "buffer_pointer")."_count_02"} = + weechat::infolist_integer($infolist, "count_02"); # private message + $hotlist{weechat::infolist_pointer($infolist, "buffer_pointer")."_count_03"} = + weechat::infolist_integer($infolist, "count_03"); # highlight message + } + } + weechat::infolist_free($infolist); + + # read buffers list + @buffers_focus = (); + my @buffers; + my @current1 = (); + my @current2 = (); + my $old_number = -1; + my $max_number = 0; + my $max_number_digits = 0; + my $active_seen = 0; + $infolist = weechat::infolist_get("buffer", "", ""); + while (weechat::infolist_next($infolist)) + { + # ignore hidden buffers (WeeChat >= 0.4.4) + if ($weechat_version >= 0x00040400) + { + next if (weechat::infolist_integer($infolist, "hidden")); + } + my $buffer; + my $number = weechat::infolist_integer($infolist, "number"); + if ($number ne $old_number) + { + @buffers = (@buffers, @current2, @current1); + @current1 = (); + @current2 = (); + $active_seen = 0; + } + if ($number > $max_number) + { + $max_number = $number; + } + $old_number = $number; + my $active = weechat::infolist_integer($infolist, "active"); + if ($active) + { + $active_seen = 1; + } + $buffer->{"pointer"} = weechat::infolist_pointer($infolist, "pointer"); + $buffer->{"number"} = $number; + $buffer->{"active"} = $active; + $buffer->{"current_buffer"} = weechat::infolist_integer($infolist, "current_buffer"); + $buffer->{"num_displayed"} = weechat::infolist_integer($infolist, "num_displayed"); + $buffer->{"plugin_name"} = weechat::infolist_string($infolist, "plugin_name"); + $buffer->{"name"} = weechat::infolist_string($infolist, "name"); + $buffer->{"short_name"} = weechat::infolist_string($infolist, "short_name"); + $buffer->{"full_name"} = $buffer->{"plugin_name"}.".".$buffer->{"name"}; + $buffer->{"type"} = weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type"); + #weechat::print("", $buffer->{"type"}); + + # check if buffer is active (or maybe a /part, /kick channel) + if ($buffer->{"type"} eq "channel" and weechat::config_boolean( $options{"mark_inactive"} ) eq 1) + { + my $server = weechat::buffer_get_string($buffer->{"pointer"}, "localvar_server"); + my $channel = weechat::buffer_get_string($buffer->{"pointer"}, "localvar_channel"); + my $infolist_channel = weechat::infolist_get("irc_channel", "", $server.",".$channel); + if ($infolist_channel) + { + weechat::infolist_next($infolist_channel); + $buffer->{"nicks_count"} = weechat::infolist_integer($infolist_channel, "nicks_count"); + }else + { + $buffer->{"nicks_count"} = 0; + } + weechat::infolist_free($infolist_channel); + } + + my $result = check_immune_detached_buffers($buffer->{"name"}); # checking for wildcard + + next if ( check_detach_buffer_immediately($buffer->{"name"}) eq 1 + and $buffer->{"current_buffer"} eq 0 + and ( not exists $hotlist{$buffer->{"pointer"}} or $hotlist{$buffer->{"pointer"}} < 2) ); # checking for buffer to immediately detach + + unless ($result) + { + my $detach_time = weechat::config_integer( $options{"detach"}); + my $current_time = time(); + # set timer for buffers with no hotlist action + $buffers_timer{$buffer->{"pointer"}} = $current_time + if ( not exists $hotlist{$buffer->{"pointer"}} + and $buffer->{"type"} eq "channel" + and not exists $buffers_timer{$buffer->{"pointer"}} + and $detach_time > 0); + + $buffers_timer{$buffer->{"pointer"}} = $current_time + if (weechat::config_boolean($options{"detach_query"}) eq 1 + and not exists $hotlist{$buffer->{"pointer"}} + and $buffer->{"type"} eq "private" + and not exists $buffers_timer{$buffer->{"pointer"}} + and $detach_time > 0); + + $detach_time = 0 + if (weechat::config_boolean($options{"detach_query"}) eq 0 + and $buffer->{"type"} eq "private"); + + # free content buffer + $buffers_timer{$buffer->{"pointer"}} = $current_time + if (weechat::config_boolean($options{"detach_free_content"}) eq 1 + and not exists $hotlist{$buffer->{"pointer"}} + and $buffer->{"type"} eq "" + and not exists $buffers_timer{$buffer->{"pointer"}} + and $detach_time > 0); + $detach_time = 0 + if (weechat::config_boolean($options{"detach_free_content"}) eq 0 + and $buffer->{"type"} eq ""); + + $detach_time = 0 if (weechat::config_boolean($options{"mark_inactive"}) eq 1 and defined $buffer->{"nicks_count"} and $buffer->{"nicks_count"} == 0); + + # check for detach + unless ( $buffer->{"current_buffer"} eq 0 + and not exists $hotlist{$buffer->{"pointer"}} +# and $buffer->{"type"} eq "channel" + and exists $buffers_timer{$buffer->{"pointer"}} + and $detach_time > 0 + and $weechat_version >= 0x00030800 + and $current_time - $buffers_timer{$buffer->{"pointer"}} >= $detach_time) + { + if ($active_seen) + { + push(@current2, $buffer); + } + else + { + push(@current1, $buffer); + } + } + elsif ( $buffer->{"current_buffer"} eq 0 + and not exists $hotlist{$buffer->{"pointer"}} +# and $buffer->{"type"} eq "channel" + and exists $buffers_timer{$buffer->{"pointer"}} + and $detach_time > 0 + and $weechat_version >= 0x00030800 + and $current_time - $buffers_timer{$buffer->{"pointer"}} >= $detach_time) + { # check for option detach_displayed_buffers and if buffer is displayed in a split window + if ( $buffer->{"num_displayed"} eq 1 + and weechat::config_boolean($options{"detach_displayed_buffers"}) eq 0 ) + { + my $infolist_window = weechat::infolist_get("window", "", ""); + while (weechat::infolist_next($infolist_window)) + { + my $buffer_ptr = weechat::infolist_pointer($infolist_window, "buffer"); + if ($buffer_ptr eq $buffer->{"pointer"}) + { + $buffer->{"window"} = weechat::infolist_integer($infolist_window, "number"); + } + } + weechat::infolist_free($infolist_window); + + push(@current2, $buffer); + } + } + } + else # buffer in "immune_detach_buffers" + { + if ($active_seen) + { + push(@current2, $buffer); + } + else + { + push(@current1, $buffer); + } + } + } # while end + + + if ($max_number >= 1) + { + $max_number_digits = length(int($max_number)); + } + @buffers = (@buffers, @current2, @current1); + weechat::infolist_free($infolist); + + # sort buffers by number, name or shortname + my %sorted_buffers; + if (1) + { + my $number = 0; + for my $buffer (@buffers) + { + my $key; + if (weechat::config_integer( $options{"sort"} ) eq 1) # number = 0; name = 1 + { + my $name = $buffer->{"name"}; + $name = $buffer->{"short_name"} if (weechat::config_boolean( $options{"short_names"} ) eq 1); + if (weechat::config_integer($options{"name_size_max"}) >= 1){ + $name = encode("UTF-8", substr(decode("UTF-8", $name), 0, weechat::config_integer($options{"name_size_max"}))); + } + if ( weechat::config_boolean($options{"core_to_front"}) eq 1) + { + if ( (weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") ne "channel" ) and ( weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") ne "private") ) + { + my $type = weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type"); + if ( $type eq "" and $name ne "weechat") + { + $name = " " . $name + }else + { + $name = " " . $name; + } + } + } + $key = sprintf("%s%08d", lc($name), $buffer->{"number"}); + } + else + { + $key = sprintf("%08d", $number); + } + $sorted_buffers{$key} = $buffer; + $number++; + } + } + + # build string with buffers + $old_number = -1; + foreach my $key (sort keys %sorted_buffers) + { + my $buffer = $sorted_buffers{$key}; + + if ( weechat::config_string($options{"hide_merged_buffers"}) eq "server" ) + { + # buffer type "server" or merged with core? + if ( ($buffer->{"type"} eq "server" or $buffer->{"plugin_name"} eq "core") && (! $buffer->{"active"}) ) + { + next; + } + } + if ( weechat::config_string($options{"hide_merged_buffers"}) eq "channel" ) + { + # buffer type "channel" or merged with core? + if ( ($buffer->{"type"} eq "channel" or $buffer->{"plugin_name"} eq "core") && (! $buffer->{"active"}) ) + { + next; + } + } + if ( weechat::config_string($options{"hide_merged_buffers"}) eq "private" ) + { + # buffer type "private" or merged with core? + if ( ($buffer->{"type"} eq "private" or $buffer->{"plugin_name"} eq "core") && (! $buffer->{"active"}) ) + { + next; + } + } + if ( weechat::config_string($options{"hide_merged_buffers"}) eq "keepserver" ) + { + if ( ($buffer->{"type"} ne "server" or $buffer->{"plugin_name"} eq "core") && (! $buffer->{"active"}) ) + { + next; + } + } + if ( weechat::config_string($options{"hide_merged_buffers"}) eq "all" ) + { + if ( ! $buffer->{"active"} ) + { + next; + } + } + + push(@buffers_focus, $buffer); # buffer > buffers_focus, for mouse support + my $color = ""; + my $bg = ""; + + $color = weechat::config_color( $options{"color_default_fg"} ); + $bg = weechat::config_color( $options{"color_default_bg"} ); + + if ( weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") eq "private" ) + { + if ( (weechat::config_color($options{"queries_default_bg"})) ne "default" || (weechat::config_color($options{"queries_default_fg"})) ne "default" ) + { + $bg = weechat::config_color( $options{"queries_default_bg"} ); + $color = weechat::config_color( $options{"queries_default_fg"} ); + } + } + # check for core and buffer with free content + if ( (weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") ne "channel" ) and ( weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") ne "private") ) + { + $color = weechat::config_color( $options{"color_none_channel_fg"} ); + $bg = weechat::config_color( $options{"color_none_channel_bg"} ); + } + # default whitelist buffer? + if (grep {$_ eq $buffer->{"name"}} @whitelist_buffers) + { + $color = weechat::config_color( $options{"color_whitelist_default_fg"} ); + $bg = weechat::config_color( $options{"color_whitelist_default_bg"} ); + } + + $color = "default" if ($color eq ""); + + # color for channel and query buffer + if (exists $hotlist{$buffer->{"pointer"}}) + { + delete $buffers_timer{$buffer->{"pointer"}}; + # check if buffer is in whitelist buffer + if (grep {$_ eq $buffer->{"name"}} @whitelist_buffers) + { + $bg = weechat::config_color( $options{"color_whitelist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}."_bg"} ); + $color = weechat::config_color( $options{"color_whitelist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}."_fg"} ); + } + elsif ( weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") eq "private" ) + { + # queries_default_fg/bg and buffers.color.queries_message_fg/bg + if ( (weechat::config_color($options{"queries_highlight_fg"})) ne "default" || + (weechat::config_color($options{"queries_highlight_bg"})) ne "default" || + (weechat::config_color($options{"queries_message_fg"})) ne "default" || + (weechat::config_color($options{"queries_message_bg"})) ne "default" ) + { + if ( ($hotlist{$buffer->{"pointer"}}) == 2 ) + { + $bg = weechat::config_color( $options{"queries_message_bg"} ); + $color = weechat::config_color( $options{"queries_message_fg"} ); + } + + elsif ( ($hotlist{$buffer->{"pointer"}}) == 3 ) + { + $bg = weechat::config_color( $options{"queries_highlight_bg"} ); + $color = weechat::config_color( $options{"queries_highlight_fg"} ); + } + }else + { + $bg = weechat::config_color( $options{"color_hotlist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}."_bg"} ); + $color = weechat::config_color( $options{"color_hotlist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}."_fg"} ); + } + }else + { + $bg = weechat::config_color( $options{"color_hotlist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}."_bg"} ); + $color = weechat::config_color( $options{"color_hotlist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}."_fg"} ); + } + } + + if ($buffer->{"current_buffer"}) + { + $color = weechat::config_color( $options{"color_current_fg"} ); + $bg = weechat::config_color( $options{"color_current_bg"} ); + } + my $color_bg = ""; + $color_bg = weechat::color(",".$bg) if ($bg ne ""); + + # create channel number for output + if ( weechat::config_string( $options{"show_prefix_bufname"} ) ne "" ) + { + $str .= $color_bg . + weechat::color( weechat::config_color( $options{"color_prefix_bufname"} ) ). + weechat::config_string( $options{"show_prefix_bufname"} ). + weechat::color("default"); + } + + if ( weechat::config_boolean( $options{"show_number"} ) eq 1 ) # on + { + if (( weechat::config_boolean( $options{"indenting_number"} ) eq 1) + && (($position eq "left") || ($position eq "right"))) + { + $str .= weechat::color("default").$color_bg + .(" " x ($max_number_digits - length(int($buffer->{"number"})))); + } + if ($old_number ne $buffer->{"number"}) + { + $str .= weechat::color( weechat::config_color( $options{"color_number"} ) ) + .$color_bg + .$buffer->{"number"} + .weechat::color("default") + .$color_bg + .weechat::color( weechat::config_color( $options{"color_number_char"} ) ) + .weechat::config_string( $options{"show_number_char"} ) + .$color_bg; + } + else + { + my $indent = ""; + $indent = ((" " x length($buffer->{"number"}))." ") if (($position eq "left") || ($position eq "right")); + $str .= weechat::color("default") + .$color_bg + .$indent; + } + } + + if (( weechat::config_integer( $options{"indenting"} ) ne 0 ) # indenting NOT off + && (($position eq "left") || ($position eq "right"))) + { + my $type = weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type"); + if (($type eq "channel") || ($type eq "private")) + { + if ( weechat::config_integer( $options{"indenting"} ) eq 1 ) + { + $str .= " "; + } + elsif ( (weechat::config_integer($options{"indenting"}) eq 2) and (weechat::config_integer($options{"indenting_number"}) eq 0) ) #under_name + { + if ( weechat::config_boolean( $options{"show_number"} ) eq 0 ) + { + $str .= " "; + }else + { + $str .= ( (" " x ( $max_number_digits - length($buffer->{"number"}) ))." " ); + } + } + } + } + + $str .= weechat::config_string( $options{"show_prefix_query"}) if (weechat::config_string( $options{"show_prefix_query"} ) ne "" and $buffer->{"type"} eq "private"); + + if (weechat::config_boolean( $options{"show_prefix"} ) eq 1) + { + my $nickname = weechat::buffer_get_string($buffer->{"pointer"}, "localvar_nick"); + if ($nickname ne "") + { + # with version >= 0.3.2, this infolist will return only nick + # with older versions, whole nicklist is returned for buffer, and this can be very slow + my $infolist_nick = weechat::infolist_get("nicklist", $buffer->{"pointer"}, "nick_".$nickname); + if ($infolist_nick ne "") + { + while (weechat::infolist_next($infolist_nick)) + { + if ((weechat::infolist_string($infolist_nick, "type") eq "nick") + && (weechat::infolist_string($infolist_nick, "name") eq $nickname)) + { + my $prefix = weechat::infolist_string($infolist_nick, "prefix"); + if (($prefix ne " ") or (weechat::config_boolean( $options{"show_prefix_empty"} ) eq 1)) + { + # with version >= 0.3.5, it is now a color name (for older versions: option name with color) + if (int($weechat_version) >= 0x00030500) + { + $str .= weechat::color(weechat::infolist_string($infolist_nick, "prefix_color")); + } + else + { + $str .= weechat::color(weechat::config_color( + weechat::config_get( + weechat::infolist_string($infolist_nick, "prefix_color")))); + } + $str .= $prefix; + } + last; + } + } + weechat::infolist_free($infolist_nick); + } + } + } + if ($buffer->{"type"} eq "channel" and weechat::config_boolean( $options{"mark_inactive"} ) eq 1 and $buffer->{"nicks_count"} == 0) + { + $str .= "("; + } + + $str .= weechat::color($color) . weechat::color(",".$bg); + + if (weechat::config_boolean( $options{"short_names"} ) eq 1) + { + if (weechat::config_integer($options{"name_size_max"}) >= 1) # check max_size of buffer name + { + $str .= encode("UTF-8", substr(decode("UTF-8", $buffer->{"short_name"}), 0, weechat::config_integer($options{"name_size_max"}))); + $str .= weechat::color(weechat::config_color( $options{"color_number_char"})).weechat::config_string($options{"name_crop_suffix"}) if (length($buffer->{"short_name"}) > weechat::config_integer($options{"name_size_max"})); + $str .= add_inactive_parentless($buffer->{"type"}, $buffer->{"nicks_count"}); + $str .= add_hotlist_count($buffer->{"pointer"}, %hotlist); + } + else + { + $str .= $buffer->{"short_name"}; + $str .= add_inactive_parentless($buffer->{"type"}, $buffer->{"nicks_count"}); + $str .= add_hotlist_count($buffer->{"pointer"}, %hotlist); + } + } + else + { + if (weechat::config_integer($options{"name_size_max"}) >= 1) # check max_size of buffer name + { + $str .= encode("UTF-8", substr(decode("UTF-8", $buffer->{"name"},), 0, weechat::config_integer($options{"name_size_max"}))); + $str .= weechat::color(weechat::config_color( $options{"color_number_char"})).weechat::config_string($options{"name_crop_suffix"}) if (length($buffer->{"name"}) > weechat::config_integer($options{"name_size_max"})); + $str .= add_inactive_parentless($buffer->{"type"}, $buffer->{"nicks_count"}); + $str .= add_hotlist_count($buffer->{"pointer"}, %hotlist); + } + else + { + $str .= $buffer->{"name"}; + $str .= add_inactive_parentless($buffer->{"type"}, $buffer->{"nicks_count"}); + $str .= add_hotlist_count($buffer->{"pointer"}, %hotlist); + } + } + if ( weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") eq "server" and weechat::config_boolean($options{"show_lag"}) eq 1) + { + my $color_lag = weechat::config_color(weechat::config_get("irc.color.item_lag_finished")); + my $min_lag = weechat::config_integer(weechat::config_get("irc.network.lag_min_show")); + my $infolist_server = weechat::infolist_get("irc_server", "", $buffer->{"short_name"}); + weechat::infolist_next($infolist_server); + my $lag = (weechat::infolist_integer($infolist_server, "lag")); + weechat::infolist_free($infolist_server); + if ( int($lag) > int($min_lag) ) + { + $lag = $lag / 1000; + $str .= weechat::color("default") . " (" . weechat::color($color_lag) . $lag . weechat::color("default") . ")"; + } + } + if (weechat::config_boolean($options{"detach_displayed_buffers"}) eq 0 + and weechat::config_boolean($options{"detach_display_window_number"}) eq 1) + { + if ($buffer->{"window"}) + { + $str .= weechat::color("default") . " (" . weechat::color(weechat::config_color( $options{"color_number"})) . $buffer->{"window"} . weechat::color("default") . ")"; + } + } + $str .= weechat::color("default"); + + if ( weechat::config_string( $options{"show_suffix_bufname"} ) ne "" ) + { + $str .= weechat::color( weechat::config_color( $options{"color_suffix_bufname"} ) ). + weechat::config_string( $options{"show_suffix_bufname"} ). + weechat::color("default"); + } + + $str .= "\n"; + $old_number = $buffer->{"number"}; + } + + # remove spaces and/or linefeed at the end + $str =~ s/\s+$//; + chomp($str); + return $str; +} + +sub add_inactive_parentless +{ +my ($buf_type, $buf_nicks_count) = @_; +my $str = ""; + if ($buf_type eq "channel" and weechat::config_boolean( $options{"mark_inactive"} ) eq 1 and $buf_nicks_count == 0) + { + $str .= weechat::color(weechat::config_color( $options{"color_number_char"})); + $str .= ")"; + } +return $str; +} + +sub add_hotlist_count +{ +my ($bufpointer, %hotlist) = @_; + +return "" if ( weechat::config_boolean( $options{"hotlist_counter"} ) eq 0 or ($weechat_version < 0x00030500)); # off +my $col_number_char = weechat::color(weechat::config_color( $options{"color_number_char"}) ); +my $str = " ".$col_number_char."("; + +# 0 = low level +if (defined $hotlist{$bufpointer."_count_00"}) +{ + my $bg = weechat::config_color( $options{"color_hotlist_low_bg"} ); + my $color = weechat::config_color( $options{"color_hotlist_low_fg"} ); + $str .= weechat::color($bg). + weechat::color($color). + $hotlist{$bufpointer."_count_00"} if ($hotlist{$bufpointer."_count_00"} ne "0"); +} + +# 1 = message +if (defined $hotlist{$bufpointer."_count_01"}) +{ + my $bg = weechat::config_color( $options{"color_hotlist_message_bg"} ); + my $color = weechat::config_color( $options{"color_hotlist_message_fg"} ); + if ($str =~ /[0-9]$/) + { + $str .= ",". + weechat::color($bg). + weechat::color($color). + $hotlist{$bufpointer."_count_01"} if ($hotlist{$bufpointer."_count_01"} ne "0"); + }else + { + $str .= weechat::color($bg). + weechat::color($color). + $hotlist{$bufpointer."_count_01"} if ($hotlist{$bufpointer."_count_01"} ne "0"); + } +} +# 2 = private +if (defined $hotlist{$bufpointer."_count_02"}) +{ + my $bg = weechat::config_color( $options{"color_hotlist_private_bg"} ); + my $color = weechat::config_color( $options{"color_hotlist_private_fg"} ); + if ($str =~ /[0-9]$/) + { + $str .= ",". + weechat::color($bg). + weechat::color($color). + $hotlist{$bufpointer."_count_02"} if ($hotlist{$bufpointer."_count_02"} ne "0"); + }else + { + $str .= weechat::color($bg). + weechat::color($color). + $hotlist{$bufpointer."_count_02"} if ($hotlist{$bufpointer."_count_02"} ne "0"); + } +} +# 3 = highlight +if (defined $hotlist{$bufpointer."_count_03"}) +{ + my $bg = weechat::config_color( $options{"color_hotlist_highlight_bg"} ); + my $color = weechat::config_color( $options{"color_hotlist_highlight_fg"} ); + if ($str =~ /[0-9]$/) + { + $str .= ",". + weechat::color($bg). + weechat::color($color). + $hotlist{$bufpointer."_count_03"} if ($hotlist{$bufpointer."_count_03"} ne "0"); + }else + { + $str .= weechat::color($bg). + weechat::color($color). + $hotlist{$bufpointer."_count_03"} if ($hotlist{$bufpointer."_count_03"} ne "0"); + } +} +$str .= $col_number_char. ")"; + +$str = "" if (weechat::string_remove_color($str, "") eq " ()"); # remove color and check for buffer with no messages +return $str; +} + +sub buffers_signal_buffer +{ + my ($data, $signal, $signal_data) = @_; + + # check for buffer_switch and set or remove detach time + if ($weechat_version >= 0x00030800) + { + if ($signal eq "buffer_switch") + { + my $pointer = weechat::hdata_get_list (weechat::hdata_get("buffer"), "gui_buffer_last_displayed"); # get switched buffer + my $current_time = time(); + if ( weechat::buffer_get_string($pointer, "localvar_type") eq "channel") + { + $buffers_timer{$pointer} = $current_time; + } + else + { + delete $buffers_timer{$pointer}; + } + } + if ($signal eq "buffer_opened") + { + my $current_time = time(); + $buffers_timer{$signal_data} = $current_time; + } + if ($signal eq "buffer_closing") + { + delete $buffers_timer{$signal_data}; + } + } + weechat::bar_item_update($SCRIPT_NAME); + return weechat::WEECHAT_RC_OK; +} + +sub buffers_signal_hotlist +{ + weechat::bar_item_update($SCRIPT_NAME); + return weechat::WEECHAT_RC_OK; +} + + +sub buffers_signal_config_whitelist +{ + @whitelist_buffers = (); + @whitelist_buffers = split( /,/, weechat::config_string( $options{"look_whitelist_buffers"} ) ); + weechat::bar_item_update($SCRIPT_NAME); + return weechat::WEECHAT_RC_OK; +} + +sub buffers_signal_config_immune_detach_buffers +{ + @immune_detach_buffers = (); + @immune_detach_buffers = split( /,/, weechat::config_string( $options{"immune_detach_buffers"} ) ); + weechat::bar_item_update($SCRIPT_NAME); + return weechat::WEECHAT_RC_OK; +} + +sub buffers_signal_config_detach_buffer_immediately +{ + @detach_buffer_immediately = (); + @detach_buffer_immediately = split( /,/, weechat::config_string( $options{"detach_buffer_immediately"} ) ); + weechat::bar_item_update($SCRIPT_NAME); + return weechat::WEECHAT_RC_OK; +} + +sub buffers_signal_config +{ + weechat::bar_item_update($SCRIPT_NAME); + return weechat::WEECHAT_RC_OK; +} + +# called when mouse click occured in buffers item: this callback returns buffer +# hash according to line of item where click occured +sub buffers_focus_buffers +{ + my %info = %{$_[1]}; + my $item_line = int($info{"_bar_item_line"}); + undef my $hash; + if (($info{"_bar_item_name"} eq $SCRIPT_NAME) && ($item_line >= 0) && ($item_line <= $#buffers_focus)) + { + $hash = $buffers_focus[$item_line]; + } + else + { + $hash = {}; + my $hash_focus = $buffers_focus[0]; + foreach my $key (keys %$hash_focus) + { + $hash->{$key} = "?"; + } + } + return $hash; +} + +# called when a mouse action is done on buffers item, to execute action +# possible actions: jump to a buffer or move buffer in list (drag & drop of buffer) +sub buffers_hsignal_mouse +{ + my ($data, $signal, %hash) = ($_[0], $_[1], %{$_[2]}); + my $current_buffer = weechat::buffer_get_integer(weechat::current_buffer(), "number"); # get current buffer number + + if ( $hash{"_key"} eq "button1" ) + { + # left mouse button + if ($hash{"number"} eq $hash{"number2"}) + { + if ( weechat::config_boolean($options{"jump_prev_next_visited_buffer"}) ) + { + if ( $current_buffer eq $hash{"number"} ) + { + weechat::command("", "/input jump_previously_visited_buffer"); + } + else + { + weechat::command("", "/buffer ".$hash{"full_name"}); + } + } + else + { + weechat::command("", "/buffer ".$hash{"full_name"}); + } + } + else + { + move_buffer(%hash) if (weechat::config_boolean($options{"mouse_move_buffer"})); + } + } + elsif ( ($hash{"_key"} eq "button2") && (weechat::config_boolean($options{"jump_prev_next_visited_buffer"})) ) + { + # right mouse button + if ( $current_buffer eq $hash{"number2"} ) + { + weechat::command("", "/input jump_next_visited_buffer"); + } + } + elsif ( $hash{"_key"} =~ /wheelup$/ ) + { + # wheel up + if (weechat::config_boolean($options{"mouse_wheel"})) + { + weechat::command("", "/buffer -1"); + } + } + elsif ( $hash{"_key"} =~ /wheeldown$/ ) + { + # wheel down + if (weechat::config_boolean($options{"mouse_wheel"})) + { + weechat::command("", "/buffer +1"); + } + } + else + { + my $infolist = weechat::infolist_get("hook", "", "command,menu"); + my $has_menu_command = weechat::infolist_next($infolist); + weechat::infolist_free($infolist); + + if ( $has_menu_command && $hash{"_key"} =~ /button2/ ) + { + if ($hash{"number"} eq $hash{"number2"}) + { + weechat::command($hash{"pointer"}, "/menu buffer1 $hash{short_name} $hash{number}"); + } + else + { + weechat::command($hash{"pointer"}, "/menu buffer2 $hash{short_name}/$hash{short_name2} $hash{number} $hash{number2}") + } + } + else + { + move_buffer(%hash) if (weechat::config_boolean($options{"mouse_move_buffer"})); + } + } +} + +sub move_buffer +{ + my %hash = @_; + my $number2 = $hash{"number2"}; + if ($number2 eq "?") + { + # if number 2 is not known (end of gesture outside buffers list), then set it + # according to mouse gesture + $number2 = "1"; + if (($hash{"_key"} =~ /gesture-right/) || ($hash{"_key"} =~ /gesture-down/)) + { + $number2 = "999999"; + if ($weechat_version >= 0x00030600) + { + my $hdata_buffer = weechat::hdata_get("buffer"); + my $last_gui_buffer = weechat::hdata_get_list($hdata_buffer, "last_gui_buffer"); + if ($last_gui_buffer) + { + $number2 = weechat::hdata_integer($hdata_buffer, $last_gui_buffer, "number") + 1; + } + } + } + } + my $ptrbuf = weechat::current_buffer(); + weechat::command($hash{"pointer"}, "/buffer move ".$number2); +} + +sub check_immune_detached_buffers +{ + my ($buffername) = @_; + foreach ( @immune_detach_buffers ){ + my $immune_buffer = weechat::string_mask_to_regex($_); + if ($buffername =~ /^$immune_buffer$/i) + { + return 1; + } + } + return 0; +} + +sub check_detach_buffer_immediately +{ + my ($buffername) = @_; + foreach ( @detach_buffer_immediately ){ + my $detach_buffer = weechat::string_mask_to_regex($_); + if ($buffername =~ /^$detach_buffer$/i) + { + return 1; + } + } + return 0; +} + +sub shutdown_cb +{ + weechat::command("", "/bar hide " . $SCRIPT_NAME) if ( weechat::config_boolean($options{"toggle_bar"}) eq 1 ); + return weechat::WEECHAT_RC_OK +} + +sub check_bar_item +{ + my $item = 0; + my $infolist = weechat::infolist_get("bar", "", ""); + while (weechat::infolist_next($infolist)) + { + my $bar_items = weechat::infolist_string($infolist, "items"); + if (index($bar_items, $SCRIPT_NAME) != -1) + { + my $name = weechat::infolist_string($infolist, "name"); + if ($name ne $SCRIPT_NAME) + { + $item = 1; + last; + } + } + } + weechat::infolist_free($infolist); + return $item; +} diff --git a/.weechat/script/plugins.xml.gz b/.weechat/script/plugins.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..89d1fa8e64d961d88a6024fd67a2102d34fba985 GIT binary patch literal 93136 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 literal 0 HcmV?d00001 diff --git a/.weechat/sec.conf b/.weechat/sec.conf new file mode 100644 index 0000000..527627f --- /dev/null +++ b/.weechat/sec.conf @@ -0,0 +1,11 @@ +# +# sec.conf -- weechat v0.4.3 +# + +[crypt] +cipher = aes256 +hash_algo = sha256 +passphrase_file = "" +salt = on + +[data] diff --git a/.weechat/weechat.conf b/.weechat/weechat.conf index fd4eb40..5d3b872 100644 --- a/.weechat/weechat.conf +++ b/.weechat/weechat.conf @@ -1,5 +1,5 @@ # -# weechat.conf -- weechat v0.4.1 +# weechat.conf -- weechat v0.4.3 # [debug] @@ -17,7 +17,13 @@ bar_more_down = "++" bar_more_left = "<<" bar_more_right = ">>" bar_more_up = "--" +buffer_auto_renumber = on buffer_notify_default = all +buffer_position = end +buffer_search_case_sensitive = off +buffer_search_force_default = off +buffer_search_regex = off +buffer_search_where = message buffer_time_format = "%H:%M:%S" color_basic_force_bold = off color_inactive_buffer = off @@ -32,8 +38,10 @@ color_real_white = off command_chars = "" confirm_quit = off day_change = on -day_change_time_format = "%a, %d %b %Y" +day_change_message_1date = "-- %a, %d %b %Y --" +day_change_message_2dates = "-- %%a, %%d %%b %%Y (%a, %d %b %Y) --" eat_newline_glitch = off +emphasized_attributes = "" highlight = "" highlight_regex = "" highlight_tags = "" @@ -45,18 +53,22 @@ hotlist_names_count = 3 hotlist_names_length = 0 hotlist_names_level = 12 hotlist_names_merged_buffers = off +hotlist_prefix = "H: " hotlist_short_names = on hotlist_sort = group_time_asc +hotlist_suffix = "" hotlist_unique_numbers = on input_cursor_scroll = 20 input_share = none input_share_overwrite = off input_undo_max = 32 item_buffer_filter = "*" +item_buffer_zoom = "!" item_time_format = "%H:%M" jump_current_to_previous_buffer = on jump_previous_buffer_when_closing = on jump_smart_back_to_buffer = on +key_bind_safe = on mouse = on mouse_timer_delay = 100 nick_prefix = "" @@ -91,10 +103,12 @@ scroll_page_percent = 100 search_text_not_found_alert = on separator_horizontal = "-" separator_vertical = "" -set_title = on +tab_width = 1 time_format = "%a, %d %b %Y %T" +window_auto_zoom = off window_separator_horizontal = on window_separator_vertical = on +window_title = "WeeChat ${info:version}" [palette] @@ -104,6 +118,7 @@ chat = default chat_bg = default chat_buffer = white chat_channel = white +chat_day_change = cyan chat_delimiters = green chat_highlight = yellow chat_highlight_bg = magenta @@ -137,6 +152,8 @@ chat_text_found_bg = lightmagenta chat_time = default chat_time_delimiters = brown chat_value = cyan +emphasized = yellow +emphasized_bg = magenta input_actions = lightgreen input_text_not_found = red nicklist_away = cyan @@ -184,6 +201,7 @@ max_visited_buffers = 50 connection_timeout = 60 gnutls_ca_file = "/etc/ssl/certs/ca-certificates.crt" gnutls_handshake_timeout = 30 +proxy_curl = "" [plugin] autoload = "*" @@ -269,8 +287,8 @@ standard.buffer = "core;weechat;1" standard.buffer = "irc;server.freenode;1" standard.buffer = "irc;freenode.#rubyonrails.fr;2" standard.buffer = "irc;freenode.#vim-fr;3" -standard.buffer = "irc;freenode.#hyggekode;4" -standard.window = "1;0;0;0;irc;freenode.#hyggekode" +standard.buffer = "script;scripts;4" +standard.window = "1;0;0;0;irc;server.freenode" standard.current = on [notify] diff --git a/.weechat/xfer.conf b/.weechat/xfer.conf index 7a639ea..29e6680 100644 --- a/.weechat/xfer.conf +++ b/.weechat/xfer.conf @@ -1,10 +1,11 @@ # -# xfer.conf -- weechat v0.4.1 +# xfer.conf -- weechat v0.4.3 # [look] auto_open_buffer = on progress_bar_size = 20 +pv_tags = "notify_private" [color] status_aborted = lightred @@ -29,6 +30,7 @@ timeout = 300 auto_accept_chats = off auto_accept_files = off auto_accept_nicks = "" +auto_check_crc32 = off auto_rename = on auto_resume = on convert_spaces = on