]> git.rmz.io Git - dotfiles.git/commitdiff
update weechat config
authorSamir Benmendil <samir.benmendil@gmail.com>
Tue, 19 Nov 2013 10:15:25 +0000 (11:15 +0100)
committerSamir Benmendil <samir.benmendil@gmail.com>
Tue, 19 Nov 2013 10:15:25 +0000 (11:15 +0100)
21 files changed:
weechat/alias.conf
weechat/aspell.conf
weechat/buffers.conf [new file with mode: 0644]
weechat/charset.conf
weechat/irc.conf
weechat/iset.conf
weechat/logger.conf
weechat/perl/autoload/buffers.pl [new symlink]
weechat/perl/autoload/highmon.pl [new symlink]
weechat/perl/buffers.pl [new file with mode: 0644]
weechat/perl/highmon.pl [new file with mode: 0644]
weechat/plugins.conf
weechat/python/allquery.py [new file with mode: 0644]
weechat/python/autoload/allquery.py [new symlink]
weechat/relay.conf
weechat/rmodifier.conf
weechat/script.conf
weechat/sec.conf [new file with mode: 0644]
weechat/weechat.conf
weechat/weechat.log [deleted file]
weechat/xfer.conf

index a8018d0148022bb9b45b17cb7f067c03c366a17c..d78b6937cfecf109a3872c116d05705da5efef33 100644 (file)
@@ -1,5 +1,5 @@
 #
-# alias.conf -- weechat v0.4.1
+# alias.conf -- weechat v0.4.2
 #
 
 [cmd]
index 2cf1f7d1a753eea7c3f7f53269b7327ff5334167..cb39cb9a5c91dc5455797eba8790c64fb89e8ae4 100644 (file)
@@ -1,9 +1,10 @@
 #
-# aspell.conf -- weechat v0.4.1
+# aspell.conf -- weechat v0.4.2
 #
 
-[look]
-color = lightred
+[color]
+misspelled = lightred
+suggestions = default
 
 [check]
 commands = "ame,amsg,away,command,cycle,kick,kickban,me,msg,notice,part,query,quit,topic"
diff --git a/weechat/buffers.conf b/weechat/buffers.conf
new file mode 100644 (file)
index 0000000..83d0c5b
--- /dev/null
@@ -0,0 +1,65 @@
+#
+# buffers.conf -- weechat v0.4.2
+#
+
+[color]
+current_bg = 31
+current_fg = *white
+default_bg = default
+default_fg = default
+hotlist_highlight_bg = default
+hotlist_highlight_fg = 163
+hotlist_low_bg = default
+hotlist_low_fg = white
+hotlist_message_bg = default
+hotlist_message_fg = 229
+hotlist_private_bg = default
+hotlist_private_fg = 121
+none_channel_bg = default
+none_channel_fg = default
+number = lightgreen
+number_char = 245
+queries_default_bg = default
+queries_default_fg = default
+queries_highlight_bg = default
+queries_highlight_fg = default
+queries_message_bg = default
+queries_message_fg = default
+whitelist_default_bg = default
+whitelist_default_fg = default
+whitelist_highlight_bg = default
+whitelist_highlight_fg = default
+whitelist_low_bg = default
+whitelist_low_fg = default
+whitelist_message_bg = default
+whitelist_message_fg = default
+whitelist_private_bg = default
+whitelist_private_fg = default
+
+[look]
+core_to_front = off
+detach = 0
+detach_buffer_immediately = ""
+detach_display_window_number = off
+detach_displayed_buffers = on
+detach_free_content = off
+detach_query = off
+hide_merged_buffers = none
+hotlist_counter = off
+immune_detach_buffers = ""
+indenting = off
+indenting_number = on
+jump_prev_next_visited_buffer = off
+mark_inactive = off
+name_crop_suffix = "+"
+name_size_max = 0
+number_char = "."
+prefix = off
+prefix_empty = on
+prefix_for_query = ""
+short_names = on
+show_lag = off
+show_number = on
+sort = number
+toogle_bar = on
+whitelist_buffers = ""
index 050c5ec5922757f430fce0d1506b20d43e5065f9..569434b3d9da233d8a72677aa4f56f3dd84fb68c 100644 (file)
@@ -1,5 +1,5 @@
 #
-# charset.conf -- weechat v0.4.1
+# charset.conf -- weechat v0.4.2
 #
 
 [default]
index a90bc3759e4d95be76f4d57a35afb985b03aad7f..8a92c992f95f68ed1fc5ccc25ac29c78d59d64ca 100644 (file)
@@ -1,12 +1,12 @@
 #
-# irc.conf -- weechat v0.4.1
+# irc.conf -- weechat v0.4.2
 #
 
 [look]
 buffer_switch_autojoin = on
 buffer_switch_join = on
 color_nicks_in_names = off
-color_nicks_in_nicklist = on
+color_nicks_in_nicklist = off
 color_nicks_in_server_messages = on
 color_pv_nick_like_channel = on
 ctcp_time_format = "%a, %d %b %Y %T %z"
@@ -34,16 +34,19 @@ 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
 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
@@ -100,7 +103,7 @@ autoreconnect = on
 autoreconnect_delay = 10
 autorejoin = off
 autorejoin_delay = 30
-away_check = 0
+away_check = 5
 away_check_max_nicks = 25
 capabilities = ""
 command = ""
index 6030649d6ded036fab3f51c543e922444f85f22b..8e476ccc5de84011d52f4d8ca2beb61927ac3b50 100644 (file)
@@ -1,5 +1,5 @@
 #
-# iset.conf -- weechat v0.4.1
+# iset.conf -- weechat v0.4.2
 #
 
 [color]
index b39510439ae312c736b424b101d63c6192044d43..d785f6fa9b260c59254bd048e134db8c0a9df547 100644 (file)
@@ -1,5 +1,5 @@
 #
-# logger.conf -- weechat v0.4.1
+# logger.conf -- weechat v0.4.2
 #
 
 [look]
diff --git a/weechat/perl/autoload/buffers.pl b/weechat/perl/autoload/buffers.pl
new file mode 120000 (symlink)
index 0000000..445dc3c
--- /dev/null
@@ -0,0 +1 @@
+../buffers.pl
\ No newline at end of file
diff --git a/weechat/perl/autoload/highmon.pl b/weechat/perl/autoload/highmon.pl
new file mode 120000 (symlink)
index 0000000..2eb5e1e
--- /dev/null
@@ -0,0 +1 @@
+../highmon.pl
\ No newline at end of file
diff --git a/weechat/perl/buffers.pl b/weechat/perl/buffers.pl
new file mode 100644 (file)
index 0000000..922415c
--- /dev/null
@@ -0,0 +1,1319 @@
+#
+# Copyright (C) 2008-2013 Sebastien Helleu <flashcode@flashtux.org>
+# Copyright (C) 2011-2013 Nils G <weechatter@arcor.de>
+#
+# 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 <http://www.gnu.org/licenses/>.
+#
+#
+# Display sidebar with list of buffers.
+#
+# History:
+# 2013-11-07, Sebastien Helleu <flashcode@flashtux.org>:
+#    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 <anti.teamidiot.de>:
+#     v3.7: call menu on right mouse if menu script is loaded.
+# 2012-10-06, nils_2 <weechatter@arcor.de>:
+#     v3.6: add new option "hotlist_counter" (idea by torque).
+# 2012-06-02, nils_2 <weechatter@arcor.de>:
+#     v3.5: add values "server|channel|private|all|keepserver|none" to option "hide_merged_buffers" (suggested by dominikh).
+# 2012-05-25, nils_2 <weechatter@arcor.de>:
+#     v3.4: add new option "show_lag".
+# 2012-04-07, Sebastien Helleu <flashcode@flashtux.org>:
+#     v3.3: fix truncation of wide chars in buffer name (option name_size_max) (bug #36034)
+# 2012-03-15, nils_2 <weechatter@arcor.de>:
+#     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 <flashcode@flashtux.org>:
+#     v3.1: fix reload of config file
+# 2012-01-29, nils_2 <weechatter@arcor.de>:
+#     v3.0: fix: buffers did not update directly during window_switch (reported by FiXato)
+# 2012-01-29, nils_2 <weechatter@arcor.de>:
+#     v2.9: add options "name_size_max" and "name_crop_suffix"
+# 2012-01-08, nils_2 <weechatter@arcor.de>:
+#     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 <flashcode@flashtux.org>:
+#     v2.7: fix regex lookup in whitelist buffers list
+# 2011-12-04, nils_2 <weechatter@arcor.de>:
+#     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 <weechatter@arcor.de>:
+#     v2.5: add new options "show_number_char" and "color_number_char",
+#           add help-description for options
+# 2011-08-24, Sebastien Helleu <flashcode@flashtux.org>:
+#     v2.4: add mouse support
+# 2011-06-06, nils_2 <weechatter@arcor.de>:
+#     v2.3: added: missed option "color_whitelist_default"
+# 2011-03-23, Sebastien Helleu <flashcode@flashtux.org>:
+#     v2.2: fix color of nick prefix with WeeChat >= 0.3.5
+# 2011-02-13, nils_2 <weechatter@arcor.de>:
+#     v2.1: add options "color_whitelist_*"
+# 2010-10-05, Sebastien Helleu <flashcode@flashtux.org>:
+#     v2.0: add options "sort" and "show_number"
+# 2010-04-12, Sebastien Helleu <flashcode@flashtux.org>:
+#     v1.9: replace call to log() by length() to align buffer numbers
+# 2010-04-02, Sebastien Helleu <flashcode@flashtux.org>:
+#     v1.8: fix bug with background color and option indenting_number
+# 2010-04-02, Helios <helios@efemes.de>:
+#     v1.7: add indenting_number option
+# 2010-02-25, m4v <lambdae2@gmail.com>:
+#     v1.6: add option to hide empty prefixes
+# 2010-02-12, Sebastien Helleu <flashcode@flashtux.org>:
+#     v1.5: add optional nick prefix for buffers like IRC channels
+# 2009-09-30, Sebastien Helleu <flashcode@flashtux.org>:
+#     v1.4: remove spaces for indenting when bar position is top/bottom
+# 2009-06-14, Sebastien Helleu <flashcode@flashtux.org>:
+#     v1.3: add option "hide_merged_buffers"
+# 2009-06-14, Sebastien Helleu <flashcode@flashtux.org>:
+#     v1.2: improve display with merged buffers
+# 2009-05-02, Sebastien Helleu <flashcode@flashtux.org>:
+#     v1.1: sync with last API changes
+# 2009-02-21, Sebastien Helleu <flashcode@flashtux.org>:
+#     v1.0: remove timer used to update bar item first time (not needed any more)
+# 2009-02-17, Sebastien Helleu <flashcode@flashtux.org>:
+#     v0.9: fix bug with indenting of private buffers
+# 2009-01-04, Sebastien Helleu <flashcode@flashtux.org>:
+#     v0.8: update syntax for command /set (comments)
+# 2008-10-20, Jiri Golembiovsky <golemj@gmail.com>:
+#     v0.7: add indenting option
+# 2008-10-01, Sebastien Helleu <flashcode@flashtux.org>:
+#     v0.6: add default color for buffers, and color for current active buffer
+# 2008-09-18, Sebastien Helleu <flashcode@flashtux.org>:
+#     v0.5: fix color for "low" level entry in hotlist
+# 2008-09-18, Sebastien Helleu <flashcode@flashtux.org>:
+#     v0.4: rename option "show_category" to "short_names",
+#           remove option "color_slash"
+# 2008-09-15, Sebastien Helleu <flashcode@flashtux.org>:
+#     v0.3: fix bug with priority in hotlist (var not defined)
+# 2008-09-02, Sebastien Helleu <flashcode@flashtux.org>:
+#     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 <flashcode@flashtux.org>:
+#     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 $version = "4.2";
+
+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",     # catch all left mouse button gestures
+                           "\@item(buffers):button2*"     => "hsignal:buffers_mouse");    # catch all right mouse button gestures
+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 <flashcode\@flashtux.org>", $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_*", "buffers_signal_buffer", "");
+weechat::hook_signal("window_switch", "buffers_signal_buffer", "");
+weechat::hook_signal("hotlist_*", "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", "");
+    $Hooks{timer_detach} = weechat::hook_timer( weechat::config_integer( $options{"detach"}) * 1000, 60, 0, "buffers_signal_buffer", "") if ( weechat::config_integer( $options{"detach"}) > 0 );
+}
+
+    weechat::hook_config("buffers.look.show_lag", "hook_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", "") if ( weechat::config_boolean($options{"show_lag"}) );
+
+# -------------------------------- [ 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 .= $_ .",";
+        }
+        chop $buffers_list;                                                               # remove last ","
+    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_buffer", "");
+    }
+    weechat::bar_item_update($SCRIPT_NAME);
+    return weechat::WEECHAT_RC_OK;
+}
+
+sub hook_timer_lag
+{
+    my $lag = $_[2];
+    if ( $lag eq 0 )
+    {
+        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", "", "", ""],
+);
+
+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 servername. 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 differnt 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 channel number in front of buffername", "", 0, 0,"on", "on", 0, "", "", "buffers_signal_config", "", "", ""],
+ "show_number_char"     =>      ["number_char", "string", "display a char behind channel number", "", 0, 0,".", ".", 0, "", "", "buffers_signal_config", "", "", ""],
+ "show_prefix"          =>      ["prefix", "boolean", "displays your prefix for channel in front of buffername", "", 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 channel 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 detatch. Allows \"*\" wildcard. Ex: \"BitlBee,freenode.*\"", "", 0, 0,"", "", 0, "", "", "buffers_signal_config_immune_detach_buffers", "", "", ""],
+ "detach_query"         =>      ["detach_query", "boolean", "query buffer will be detachted", "", 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 parentesis around them. An inactive buffer will not be detached.", "", 0, 0,"off", "off", 0, "", "", "buffers_signal_config", "", "", ""],
+ "toggle_bar"           =>      ["toogle_bar", "boolean", "if option is \"on\", buffers bar will hide/show when script is (un)loaded.", "", 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))
+    {
+        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_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 "")
+                {
+                    my $version = weechat::info_get("version_number", "");
+                    $version = 0 if ($version eq "");
+                    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($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 .= "\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_integer($options{"jump_prev_next_visited_buffer"}) eq 1 )
+            {
+                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);
+        }
+    }
+    elsif ( ($hash{"_key"} eq "button2") && (weechat::config_integer($options{"jump_prev_next_visited_buffer"}) eq 1) )# right mouse button
+    {
+        if ( $current_buffer eq $hash{"number2"} )
+        {
+            weechat::command("","/input jump_next_visited_buffer");
+        }
+    }
+    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);
+        }
+    }
+}
+
+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 = "999999";
+      $number2 = "1" if (($hash{"_key"} =~ /gesture-left/) || ($hash{"_key"} =~ /gesture-up/));
+  }
+  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/perl/highmon.pl b/weechat/perl/highmon.pl
new file mode 100644 (file)
index 0000000..967f973
--- /dev/null
@@ -0,0 +1,1083 @@
+#
+# highmon.pl - Highlight Monitoring for weechat 0.3.0
+# Version 2.3.3.2
+#
+# Add 'Highlight Monitor' buffer/bar to log all highlights in one spot
+#
+# Usage:
+# /highmon [help] | [monitor [channel [server]]] | [clean default|orphan|all]
+#  Command wrapper for highmon commands
+#
+# /highmon clean default|orphan|all will clean the config section of default 'on' entries,
+#  channels you are no longer joined, or both
+#
+# /highmon monitor [channel] [server] is used to toggle a highlight monitoring on and off, this
+#  can be used in the channel buffer for the channel you wish to toggle, or be given
+#  with arguments e.g. /highmon monitor #weechat freenode
+#
+# /set plugins.var.perl.highmon.alignment
+#  The config setting "alignment" can be changed to;
+#  "channel", "schannel", "nchannel", "channel,nick", "schannel,nick", "nchannel,nick"
+#  to change how the monitor appears
+#  The 'channel'  value will show: "#weechat"
+#  The 'schannel' value will show: "6"
+#  The 'nchannel' value will show: "6:#weechat"
+#
+# /set plugins.var.perl.highmon.short_names
+#  Setting this to 'on' will trim the network name from highmon, ala buffers.pl
+#
+# /set plugins.var.perl.highmon.merge_private
+#  Setting this to 'on' will merge private messages to highmon's display
+#
+# /set plugins.var.perl.highmon.color_buf
+#  This turns colored buffer names on or off, you can also set a single fixed color by using a weechat color name.
+#  This *must* be a valid color name, or weechat will likely do unexpected things :)
+#
+# /set plugins.var.perl.highmon.hotlist_show
+#  Setting this to 'on' will let the highmon buffer appear in hotlists
+#  (status bar/buffer.pl)
+#
+# /set plugins.var.perl.highmon.away_only
+#  Setting this to 'on' will only put messages in the highmon buffer when
+#  you set your status to away
+#
+# /set plugins.var.perl.highmon.logging
+#  Toggles logging status for highmon buffer (default: off)
+#
+# /set plugins.var.perl.highmon.output
+#  Changes where output method of highmon; takes either "bar" or "buffer" (default; buffer)
+# /set plugins.var.perl.highmon.bar_lines
+#  Changes the amount of lines the output bar will hold.
+#  (Only appears once output has been set to bar, defaults to 10)
+# /set plugins.var.perl.highmon.bar_scrolldown
+#  Toggles the bar scrolling at the bottom when new highlights are received
+#  (Only appears once output has been set to bar, defaults to off)
+#
+# /set plugins.var.perl.highmon.nick_prefix
+# /set plugins.var.perl.highmon.nick_suffix
+#  Sets the prefix and suffix chars in the highmon buffer
+#  (Defaults to <> if nothing set, and blank if there is)
+#
+# servername.#channel
+#  servername is the internal name for the server (set when you use /server add)
+#  #channel is the channel name, (where # is whatever channel type that channel happens to be)
+#
+
+# Bugs and feature requests at: https://github.com/KenjiE20/highmon
+
+# History:
+# 2013-10-22, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v2.3.3.2:       -fix: Typo in fix command
+# 2013-10-10, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v2.3.3.1:       -fix: Typo in closed buffer warning
+# 2013-10-07, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v2.3.3: -add: Warning and fixer for accidental buffer closes
+# 2013-01-15, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v2.3.2: -fix: Let bar output use the string set in weechat's config option
+#                      -add: github info
+# 2012-04-15, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v2.3.1: -fix: Colour tags in bar timestamp string
+# 2012-02-28, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v2.3:   -feature: Added merge_private option to display private messages (default: off)
+#                      -fix: Channel name colours now show correctly when set to on
+# 2011-08-07, Sitaktif <romainchossart_at_gmail.com>:
+#      v2.2.1: -feature: Add "bar_scrolldown" option to have the bar display the latest hl at anytime
+#                      -fix: Set up bar-specific config at startup if 'output' is already configured as 'bar'
+# 2010-12-22, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v2.2:   -change: Use API instead of config to find channel colours, ready for 0.3.4 and 256 colours
+# 2010-12-13, idl0r & KenjiE20 <longbow@longbowslair.co.uk>:
+#      v2.1.3: -fix: perl errors caused by bar line counter
+#                      -fix: Add command list to inbuilt help
+# 2010-09-30, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v2.1.2: -fix: logging config was not correctly toggling back on (thanks to sleo for noticing)
+#                      -version sync w/ chanmon
+# 2010-08-27, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v2.1: -feature: Add 'nchannel' option to alignment to display buffer and name
+# 2010-04-25, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v2.0:   Release as version 2.0
+# 2010-04-24, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v1.9:   Rewrite for v2.0
+#              Bring feature set in line with chanmon 2.0
+#              -code change: Made more subs to shrink the code down in places
+#              -fix: Stop highmon attempting to double load/hook
+#              -fix: Add version dependant check for away status
+# 2010-01-25, KenjiE20 <longbow@longbowslair.co.uk>:
+#       v1.7:   -fixture: Let highmon be aware of nick_prefix/suffix
+#                       and allow custom prefix/suffix for chanmon buffer
+#                       (Defaults to <> if nothing set, and blank if there is)
+#               (Thanks to m4v for these)
+# 2009-09-07, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v1.6:   -feature: colored buffer names
+#              -change: version sync with chanmon
+# 2009-09-05, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v1.2:   -fix: disable buffer highlight
+# 2009-09-02, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v.1.1.1 -change: Stop unsightly text block on '/help'
+# 2009-08-10, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v1.1:   In-client help added
+# 2009-08-02, KenjiE20 <longbow@longbowslair.co.uk>:
+#      v1.0:   Initial Public Release
+
+# Copyright (c) 2009 by KenjiE20 <longbow@longbowslair.co.uk>
+#
+# 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 <http://www.gnu.org/licenses/>.
+#
+
+@bar_lines = ();
+@bar_lines_time = ();
+# Replicate info earlier for in-client help
+
+$highmonhelp = weechat::color("bold")."/highmon [help] | [monitor [channel [server]]] | [clean default|orphan|all]".weechat::color("-bold")."
+ Command wrapper for highmon commands
+
+".weechat::color("bold")."/highmon clean default|orphan|all".weechat::color("-bold")." will clean the config section of default 'on' entries, channels you are no longer joined, or both
+
+".weechat::color("bold")."/highmon monitor [channel] [server]".weechat::color("-bold")." is used to toggle a highlight monitoring on and off, this can be used in the channel buffer for the channel you wish to toggle, or be given with arguments e.g. /highmon monitor #weechat freenode
+
+".weechat::color("bold")."/set plugins.var.perl.highmon.alignment".weechat::color("-bold")."
+ The config setting \"alignment\" can be changed to;
+ \"channel\", \"schannel\", \"nchannel\", \"channel,nick\", \"schannel,nick\", \"nchannel,nick\"
+ to change how the monitor appears
+ The 'channel'  value will show: \"#weechat\"
+ The 'schannel' value will show: \"6\"
+ The 'nchannel' value will show: \"6:#weechat\"
+
+".weechat::color("bold")."/set plugins.var.perl.highmon.short_names".weechat::color("-bold")."
+ Setting this to 'on' will trim the network name from highmon, ala buffers.pl
+
+".weechat::color("bold")."/set plugins.var.perl.highmon.merge_private".weechat::color("-bold")."
+ Setting this to 'on' will merge private messages to highmon's display
+
+".weechat::color("bold")."/set plugins.var.perl.highmon.color_buf".weechat::color("-bold")."
+ This turns colored buffer names on or off, you can also set a single fixed color by using a weechat color name.
+ This ".weechat::color("bold")."must".weechat::color("-bold")." be a valid color name, or weechat will likely do unexpected things :)
+
+".weechat::color("bold")."/set plugins.var.perl.highmon.hotlist_show".weechat::color("-bold")."
+Setting this to 'on' will let the highmon buffer appear in hotlists (status bar/buffer.pl)
+
+".weechat::color("bold")."/set plugins.var.perl.highmon.away_only".weechat::color("-bold")."
+Setting this to 'on' will only put messages in the highmon buffer when you set your status to away
+
+".weechat::color("bold")."/set plugins.var.perl.highmon.logging".weechat::color("-bold")."
+ Toggles logging status for highmon buffer (default: off)
+
+".weechat::color("bold")."/set plugins.var.perl.highmon.output".weechat::color("-bold")."
+ Changes where output method of highmon; takes either \"bar\" or \"buffer\" (default; buffer)
+".weechat::color("bold")."/set plugins.var.perl.highmon.bar_lines".weechat::color("-bold")."
+ Changes the amount of lines the output bar will hold.
+ (Only appears once output has been set to bar, defaults to 10)
+".weechat::color("bold")."/set plugins.var.perl.highmon.bar_scrolldown".weechat::color("-bold")."
+ Toggles the bar scrolling at the bottom when new highlights are received
+ (Only appears once output has been set to bar, defaults to off)
+
+".weechat::color("bold")."/set plugins.var.perl.highmon.nick_prefix".weechat::color("-bold")."
+".weechat::color("bold")."/set plugins.var.perl.highmon.nick_suffix".weechat::color("-bold")."
+ Sets the prefix and suffix chars in the highmon buffer
+ (Defaults to <> if nothing set, and blank if there is)
+
+".weechat::color("bold")."servername.#channel".weechat::color("-bold")."
+ servername is the internal name for the server (set when you use /server add)
+ #channel is the channel name, (where # is whatever channel type that channel happens to be)";
+# Print verbose help
+sub print_help
+{
+       weechat::print("", "\t".weechat::color("bold")."Highmon Help".weechat::color("-bold")."\n\n");
+       weechat::print("", "\t".$highmonhelp);
+       return weechat::WEECHAT_RC_OK;
+}
+
+# Bar item build
+sub highmon_bar_build
+{
+       # Get max lines
+       $max_lines = weechat::config_get_plugin("bar_lines");
+       $max_lines = $max_lines ? $max_lines : 10;
+       $str = '';
+       $align_num = 0;
+       $count = 0;
+       # Keep lines within max
+       while ($#bar_lines > $max_lines)
+       {
+               shift(@bar_lines);
+               shift(@bar_lines_time);
+       }
+       # So long as we have some lines, build a string
+       if (@bar_lines)
+       {
+               # Build loop
+               $sep = " ".weechat::config_string(weechat::config_get("weechat.look.prefix_suffix"))." ";
+               foreach(@bar_lines)
+               {
+                       # Find max align needed
+                       $prefix_num = (index(weechat::string_remove_color($_, ""), $sep));
+                       $align_num = $prefix_num if ($prefix_num > $align_num);
+               }
+               foreach(@bar_lines)
+               {
+                       # Get align for this line
+                       $prefix_num = (index(weechat::string_remove_color($_, ""), $sep));
+
+                       # Make string
+                       $str = $str.$bar_lines_time[$count]." ".(" " x ($align_num - $prefix_num)).$_."\n";
+                       # Increment count for sync with time list
+                       $count++;
+               }
+       }
+       return $str;
+}
+
+# Make a new bar
+sub highmon_bar_open
+{
+       # Make the bar item
+       weechat::bar_item_new("highmon", "highmon_bar_build", "");
+
+       $highmon_bar = weechat::bar_new ("highmon", "off", 100, "root", "", "bottom", "vertical", "vertical", 0, 0, "default", "cyan", "default", "on", "highmon");
+
+       return weechat::WEECHAT_RC_OK;
+}
+# Close bar
+sub highmon_bar_close
+{
+       # Find if bar exists
+       $highmon_bar = weechat::bar_search("highmon");
+       # If is does, close it
+       if ($highmon_bar ne "")
+       {
+               weechat::bar_remove($highmon_bar);
+       }
+
+       # Find if bar item exists
+       $highmon_bar_item = weechat::bar_item_search("highmon_bar");
+       # If is does, close it
+       if ($highmon_bar_item ne "")
+       {
+               weechat::bar_remove($highmon_bar_item);
+       }
+
+       @bar_lines = ();
+       return weechat::WEECHAT_RC_OK;
+}
+
+# Make a new buffer
+sub highmon_buffer_open
+{
+       # Search for pre-existing buffer
+       $highmon_buffer = weechat::buffer_search("perl", "highmon");
+
+       # Make a new buffer
+       if ($highmon_buffer eq "")
+       {
+               $highmon_buffer = weechat::buffer_new("highmon", "highmon_buffer_input", "", "highmon_buffer_close", "");
+       }
+
+       # Turn off notify, highlights
+       if ($highmon_buffer ne "")
+       {
+               if (weechat::config_get_plugin("hotlist_show" eq "off"))
+               {
+                       weechat::buffer_set($highmon_buffer, "notify", "0");
+               }
+               weechat::buffer_set($highmon_buffer, "highlight_words", "-");
+               weechat::buffer_set($highmon_buffer, "title", "Highlight Monitor");
+               # Set no_log
+               if (weechat::config_get_plugin("logging") eq "off")
+               {
+                       weechat::buffer_set($highmon_buffer, "localvar_set_no_log", "1");
+               }
+       }
+       return weechat::WEECHAT_RC_OK;
+}
+# Buffer input has no action
+sub highmon_buffer_input
+{
+       return weechat::WEECHAT_RC_OK;
+}
+# Close up
+sub highmon_buffer_close
+{
+       $highmon_buffer = "";
+       # If user hasn't changed output style warn user
+       if (weechat::config_get_plugin("output") eq "buffer")
+       {
+               weechat::print("", "\tHighmon buffer has been closed but output is still set to buffer, unusual results may occur. To recreate the buffer use ".weechat::color("bold")."/highmon fix".weechat::color("-bold"));
+       }
+       return weechat::WEECHAT_RC_OK;
+}
+
+# Highmon command wrapper
+sub highmon_command_cb
+{
+       $data = $_[0];
+       $buffer = $_[1];
+       $args = $_[2];
+       my $cmd = '';
+       my $arg = '';
+
+       if ($args ne "")
+       {
+               # Split argument up
+               @arg_array = split(/ /,$args);
+               # Take first as command
+               $cmd = shift(@arg_array);
+               # Rebuild string to pass to subs
+               if (@arg_array)
+               {
+                       $arg = join(" ", @arg_array);
+               }
+       }
+
+       # Help command
+       if ($cmd eq "" || $cmd eq "help")
+       {
+               print_help();
+       }
+       # /monitor command
+       elsif ($cmd eq "monitor")
+       {
+               highmon_toggle($data, $buffer, $arg);
+       }
+       # /highclean command
+       elsif ($cmd eq "clean")
+       {
+               highmon_config_clean($data, $buffer, $arg);
+       }
+       # Fix closed buffer
+       elsif ($cmd eq "fix")
+       {
+               if (weechat::config_get_plugin("output") eq "buffer" && $highmon_buffer eq "")
+               {
+                       highmon_buffer_open();
+               }
+       }
+       return weechat::WEECHAT_RC_OK;
+}
+
+# Clean up config entries
+sub highmon_config_clean
+{
+       $data = $_[0];
+       $buffer = $_[1];
+       $args = $_[2];
+
+       # Don't do anything if bad option given
+       if ($args ne "default" && $args ne "orphan"  && $args ne "all")
+       {
+               weechat::print("", "\thighmon.pl: Unknown option");
+               return weechat::WEECHAT_RC_OK;
+       }
+
+       @chans = ();
+       # Load an infolist of highmon options
+       $infolist = weechat::infolist_get("option", "", "*highmon*");
+       while (weechat::infolist_next($infolist))
+       {
+               $name = weechat::infolist_string($infolist, "option_name");
+               $name =~ s/perl\.highmon\.(\w*)\.([#&\+!])(.*)/$1.$2$3/;
+               if ($name =~ /^(.*)\.([#&\+!])(.*)$/)
+               {
+                       $action = 0;
+                       # Clean up all 'on's
+                       if ($args eq "default" || $args eq "all")
+                       {
+                               # If value in config is "on"
+                               if (weechat::config_get_plugin($name) eq "on")
+                               {
+                                       # Unset and if successful flag as changed
+                                       $rc = weechat::config_unset_plugin($name);
+                                       if ($rc eq weechat::WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED)
+                                       {
+                                               $action = 1;
+                                       }
+                               }
+                       }
+                       # Clean non joined
+                       if ($args eq "orphan" || $args eq "all")
+                       {
+                               # If we can't find the buffer for this entry
+                               if (weechat::buffer_search("irc", $name) eq "")
+                               {
+                                       # Unset and if successful flag as changed
+                                       $rc = weechat::config_unset_plugin($name);
+                                       if ($rc eq weechat::WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED)
+                                       {
+                                               $action = 1;
+                                       }
+                               }
+                       }
+                       # Add changed entry names to list
+                       push (@chans, $name) if ($action);
+               }
+       }
+       weechat::infolist_free($infolist);
+       # If channels were cleaned from config
+       if (@chans)
+       {
+               # If only one entry
+               if (@chans == 1)
+               {
+                       $str = "\thighmon.pl: Cleaned ".@chans." entry from the config:";
+               }
+               else
+               {
+                       $str = "\thighmon.pl: Cleaned ".@chans." entries from the config:";
+               }
+               # Build a list of channels
+               foreach(@chans)
+               {
+                       $str = $str." ".$_;
+               }
+               # Print what happened
+               weechat::print("",$str);
+       }
+       # Config seemed to be clean
+       else
+       {
+               weechat::print("", "\thighmon.pl: No entries removed");
+       }
+       return weechat::WEECHAT_RC_OK;
+}
+
+# Check config elements
+sub highmon_config_init
+{
+       # Alignment default
+       if (!(weechat::config_is_set_plugin ("alignment")))
+       {
+               weechat::config_set_plugin("alignment", "channel");
+       }
+       if (weechat::config_get_plugin("alignment") eq "")
+       {
+               weechat::config_set_plugin("alignment", "none");
+       }
+
+       # Short name default
+       if (!(weechat::config_is_set_plugin ("short_names")))
+       {
+               weechat::config_set_plugin("short_names", "off");
+       }
+
+       # Coloured names default
+       if (!(weechat::config_is_set_plugin ("color_buf")))
+       {
+               weechat::config_set_plugin("color_buf", "on");
+       }
+
+       # Hotlist show default
+       if (!(weechat::config_is_set_plugin ("hotlist_show")))
+       {
+               weechat::config_set_plugin("hotlist_show", "off");
+       }
+
+       # Away only default
+       if (!(weechat::config_is_set_plugin ("away_only")))
+       {
+               weechat::config_set_plugin("away_only", "off");
+       }
+
+       # highmon log default
+       if (!(weechat::config_is_set_plugin ("logging")))
+       {
+               weechat::config_set_plugin("logging", "off");
+       }
+
+       # Output default
+       if (!(weechat::config_is_set_plugin ("output")))
+       {
+               weechat::config_set_plugin("output", "buffer");
+       }
+
+       # Private message merging
+       if (!(weechat::config_is_set_plugin ("merge_private")))
+       {
+               weechat::config_set_plugin("merge_private", "off");
+       }
+
+       # Set bar config in case output was set to "bar" before even changing the setting
+       if (weechat::config_get_plugin("output") eq "bar")
+       {
+               # Output bar lines default
+               if (!(weechat::config_is_set_plugin ("bar_lines")))
+               {
+                       weechat::config_set_plugin("bar_lines", "10");
+               }
+               if (!(weechat::config_is_set_plugin ("bar_scrolldown")))
+               {
+                       weechat::config_set_plugin("bar_scrolldown", "off");
+               }
+       }
+
+       # Check for exisiting prefix/suffix chars, and setup accordingly
+       $prefix = weechat::config_get("irc.look.nick_prefix");
+       $prefix = weechat::config_string($prefix);
+       $suffix = weechat::config_get("irc.look.nick_suffix");
+       $suffix = weechat::config_string($suffix);
+
+       if (!(weechat::config_is_set_plugin("nick_prefix")))
+       {
+               if ($prefix eq "" && $suffix eq "")
+               {
+                       weechat::config_set_plugin("nick_prefix", "<");
+               }
+               else
+               {
+                       weechat::config_set_plugin("nick_prefix", "");
+               }
+       }
+
+       if (!(weechat::config_is_set_plugin("nick_suffix")))
+       {
+               if ($prefix eq "" && $suffix eq "")
+               {
+                       weechat::config_set_plugin("nick_suffix", ">");
+               }
+               else
+               {
+                       weechat::config_set_plugin("nick_suffix", "");
+               }
+       }
+}
+
+# Get config updates
+sub highmon_config_cb
+{
+       $point = $_[0];
+       $name = $_[1];
+       $value = $_[2];
+
+       $name =~ s/^plugins\.var\.perl\.highmon\.//;
+
+       # Set logging on buffer
+       if ($name eq "logging")
+       {
+               # Search for pre-existing buffer
+               $highmon_buffer = weechat::buffer_search("perl", "highmon");
+               if ($value eq "off")
+               {
+                       weechat::buffer_set($highmon_buffer, "localvar_set_no_log", "1");
+               }
+               else
+               {
+                       weechat::buffer_set($highmon_buffer, "localvar_del_no_log", "");
+               }
+       }
+       # Output changer
+       elsif ($name eq "output")
+       {
+               if ($value eq "bar")
+               {
+                       # Search for pre-existing buffer
+                       $highmon_buffer = weechat::buffer_search("perl", "highmon");
+                       # Close if it exists
+                       if ($highmon_buffer ne "")
+                       {
+                               weechat::buffer_close($highmon_buffer)
+                       }
+
+                       # Output bar lines default
+                       if (!(weechat::config_is_set_plugin ("bar_lines")))
+                       {
+                               weechat::config_set_plugin("bar_lines", "10");
+                       }
+                       if (!(weechat::config_is_set_plugin ("bar_scrolldown")))
+                       {
+                               weechat::config_set_plugin("bar_scrolldown", "off");
+                       }
+                       # Make a bar if doesn't exist
+                       highmon_bar_open();
+               }
+               elsif ($value eq "buffer")
+               {
+                       # If a bar exists, close it
+                       highmon_bar_close();
+                       # Open buffer
+                       highmon_buffer_open();
+               }
+
+       }
+       # Change if hotlist config changes
+       elsif ($name eq "hotlist_show")
+       {
+               # Search for pre-existing buffer
+               $highmon_buffer = weechat::buffer_search("perl", "highmon");
+               if ($value eq "off" && $highmon_buffer)
+               {
+                       weechat::buffer_set($highmon_buffer, "notify", "0");
+               }
+               elsif ($value ne "off" && $highmon_buffer)
+               {
+                       weechat::buffer_set($highmon_buffer, "notify", "3");
+               }
+       }
+       elsif ($name eq "weechat.look.prefix_suffix")
+       {
+               if (weechat::config_get_plugin("output") eq "bar")
+               {
+                       @bar_lines = ();
+                       weechat::print("", "\thighmon: weechat.look.prefix_suffix changed, clearing highmon bar");
+                       weechat::bar_item_update("highmon");
+               }
+       }
+       return weechat::WEECHAT_RC_OK;
+}
+
+# Set up weechat hooks / commands
+sub highmon_hook
+{
+       weechat::hook_print("", "", "", 0, "highmon_new_message", "");
+       weechat::hook_command("highclean", "Highmon config clean up", "default|orphan|all", " default: Cleans all config entries with the default \"on\" value\n  orphan: Cleans all config entries for channels you aren't currently joined\n     all: Does both defaults and orphan", "default|orphan|all", "highmon_config_clean", "");
+
+       weechat::hook_command("highmon", "Highmon help", "[help] | [monitor [channel [server]]] | [clean default|orphan|all]", "   help: Print help on config options for highmon\n monitor: Toggles monitoring for a channel\n  clean: Highmon config clean up (/highclean)", "help || monitor %(irc_channels) %(irc_servers) || clean default|orphan|all", "highmon_command_cb", "");
+
+       weechat::hook_config("plugins.var.perl.highmon.*", "highmon_config_cb", "");
+       weechat::hook_config("weechat.look.prefix_suffix", "highmon_config_cb", "");
+}
+
+# Main body, Callback for hook_print
+sub highmon_new_message
+{
+       my $net = "";
+       my $chan = "";
+       my $nick = "";
+       my $outstr = "";
+       my $window_displayed = "";
+       my $dyncheck = "0";
+
+#      DEBUG point
+#      $string = "\t"."0: ".$_[0]." 1: ".$_[1]." 2: ".$_[2]." 3: ".$_[3]." 4: ".$_[4]." 5: ".$_[5]." 6: ".$_[6]." 7: ".$_[7];
+#      weechat::print("", "\t".$string);
+
+       $cb_datap = $_[0];
+       $cb_bufferp = $_[1];
+       $cb_date = $_[2];
+       $cb_tags = $_[3];
+       $cb_disp = $_[4];
+       $cb_high = $_[5];
+       $cb_prefix = $_[6];
+       $cb_msg = $_[7];
+
+       # Only work on highlighted messages or private message when enabled
+       if ($cb_high == "1" || (weechat::config_get_plugin("merge_private") eq "on" && $cb_tags =~ /notify_private/))
+       {
+               # Pre bug #29618 (0.3.3) away detect
+               if (weechat::info_get("version_number", "") <= 197120)
+               {
+                       $away = '';
+                       # Get infolist for this server
+                       $infolist = weechat::infolist_get("irc_server", "", weechat::buffer_get_string($cb_bufferp, "localvar_server"));
+                       while (weechat::infolist_next($infolist))
+                       {
+                               # Get away message is is_away is on
+                               $away = weechat::infolist_string($infolist, "away_message") if (weechat::infolist_integer($infolist, "is_away"));
+                       }
+                       weechat::infolist_free($infolist);
+               }
+               # Post bug #29618 fix
+               else
+               {
+                       $away = weechat::buffer_get_string($cb_bufferp, "localvar_away");
+               }
+               if (weechat::config_get_plugin("away_only") ne "on" || ($away ne ""))
+               {
+                       # Check buffer name is an IRC channel
+                       $bufname = weechat::buffer_get_string($cb_bufferp, 'name');
+                       if ($bufname =~ /(.*)\.([#&\+!])(.*)/)
+                       {
+                               # Are we running on this channel
+                               if (weechat::config_get_plugin($bufname) ne "off" && $cb_disp eq "1")
+                               {
+                                       # Format nick
+                                       # Line isn't action or topic notify
+                                       if (!($cb_tags =~ /irc_action/) && !($cb_tags =~ /irc_topic/))
+                                       {
+                                               # Strip nick colour
+                                               $uncolnick = weechat::string_remove_color($cb_prefix, "");
+                                               # Format nick
+                                               $nick = " ".weechat::config_get_plugin("nick_prefix").weechat::color("chat_highlight").$uncolnick.weechat::color("reset").weechat::config_get_plugin("nick_suffix");
+                                       }
+                                       # Topic line
+                                       elsif ($cb_tags =~ /irc_topic/)
+                                       {
+                                               $nick = " ".$cb_prefix.weechat::color("reset");
+                                       }
+                                       # Action line
+                                       else
+                                       {
+                                               $uncolnick = weechat::string_remove_color($cb_prefix, "");
+                                               $nick = weechat::color("chat_highlight").$uncolnick.weechat::color("reset");
+                                       }
+                                       # Send to output
+                                       highmon_print ($cb_msg, $cb_bufferp, $nick);
+                               }
+                       }
+                       # Or is private message
+                       elsif (weechat::config_get_plugin("merge_private") eq "on" && $cb_tags =~ /notify_private/)
+                       {
+                               # Strip nick colour
+                               $uncolnick = weechat::buffer_get_string($cb_bufferp, 'short_name');
+                               # Format nick
+                               $nick = " ".weechat::config_get_plugin("nick_prefix").weechat::color("chat_highlight").$uncolnick.weechat::color("reset").weechat::config_get_plugin("nick_suffix");
+                               #Send to output
+                               highmon_print ($cb_msg, $cb_bufferp, $nick);
+                       }
+               }
+       }
+       return weechat::WEECHAT_RC_OK;
+}
+
+# Output formatter and printer takes (msg bufpointer nick)
+sub highmon_print
+{
+       $cb_msg = $_[0];
+       my $cb_bufferp = $_[1] if ($_[1]);
+       my $nick = $_[2] if ($_[2]);
+
+       #Normal channel message
+       if ($cb_bufferp && $nick)
+       {
+               # Format buffer name
+               $bufname = format_buffer_name($cb_bufferp);
+
+               # If alignment is #channel | nick msg
+               if (weechat::config_get_plugin("alignment") eq "channel")
+               {
+                       $nick =~ s/\s(.*)/$1/;
+                       # Build string
+                       $outstr = $bufname."\t".$nick." ".$cb_msg;
+               }
+               # or if it is channel number | nick msg
+               elsif (weechat::config_get_plugin("alignment") eq "schannel")
+               {
+                       $nick =~ s/\s(.*)/$1/;
+                       # Use channel number instead
+                       $bufname = weechat::color("chat_prefix_buffer").weechat::buffer_get_integer($cb_bufferp, 'number').weechat::color("reset");
+                       # Build string
+                       $outstr = $bufname."\t".$nick." ".$cb_msg;
+               }
+               # or if it is number:#channel | nick msg
+               elsif (weechat::config_get_plugin("alignment") eq "nchannel")
+               {
+                       $nick =~ s/\s(.*)/$1/;
+                       # Place channel number in front of formatted name
+                       $bufname = weechat::color("chat_prefix_buffer").weechat::buffer_get_integer($cb_bufferp, 'number').":".weechat::color("reset").$bufname;
+                       # Build string
+                       $outstr = $bufname."\t".$nick." ".$cb_msg;
+               }
+               # or if it is #channel nick | msg
+               elsif (weechat::config_get_plugin("alignment") eq "channel,nick")
+               {
+                       # Build string
+                       $outstr = $bufname.":".$nick."\t".$cb_msg;
+               }
+               # or if it is channel number nick | msg
+               elsif (weechat::config_get_plugin("alignment") eq "schannel,nick")
+               {
+                       # Use channel number instead
+                       $bufname = weechat::color("chat_prefix_buffer").weechat::buffer_get_integer($cb_bufferp, 'number').weechat::color("reset");
+                       # Build string
+                       $outstr = $bufname.":".$nick."\t".$cb_msg;
+               }
+               # or if it is number:#channel nick | msg
+               elsif (weechat::config_get_plugin("alignment") eq "nchannel,nick")
+               {
+                       # Place channel number in front of formatted name
+                       $bufname = weechat::color("chat_prefix_buffer").weechat::buffer_get_integer($cb_bufferp, 'number').":".weechat::color("reset").$bufname;
+                       # Build string
+                       $outstr = $bufname.":".$nick."\t".$cb_msg;
+               }
+               # or finally | #channel nick msg
+               else
+               {
+                       # Build string
+                       $outstr = "\t".$bufname.":".$nick." ".$cb_msg;
+               }
+       }
+       # highmon channel toggle message
+       elsif ($cb_bufferp && !$nick)
+       {
+               # Format buffer name
+               $bufname = format_buffer_name($cb_bufferp);
+
+               # If alignment is #channel * | *
+               if (weechat::config_get_plugin("alignment") =~ /channel/)
+               {
+                       # If it's actually channel number * | *
+                       if (weechat::config_get_plugin("alignment") =~ /schannel/)
+                       {
+                               # Use channel number instead
+                               $bufname = weechat::color("chat_prefix_buffer").weechat::buffer_get_integer($cb_bufferp, 'number').weechat::color("reset");
+                       }
+                       # Or if it's actually number:#channel * | *
+                       if (weechat::config_get_plugin("alignment") =~ /nchannel/)
+                       {
+                               # Place channel number in front of formatted name
+                       $bufname = weechat::color("chat_prefix_buffer").weechat::buffer_get_integer($cb_bufferp, 'number').":".weechat::color("reset").$bufname;
+                       }
+                       $outstr = $bufname."\t".$cb_msg;
+               }
+               # or if alignment is | *
+               else
+               {
+                       $outstr = $bufname.": ".$cb_msg;
+               }
+       }
+       # highmon dynmon
+       elsif (!$cb_bufferp && !$nick)
+       {
+               $outstr = "\t".$cb_msg;
+       }
+
+       # Send string to buffer
+       if (weechat::config_get_plugin("output") eq "buffer")
+       {
+               # Search for and confirm buffer
+               $highmon_buffer = weechat::buffer_search("perl", "highmon");
+               # Print
+               weechat::print($highmon_buffer, $outstr);
+       }
+       elsif (weechat::config_get_plugin("output") eq "bar")
+       {
+               # Add time string
+               use POSIX qw(strftime);
+               $time = strftime(weechat::config_string(weechat::config_get("weechat.look.buffer_time_format")), localtime);
+               # Colourise
+               if ($time =~ /\$\{\w+\}/) # Coloured string
+               {
+                       while ($time =~ /\$\{(\w+)\}/)
+                       {
+                               $color = weechat::color($1);
+                               $time =~ s/\$\{\w+\}/$color/;
+                       }
+               }
+               else # Default string
+               {
+                       $colour = weechat::color(weechat::config_string(weechat::config_get("weechat.color.chat_time_delimiters")));
+                       $reset = weechat::color("reset");
+                       $time =~ s/(\d*)(.)(\d*)/$1$colour$2$reset$3/g;
+               }
+               # Push updates to bar lists
+               push (@bar_lines_time, $time);
+
+               # Change tab char
+               $delim = " ".weechat::color(weechat::config_string(weechat::config_get("weechat.color.chat_delimiters"))).weechat::config_string(weechat::config_get("weechat.look.prefix_suffix")).weechat::color("reset")." ";
+               $outstr =~ s/\t/$delim/;
+
+               push (@bar_lines, $outstr);
+               # Trigger update
+               weechat::bar_item_update("highmon");
+
+               if (weechat::config_get_plugin("bar_scrolldown") eq "on")
+               {
+                       weechat::command("", "/bar scroll highmon * ye")
+               }
+       }
+}
+
+# Start the output display
+sub highmon_start
+{
+       if (weechat::config_get_plugin("output") eq "buffer")
+       {
+               highmon_buffer_open();
+       }
+       elsif (weechat::config_get_plugin("output") eq "bar")
+       {
+               highmon_bar_open();
+       }
+}
+
+# Takes two optional args (channel server), toggles monitoring on/off
+sub highmon_toggle
+{
+       $data = $_[0];
+       $buffer = $_[1];
+       $args = $_[2];
+
+       # Check if we've been told what channel to act on
+       if ($args ne "")
+       {
+               # Split argument up
+               @arg_array = split(/ /,$args);
+               # Check if a server was given
+               if ($arg_array[1])
+               {
+                       # Find matching
+                       $bufp = weechat::buffer_search("irc", $arg_array[1].".".$arg_array[0]);
+               }
+               else
+               {
+                       $found_chans = 0;
+                       # Loop through defined servers
+                       $infolist = weechat::infolist_get("buffer", "", "");
+                       while (weechat::infolist_next($infolist))
+                       {
+                               # Only interesting in IRC buffers
+                               if (weechat::infolist_string($infolist, "plugin_name") eq "irc")
+                               {
+                                       # Find buffers that maych
+                                       $sname = weechat::infolist_string($infolist, "short_name");
+                                       if ($sname eq $arg_array[0])
+                                       {
+                                               $found_chans++;
+                                               $bufp = weechat::infolist_pointer($infolist, "pointer");
+                                       }
+                               }
+                       }
+                       weechat::infolist_free($infolist);
+                       # If the infolist found more than one channel, halt as we need to know which one
+                       if ($found_chans > 1)
+                       {
+                               weechat::print("", "Channel name is not unique, please define server");
+                               return weechat::WEECHAT_RC_OK;
+                       }
+               }
+               # Something didn't return right
+               if ($bufp eq "")
+               {
+                       weechat::print("", "Could not find buffer");
+                       return weechat::WEECHAT_RC_OK;
+               }
+       }
+       else
+       {
+               # Get pointer from where we are
+               $bufp = weechat::current_buffer();
+       }
+       # Get buffer name
+       $bufname = weechat::buffer_get_string($bufp, 'name');
+       # Test if buffer is an IRC channel
+       if ($bufname =~ /(.*)\.([#&\+!])(.*)/)
+       {
+               if (weechat::config_get_plugin($bufname) eq "off")
+               {
+                       # If currently off, set on
+                       weechat::config_set_plugin($bufname, "on");
+
+                       # Send to output formatter
+                       highmon_print("Highlight Monitoring Enabled", $bufp);
+                       return weechat::WEECHAT_RC_OK;
+               }
+               elsif (weechat::config_get_plugin($bufname) eq "on" || weechat::config_get_plugin($bufname) eq "")
+               {
+                       # If currently on, set off
+                       weechat::config_set_plugin($bufname, "off");
+
+                       # Send to output formatter
+                       highmon_print("Highlight Monitoring Disabled", $bufp);
+                       return weechat::WEECHAT_RC_OK;
+               }
+       }
+}
+
+# Takes a buffer pointer and returns a formatted name
+sub format_buffer_name
+{
+       $cb_bufferp = $_[0];
+       $bufname = weechat::buffer_get_string($cb_bufferp, 'name');
+
+       # Set colour from buffer name
+       if (weechat::config_get_plugin("color_buf") eq "on")
+       {
+               # Determine what colour to use
+               $color = weechat::info_get("irc_nick_color", $bufname);
+               if (!$color)
+               {
+                       $color = 0;
+                       @char_array = split(//,$bufname);
+                       foreach $char (@char_array)
+                       {
+                               $color += ord($char);
+                       }
+                       $color %= 10;
+                       $color = sprintf "weechat.color.chat_nick_color%02d", $color+1;
+                       $color = weechat::config_get($color);
+                       $color = weechat::config_string($color);
+                       $color = weechat::color($color);
+               }
+
+               # Private message just show network
+               if (weechat::config_get_plugin("merge_private") eq "on" && weechat::buffer_get_string($cb_bufferp, "localvar_type") eq "private")
+               {
+                       $bufname = weechat::buffer_get_string($cb_bufferp, "localvar_server");
+               }
+               # Format name to short or 'nicename'
+               elsif (weechat::config_get_plugin("short_names") eq "on")
+               {
+                       $bufname = weechat::buffer_get_string($cb_bufferp, 'short_name');
+               }
+               else
+               {
+                       $bufname =~ s/(.*)\.([#&\+!])(.*)/$1$2$3/;
+               }
+
+               # Build a coloured string
+               $bufname = $color.$bufname.weechat::color("reset");
+       }
+       # User set colour name
+       elsif (weechat::config_get_plugin("color_buf") ne "off")
+       {
+               # Private message just show network
+               if (weechat::config_get_plugin("merge_private") eq "on" && weechat::buffer_get_string($cb_bufferp, "localvar_type") eq "private")
+               {
+                       $bufname = weechat::buffer_get_string($cb_bufferp, "localvar_server");
+               }
+               # Format name to short or 'nicename'
+               elsif (weechat::config_get_plugin("short_names") eq "on")
+               {
+                       $bufname = weechat::buffer_get_string($cb_bufferp, 'short_name');
+               }
+               else
+               {
+                       $bufname =~ s/(.*)\.([#&\+!])(.*)/$1$2$3/;
+               }
+
+               $color = weechat::config_get_plugin("color_buf");
+               $bufname = weechat::color($color).$bufname.weechat::color("reset");
+       }
+       # Stick with default colour
+       else
+       {
+               # Private message just show network
+               if (weechat::config_get_plugin("merge_private") eq "on" && weechat::buffer_get_string($cb_bufferp, "localvar_type") eq "private")
+               {
+                       $bufname = weechat::buffer_get_string($cb_bufferp, "localvar_server");
+               }
+               # Format name to short or 'nicename'
+               elsif (weechat::config_get_plugin("short_names") eq "on")
+               {
+                       $bufname = weechat::buffer_get_string($cb_bufferp, 'short_name');
+               }
+               else
+               {
+                       $bufname =~ s/(.*)\.([#&\+!])(.*)/$1$2$3/;
+               }
+       }
+
+       return $bufname;
+}
+
+# Check result of register, and attempt to behave in a sane manner
+if (!weechat::register("highmon", "KenjiE20", "2.3.3.2", "GPL3", "Highlight Monitor", "", ""))
+{
+       # Double load
+       weechat::print ("", "\tHighmon is already loaded");
+       return weechat::WEECHAT_RC_OK;
+}
+else
+{
+       # Start everything
+       highmon_hook();
+       highmon_config_init();
+       highmon_start();
+}
index ccf86893f664b7805347b47007260a5b7bcba3bd..a75e0796ee04eabdf01ea59e6208ff8b07095b59 100644 (file)
@@ -1,11 +1,21 @@
 #
-# plugins.conf -- weechat v0.4.1
+# plugins.conf -- weechat v0.4.2
 #
 
 [var]
 fifo.fifo = "on"
 lua.check_license = "off"
 perl.check_license = "off"
+perl.highmon.alignment = "nchannel"
+perl.highmon.away_only = "off"
+perl.highmon.color_buf = "on"
+perl.highmon.hotlist_show = "off"
+perl.highmon.logging = "off"
+perl.highmon.merge_private = "off"
+perl.highmon.nick_prefix = "<"
+perl.highmon.nick_suffix = ">"
+perl.highmon.output = "buffer"
+perl.highmon.short_names = "off"
 python.check_license = "off"
 ruby.check_license = "off"
 tcl.check_license = "off"
diff --git a/weechat/python/allquery.py b/weechat/python/allquery.py
new file mode 100644 (file)
index 0000000..e789bd6
--- /dev/null
@@ -0,0 +1,150 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2011-2013 by F. Besser <fbesser@gmail.com>
+#
+# 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 <http://www.gnu.org/licenses/>.
+#
+#
+# History:
+# 2013-09-01, nils_2@freenode.#weechat:
+#     version 0.2: add support of servername for "-exclude"
+#                : make script behave like /allchan and /allserver command
+#                : add function "-current"
+#                : case-insensitive search for query/server
+#
+# 2011-09-05, F. Besser <fbesser@gmail.com>:
+#     version 0.1: script created
+#
+# Development is on:
+# https://github.com/fbesser/weechat_scripts
+#
+# (this script requires WeeChat 0.3.0 or newer)
+#
+
+
+SCRIPT_NAME = "allquery"
+SCRIPT_AUTHOR = "fbesser"
+SCRIPT_VERSION = "0.2"
+SCRIPT_LICENSE = "GPL3"
+SCRIPT_DESC = "Executes command on all irc query buffer"
+
+SCRIPT_COMMAND = "allquery"
+
+import_ok = True
+
+try:
+    import weechat
+except ImportError:
+    print('This script must be run under WeeChat.')
+    print('Get WeeChat now at: http://www.weechat.org/')
+    import_ok = False
+
+try:
+    import re
+except ImportError, message:
+    print('Missing package(s) for %s: %s' % (SCRIPT_NAME, message))
+    import_ok = False
+
+
+def make_list(argument):
+    """ Make a list out of argument string of format -argument=value0,value1"""
+    arglist = argument.lower().split("=", 1)
+    arguments = arglist[1].split(",")
+    return arguments
+
+def allquery_command_cb(data, buffer, args):
+    """ Callback for /allquery command """
+    args = args.strip()
+    if args == "":
+        weechat.command("", "/help %s" % SCRIPT_COMMAND)
+        return weechat.WEECHAT_RC_OK
+    argv = args.split(" ")
+
+    exclude_nick = None
+    current_server = None
+
+    if '-current' in argv:
+        current_server = weechat.buffer_get_string(weechat.current_buffer(), "localvar_server")
+        # remove "-current" + whitespace from argumentlist
+        args = args.replace("-current", "")
+        args = args.lstrip()
+        argv.remove("-current")
+
+    # search for "-exclude" in arguments
+    i = 0
+    for entry in argv[0:]:
+        if entry.startswith("-exclude="):
+            exclude_nick = make_list(argv[i])
+            command = " ".join(argv[i+1::])
+            break
+        i +=1
+    else:
+        command = args
+
+    # no command found.
+    if not command:
+        return weechat.WEECHAT_RC_OK
+
+    if not command.startswith("/"):
+        command = "/%s" % command
+
+    infolist = weechat.infolist_get("buffer", "", "")
+    while weechat.infolist_next(infolist):
+        if weechat.infolist_string(infolist, "plugin_name") == "irc":
+            ptr = weechat.infolist_pointer(infolist, "pointer")
+            server = weechat.buffer_get_string(ptr, "localvar_server")
+            query = weechat.buffer_get_string(ptr, "localvar_channel")
+            execute_command = re.sub(r'\$nick', query, command)
+            if weechat.buffer_get_string(ptr, "localvar_type") == "private":
+                if current_server is not None:
+                    if server == current_server:
+                        exclude_nick_and_server(ptr,query,server,exclude_nick,execute_command)
+                else:
+                    exclude_nick_and_server(ptr,query,server,exclude_nick,execute_command)
+    weechat.infolist_free(infolist)
+    return weechat.WEECHAT_RC_OK
+
+
+def exclude_nick_and_server(ptr, query, server, exclude_nick, execute_command):
+    server = "%s.*" % server            # servername + ".*"
+    if exclude_nick is not None:
+        if not query.lower() in exclude_nick and not server.lower() in exclude_nick:
+            weechat.command(ptr, execute_command)
+    else:
+        weechat.command(ptr, execute_command)
+
+
+if __name__ == '__main__' and import_ok:
+    if weechat.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION,
+                        SCRIPT_LICENSE, SCRIPT_DESC, "", ""):
+
+        weechat.hook_command(SCRIPT_COMMAND, SCRIPT_DESC,
+                             '[-current] [-exclude=<nick|server>[,<nick2|server>...]] <command> [<arguments>]',
+                             '   -current: execute command for query of current server only\n'
+                             '   -exclude: exclude some querys and/or server from executed command\n'
+                             '    command: command executed in query buffers\n'
+                             '  arguments: arguments for command (special variables $nick will be replaced by its value)\n\n'
+                             'Examples:\n'
+                             '  close all query buffers:\n'
+                             '    /' + SCRIPT_COMMAND + ' buffer close\n'
+                             '  close all query buffers, but don\'t close FlashCode:\n'
+                             '    /' + SCRIPT_COMMAND + ' -exclude=FlashCode buffer close\n'
+                             '  close all query buffers, except for server freenode:\n'
+                             '    /' + SCRIPT_COMMAND + ' -exclude=freenode.* buffer close\n'
+                             '  msg to all query buffers:\n'
+                             '    /' + SCRIPT_COMMAND + ' say Hello\n'
+                             '  notice to all query buffers:\n'
+                             '    /' + SCRIPT_COMMAND + ' notice $nick Hello',
+                             '%(commands)',
+                             'allquery_command_cb', '')
diff --git a/weechat/python/autoload/allquery.py b/weechat/python/autoload/allquery.py
new file mode 120000 (symlink)
index 0000000..90aff3b
--- /dev/null
@@ -0,0 +1 @@
+../allquery.py
\ No newline at end of file
index 9597141fdb070b0faab1c0de2efa7dcd01e15e6c..23bd18efed613904843063d84e41aad33b532881 100644 (file)
@@ -1,5 +1,5 @@
 #
-# relay.conf -- weechat v0.4.1
+# relay.conf -- weechat v0.4.2
 #
 
 [look]
index a135a679f3985f87aed05a59aadb6b50cbfd06be..c75a0e202182371a6aa1d1972f9eee2f993e14b1 100644 (file)
@@ -1,5 +1,5 @@
 #
-# rmodifier.conf -- weechat v0.4.1
+# rmodifier.conf -- weechat v0.4.2
 #
 
 [look]
index 54be061f037e7e13e1f1f0f3a86a6cf68639ba76..e2a69e545e41a1520c0472dc47461f51a6b4831a 100644 (file)
@@ -1,5 +1,5 @@
 #
-# script.conf -- weechat v0.4.1
+# script.conf -- weechat v0.4.2
 #
 
 [look]
diff --git a/weechat/sec.conf b/weechat/sec.conf
new file mode 100644 (file)
index 0000000..838efac
--- /dev/null
@@ -0,0 +1,11 @@
+#
+# sec.conf -- weechat v0.4.2
+#
+
+[crypt]
+cipher = aes256
+hash_algo = sha256
+passphrase_file = ""
+salt = on
+
+[data]
index 6d01bbe702df55afeda680214223317c8a98380a..c6ffd9e8685e82d3459d2a2d25804ee93eadbe6f 100644 (file)
@@ -1,5 +1,5 @@
 #
-# weechat.conf -- weechat v0.4.1
+# weechat.conf -- weechat v0.4.2
 #
 
 [debug]
@@ -13,12 +13,12 @@ sys_rlimit = ""
 
 [look]
 align_end_of_lines = message
-bar_more_down = "++"
-bar_more_left = "<<"
-bar_more_right = ">>"
-bar_more_up = "--"
+bar_more_down = ""
+bar_more_left = ""
+bar_more_right = ""
+bar_more_up = ""
 buffer_notify_default = all
-buffer_time_format = "%H:%M:%S"
+buffer_time_format = "${253}%H:${245}%M:%S"
 color_basic_force_bold = off
 color_inactive_buffer = off
 color_inactive_message = on
@@ -26,16 +26,18 @@ color_inactive_prefix = on
 color_inactive_prefix_buffer = on
 color_inactive_time = off
 color_inactive_window = off
-color_nick_offline = off
+color_nick_offline = on
 color_pairs_auto_reset = 5
 color_real_white = off
 command_chars = ""
 confirm_quit = off
-day_change = on
-day_change_time_format = "%a, %d %b %Y"
+day_change = off
+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_regex = ".*Ram-Z.*"
 highlight_tags = ""
 hotlist_add_buffer_if_away = on
 hotlist_buffer_separator = ", "
@@ -45,18 +47,21 @@ 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_filter = ""
 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 = ""
@@ -66,7 +71,7 @@ paste_bracketed_timer_delay = 10
 paste_max_lines = 1
 prefix_action = " *"
 prefix_align = right
-prefix_align_max = 0
+prefix_align_max = 10
 prefix_align_min = 0
 prefix_align_more = "+"
 prefix_align_more_after = on
@@ -75,21 +80,21 @@ prefix_buffer_align_max = 0
 prefix_buffer_align_more = "+"
 prefix_buffer_align_more_after = on
 prefix_error = "=!="
-prefix_join = "-->"
+prefix_join = "▬▬▶"
 prefix_network = "--"
-prefix_quit = "<--"
+prefix_quit = "◀▬▬"
 prefix_same_nick = ""
-prefix_suffix = "|"
+prefix_suffix = ""
 read_marker = line
 read_marker_always_show = off
-read_marker_string = ""
+read_marker_string = ""
 save_config_on_exit = on
 save_layout_on_exit = none
 scroll_amount = 3
 scroll_bottom_after_switch = off
 scroll_page_percent = 100
 search_text_not_found_alert = on
-separator_horizontal = "-"
+separator_horizontal = "="
 separator_vertical = ""
 set_title = on
 time_format = "%a, %d %b %Y %T"
@@ -99,19 +104,20 @@ window_separator_vertical = on
 [palette]
 
 [color]
-bar_more = lightmagenta
+bar_more = 229
 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
+chat_highlight = lightred
+chat_highlight_bg = default
 chat_host = cyan
 chat_inactive_buffer = darkgray
 chat_inactive_window = darkgray
 chat_nick = lightcyan
-chat_nick_colors = "cyan,magenta,green,brown,lightblue,default,lightcyan,lightmagenta,lightgreen,blue"
+chat_nick_colors = "19,25,31,37,43,49,55,61,67,73,79,85,91,97,103,109,115,121,127,133,139,145,151,157,163,169,175,181,187,193,199,205,211,217,223,229"
 chat_nick_offline = darkgray
 chat_nick_offline_highlight = default
 chat_nick_offline_highlight_bg = darkgray
@@ -123,12 +129,12 @@ chat_prefix_action = white
 chat_prefix_buffer = brown
 chat_prefix_buffer_inactive_buffer = darkgray
 chat_prefix_error = yellow
-chat_prefix_join = lightgreen
-chat_prefix_more = lightmagenta
+chat_prefix_join = 121
+chat_prefix_more = 229
 chat_prefix_network = magenta
-chat_prefix_quit = lightred
-chat_prefix_suffix = green
-chat_read_marker = magenta
+chat_prefix_quit = 163
+chat_prefix_suffix = 31
+chat_read_marker = 31
 chat_read_marker_bg = default
 chat_server = brown
 chat_tags = red
@@ -137,24 +143,26 @@ 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
 nicklist_group = green
 nicklist_offline = blue
-separator = blue
+separator = 31
 status_count_highlight = magenta
 status_count_msg = brown
 status_count_other = default
 status_count_private = green
-status_data_highlight = lightmagenta
-status_data_msg = yellow
+status_data_highlight = 163
+status_data_msg = 229
 status_data_other = default
-status_data_private = lightgreen
+status_data_private = 121
 status_filter = green
-status_more = yellow
-status_name = white
-status_name_ssl = lightgreen
+status_more = 229
+status_name = 121
+status_name_ssl = 121
 status_number = yellow
 status_time = default
 
@@ -184,6 +192,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 = "*"
@@ -193,20 +202,34 @@ path = "%h/plugins"
 save_config_on_unload = on
 
 [bar]
-input.color_bg = default
-input.color_delim = cyan
-input.color_fg = default
-input.conditions = ""
-input.filling_left_right = vertical
-input.filling_top_bottom = horizontal
-input.hidden = off
-input.items = "[input_prompt]+(away),[input_search],[input_paste],input_text"
-input.position = bottom
-input.priority = 1000
-input.separator = off
-input.size = 1
-input.size_max = 0
-input.type = window
+activetitle.color_bg = 31
+activetitle.color_delim = default
+activetitle.color_fg = *white
+activetitle.conditions = "${active}"
+activetitle.filling_left_right = vertical
+activetitle.filling_top_bottom = horizontal
+activetitle.hidden = off
+activetitle.items = "buffer_title"
+activetitle.position = top
+activetitle.priority = 500
+activetitle.separator = off
+activetitle.size = 1
+activetitle.size_max = 0
+activetitle.type = window
+buffers.color_bg = default
+buffers.color_delim = default
+buffers.color_fg = default
+buffers.conditions = ""
+buffers.filling_left_right = vertical
+buffers.filling_top_bottom = columns_vertical
+buffers.hidden = off
+buffers.items = "buffers"
+buffers.position = left
+buffers.priority = 0
+buffers.separator = on
+buffers.size = 0
+buffers.size_max = 15
+buffers.type = root
 isetbar.color_bg = default
 isetbar.color_delim = cyan
 isetbar.color_fg = default
@@ -223,8 +246,8 @@ isetbar.size_max = 3
 isetbar.type = window
 nicklist.color_bg = default
 nicklist.color_delim = cyan
-nicklist.color_fg = default
-nicklist.conditions = "${nicklist}"
+nicklist.color_fg = 31
+nicklist.conditions = "${nicklist} && ${window.number} == 1"
 nicklist.filling_left_right = vertical
 nicklist.filling_top_bottom = columns_vertical
 nicklist.hidden = off
@@ -232,27 +255,41 @@ nicklist.items = "buffer_nicklist"
 nicklist.position = right
 nicklist.priority = 200
 nicklist.separator = on
-nicklist.size = 0
-nicklist.size_max = 0
+nicklist.size = 15
+nicklist.size_max = 15
 nicklist.type = window
-status.color_bg = blue
-status.color_delim = cyan
-status.color_fg = default
+rootinput.color_bg = default
+rootinput.color_delim = default
+rootinput.color_fg = default
+rootinput.conditions = ""
+rootinput.filling_left_right = vertical
+rootinput.filling_top_bottom = horizontal
+rootinput.hidden = off
+rootinput.items = "[buffer_name]+[input_prompt]+(away),[input_search],[input_paste],input_text"
+rootinput.position = bottom
+rootinput.priority = 0
+rootinput.separator = off
+rootinput.size = 1
+rootinput.size_max = 0
+rootinput.type = root
+status.color_bg = default
+status.color_delim = default
+status.color_fg = 31
 status.conditions = ""
 status.filling_left_right = vertical
 status.filling_top_bottom = horizontal
 status.hidden = off
 status.items = "[time],[buffer_count],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_filter,[lag],[hotlist],completion,scroll"
 status.position = bottom
-status.priority = 500
+status.priority = 0
 status.separator = off
 status.size = 1
 status.size_max = 0
-status.type = window
-title.color_bg = blue
+status.type = root
+title.color_bg = black
 title.color_delim = cyan
-title.color_fg = default
-title.conditions = ""
+title.color_fg = 31
+title.conditions = "${inactive}"
 title.filling_left_right = vertical
 title.filling_top_bottom = horizontal
 title.hidden = off
@@ -265,6 +302,23 @@ title.size_max = 0
 title.type = window
 
 [layout]
+normal.buffer = "core;weechat;1"
+normal.buffer = "irc;server.znc-freenode;1"
+normal.buffer = "irc;server.znc-bitlbee;1"
+normal.buffer = "irc;znc-freenode.#chakra;2"
+normal.buffer = "irc;znc-freenode.#chakra-devel;3"
+normal.buffer = "irc;znc-freenode.#chakra-ccr;4"
+normal.buffer = "irc;znc-freenode.#chakra-fr;5"
+normal.buffer = "irc;znc-bitlbee.&bitlbee;6"
+normal.buffer = "irc;znc-bitlbee.&gtalk;7"
+normal.buffer = "perl;highmon;8"
+normal.window = "1;0;16;1;-;-"
+normal.window = "2;1;0;0;irc;server.znc-bitlbee"
+normal.window = "3;1;0;0;perl;highmon"
+normal.current = on
+_zoom.window = "1;0;16;1;-;-"
+_zoom.window = "2;1;0;0;irc;server.znc-bitlbee"
+_zoom.window = "3;1;0;0;perl;highmon"
 
 [notify]
 
@@ -310,6 +364,14 @@ meta-meta2-A = "/buffer -1"
 meta-meta2-B = "/buffer +1"
 meta-meta2-C = "/buffer +1"
 meta-meta2-D = "/buffer -1"
+meta-! = "/buffer *1"
+meta-# = "/buffer *3"
+meta-$ = "/buffer *4"
+meta-% = "/buffer *5"
+meta-& = "/buffer *7"
+meta-( = "/buffer *9"
+meta-) = "/buffer *0"
+meta-* = "/buffer *8"
 meta-/ = "/input jump_last_buffer_displayed"
 meta-0 = "/buffer *10"
 meta-1 = "/buffer *1"
@@ -324,6 +386,7 @@ meta-9 = "/buffer *9"
 meta-< = "/input jump_previously_visited_buffer"
 meta-= = "/filter toggle"
 meta-> = "/input jump_next_visited_buffer"
+meta-@ = "/buffer *2"
 meta-OA = "/input history_global_previous"
 meta-OB = "/input history_global_next"
 meta-OC = "/input move_next_word"
@@ -371,6 +434,7 @@ meta2-H = "/input move_beginning_of_line"
 meta2-I = "/window page_up"
 meta2-Z = "/input complete_previous"
 meta2-[E = "/buffer -1"
+meta-^ = "/buffer *6"
 meta-_ = "/input redo"
 meta-a = "/input jump_smart"
 meta-b = "/input move_previous_word"
@@ -550,6 +614,8 @@ meta2-D = "/cursor move left"
 @item(buffer_nicklist):button1-gesture-left-long = "/window ${_window_number};/kickban ${nick}"
 @item(buffer_nicklist):button2 = "/window ${_window_number};/whois ${nick}"
 @item(buffer_nicklist):button2-gesture-left = "/window ${_window_number};/ban ${nick}"
+@item(buffers):button1* = "hsignal:buffers_mouse"
+@item(buffers):button2* = "hsignal:buffers_mouse"
 @bar:wheeldown = "/bar scroll ${_bar_name} ${_window_number} +20%"
 @bar:wheelup = "/bar scroll ${_bar_name} ${_window_number} -20%"
 @chat:button1 = "/window ${_window_number}"
diff --git a/weechat/weechat.log b/weechat/weechat.log
deleted file mode 100644 (file)
index 1812ea2..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-[2013-11-19 03:30:05] WeeChat 0.4.1 (compiled on Nov 18 2013 13:07:22)
-[2013-11-19 03:30:05] Reading configuration file weechat.conf
-[2013-11-19 03:30:05] Reading configuration file plugins.conf
-[2013-11-19 03:30:05] Reading configuration file alias.conf
-[2013-11-19 03:30:05] Reading configuration file aspell.conf
-[2013-11-19 03:30:05] Reading configuration file charset.conf
-[2013-11-19 03:30:05] Reading configuration file irc.conf
-[2013-11-19 03:30:05] irc: connecting to server tardis.uni.cx/60665 (SSL)...
-[2013-11-19 03:30:05] Reading configuration file logger.conf
-[2013-11-19 03:30:05] Reading configuration file relay.conf
-[2013-11-19 03:30:05] Reading configuration file rmodifier.conf
-[2013-11-19 03:30:05] Reading configuration file script.conf
-[2013-11-19 03:30:05] Reading configuration file xfer.conf
-[2013-11-19 03:30:05] Reading configuration file iset.conf
-[2013-11-19 03:37:35] irc: connecting to server tardis.uni.cx/60665 (SSL)...
-[2013-11-19 03:45:05] irc: connecting to server tardis.uni.cx/60665 (SSL)...
-[2013-11-19 04:03:49] irc: connecting to server tardis.uni.cx/60665 (SSL)...
-[2013-11-19 04:04:09] irc: connecting to server tardis.uni.cx/60665 (SSL)...
-[2013-11-19 04:30:41] irc: connecting to server tardis.uni.cx/60665 (SSL)...
-[2013-11-19 05:08:56] irc: connecting to server tardis.uni.cx/60665 (SSL)...
-[2013-11-19 08:38:12] irc: connecting to server tardis.uni.cx/60665 (SSL)...
-[2013-11-19 08:38:12] irc: connecting to server tardis.uni.cx/60665 (SSL)...
-[2013-11-19 08:38:29] Signal SIGTERM received, exiting WeeChat...
-[2013-11-19 08:38:29] Writing configuration file plugins.conf 
-[2013-11-19 08:38:29] Writing configuration file iset.conf 
-[2013-11-19 08:38:29] Writing configuration file xfer.conf 
-[2013-11-19 08:38:29] Writing configuration file script.conf 
-[2013-11-19 08:38:29] Writing configuration file rmodifier.conf 
-[2013-11-19 08:38:29] Writing configuration file relay.conf 
-[2013-11-19 08:38:29] Writing configuration file logger.conf 
-[2013-11-19 08:38:29] Writing configuration file irc.conf 
-[2013-11-19 08:38:30] Writing configuration file charset.conf 
-[2013-11-19 08:38:30] Writing configuration file aspell.conf 
-[2013-11-19 08:38:30] Writing configuration file alias.conf 
-[2013-11-19 08:38:30] Writing configuration file weechat.conf 
index 7a639ea4a3bf4758d4db5630852e3d681b68007f..8f0f5513e158057bed2f25e11b653fd1f9894c1b 100644 (file)
@@ -1,10 +1,11 @@
 #
-# xfer.conf -- weechat v0.4.1
+# xfer.conf -- weechat v0.4.2
 #
 
 [look]
 auto_open_buffer = on
 progress_bar_size = 20
+pv_tags = "notify_private"
 
 [color]
 status_aborted = lightred