summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-02-26 20:59:10 -0500
committerJesse Luehrs <doy@tozt.net>2021-02-26 20:59:10 -0500
commit27fe2da22ec435457926172989f2b8a41e23b1be (patch)
tree9edfac8138716bbf8b023d7986ae0acb293a6a89
parenta5acbebbe557323e7ba57cc79735389a100d14f0 (diff)
downloadconf-27fe2da22ec435457926172989f2b8a41e23b1be.tar.gz
conf-27fe2da22ec435457926172989f2b8a41e23b1be.zip
stop using irc
-rw-r--r--Makefile3
-rwxr-xr-xbin/weechat-config29
-rw-r--r--config/weechat/extra24
-rw-r--r--config/weechat/saved263
-rw-r--r--weechat/perl/autoload/beep.pl257
-rw-r--r--weechat/perl/autoload/buffers.pl1292
-rw-r--r--weechat/perl/autoload/chanmon.pl1154
-rw-r--r--weechat/perl/autoload/chatters.pl287
8 files changed, 0 insertions, 3309 deletions
diff --git a/Makefile b/Makefile
index fdf72b3..5997c20 100644
--- a/Makefile
+++ b/Makefile
@@ -26,8 +26,6 @@ INSTALL := \
.config/tex/jesse.sty \
.config/tex/sarah_resume.sty \
.config/tig/config \
- .config/weechat/saved \
- .config/weechat/extra \
.config/zsh/local-completions \
.config/zsh/zsh-autosuggestions \
.config/zsh/zsh-completions \
@@ -58,7 +56,6 @@ INSTALL := \
.bin \
.dzil \
.vim \
- .weechat/perl \
EMPTYDIRS := \
$(EMPTYDIRS) \
diff --git a/bin/weechat-config b/bin/weechat-config
deleted file mode 100755
index b040207..0000000
--- a/bin/weechat-config
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-set -eu
-set -o pipefail
-
-weechat_fifo="${HOME}/.weechat/weechat_fifo"
-weechat_saved_config="${HOME}/.config/weechat/saved"
-weechat_extra_config="${HOME}/.config/weechat/extra"
-
-die() {
- echo "$@" >&2
- exit 1
-}
-
-weechat() {
- [ -p "$weechat_fifo" ] || die "$weechat_fifo is not a fifo"
- echo "*${1}" >> "$weechat_fifo"
-}
-
-case "$1" in
-save)
- # shellcheck disable=SC2016
- weechat '/fset c:${value_changed} && "${file}.${section}" != "irc.server"'
- weechat "/eval /fset -export ${weechat_saved_config}"
- weechat '/buffer close fset'
- ;;
-restore)
- weechat "/exec -oc grep -h '^/' ${weechat_saved_config} ${weechat_extra_config}"
- ;;
-esac
diff --git a/config/weechat/extra b/config/weechat/extra
deleted file mode 100644
index 9d0cc4a..0000000
--- a/config/weechat/extra
+++ /dev/null
@@ -1,24 +0,0 @@
-/bar del buflist
-/alias add w /buffer
-/filter add irc_smart * irc_smart_filter *
-/key bind ctrl-W /buffer close
-/key bind meta-! /buffer *1
-/key bind meta-@ /buffer *2
-/key bind meta-# /buffer *3
-/key bind meta-$ /buffer *4
-/key bind meta-% /buffer *5
-/key bind meta-^ /buffer *6
-/key bind meta-& /buffer *7
-/key bind meta-* /buffer *8
-/key bind meta-( /buffer *9
-/key bind meta-) /buffer *10
-/key bind meta-q /buffer *11
-/key bind meta-w /buffer *12
-/key bind meta-e /buffer *13
-/key bind meta-r /buffer *14
-/key bind meta-t /buffer *15
-/key bind meta-y /buffer *16
-/key bind meta-u /buffer *17
-/key bind meta-i /buffer *18
-/key bind meta-o /buffer *19
-/key bind meta-p /buffer *20
diff --git a/config/weechat/saved b/config/weechat/saved
deleted file mode 100644
index 7452c56..0000000
--- a/config/weechat/saved
+++ /dev/null
@@ -1,263 +0,0 @@
-# default dictionary (or comma separated list of dictionaries) to use when buffer has no dictionary defined (leave blank to disable aspell on buffers for which you didn't explicitly enabled it)
-/set aspell.check.default_dict "en"
-
-# background color for current buffer
-/set buffers.color.current_bg default
-
-# default foreground color for buffer name
-/set buffers.color.default_fg darkgray
-
-# change foreground color of buffer name if a highlight messaged received
-/set buffers.color.hotlist_highlight_fg lightmagenta
-
-# change foreground color of buffer name if a low message received
-/set buffers.color.hotlist_low_fg cyan
-
-# change foreground color of buffer name if a normal message received
-/set buffers.color.hotlist_message_fg white
-
-# foreground color for none channel buffer (e.g.: core/server/plugin buffer)
-/set buffers.color.none_channel_fg darkgray
-
-# 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.
-/set buffers.look.hide_merged_buffers server
-
-# contains an optional char(s) that is appended when buffer name is shortened
-/set buffers.look.name_crop_suffix ""
-
-# maximum size of buffer name. 0 means no limitation
-/set buffers.look.name_size_max 3
-
-# display a char behind channel number
-/set buffers.look.number_char ""
-
-# color for nick in input bar
-/set irc.color.input_nick white
-
-# color for channel modes, near channel name
-/set irc.color.item_channel_modes darkgray
-
-# color for text in join messages
-/set irc.color.message_join darkgray
-
-# color for text in part/quit messages
-/set irc.color.message_quit darkgray
-
-# color for text "Notice" in notices
-/set irc.color.notice darkgray
-
-# color for reason in part/quit messages
-/set irc.color.reason_quit darkgray
-
-# color for old channel topic (when topic is changed)
-/set irc.color.topic_old darkgray
-
-# comma separated list of words to highlight in channel buffers (case insensitive, use "(?-i)" at beginning of words to make them case sensitive; special variables $nick, $channel and $server are replaced by their value), these words are added to buffer property "highlight_words" only when buffer is created (it does not affect current buffers), an empty string disables default highlight on nick, examples: "$nick", "(?-i)$nick"
-/set irc.look.highlight_channel "$nick,doy,doyster,@doyster,thedoyster,jesse"
-
-# interval between two checks for lag (in seconds, 0 = never check)
-/set irc.network.lag_check 5
-
-# minimum lag to show (in milliseconds)
-/set irc.network.lag_min_show 4000
-
-# reconnect to server if lag is greater than or equal to this value (in seconds, 0 = never reconnect); this value must be less than or equal to irc.network.lag_max
-/set irc.network.lag_reconnect 10
-
-# nicknames to use on server (separated by comma) (note: content is evaluated, see /help eval; server options are evaluated with ${irc_server.xxx} and ${server} is replaced by the server name)
-/set irc.server_default.nicks "doy,doy1,doy2,doy3,doy4"
-
-# user name to use on server (note: content is evaluated, see /help eval; server options are evaluated with ${irc_server.xxx} and ${server} is replaced by the server name)
-/set irc.server_default.username "doy"
-
-# color for line ending the backlog
-/set logger.color.backlog_end darkgray
-
-# color for backlog lines
-/set logger.color.backlog_line darkgray
-
-# default file name mask for log files (format is "directory/to/file" or "file", without first "/" because "path" option is used to build complete path to file); local buffer variables are permitted (you should use only variables that are defined on all buffers, so for example you should NOT use $server nor $channel); date specifiers are permitted (see man strftime)
-/set logger.file.mask "$server/$channel-%Y-%m.log"
-
-# path for WeeChat log files; "%h" at beginning of string is replaced by WeeChat home ("~/.weechat" by default); date specifiers are permitted (see man strftime) (note: content is evaluated, see /help eval)
-/set logger.file.path "~/irclogs/"
-
-# command for beep on dcc, special value "$bell" is allowed, as well as "$bell;command" (default: "$bell")
-/set plugins.var.perl.beep.beep_command_dcc "$bell"
-
-# command for beep on highlight, special value "$bell" is allowed, as well as "$bell;command" (default: "$bell")
-/set plugins.var.perl.beep.beep_command_highlight "$bell"
-
-# command for beep on private message, special value "$bell" is allowed, as well as "$bell;command" (default: "$bell")
-/set plugins.var.perl.beep.beep_command_pv "$bell"
-
-# timeout for command run (in milliseconds, 0 = never kill (not recommended)) (default: "30000")
-/set plugins.var.perl.beep.beep_command_timeout "30000"
-
-# beep on dcc (default: "on")
-/set plugins.var.perl.beep.beep_dcc "on"
-
-# beep on highlight (default: "on")
-/set plugins.var.perl.beep.beep_highlight "on"
-
-# turn blacklist for highlights on or off (default: "off")
-/set plugins.var.perl.beep.beep_highlight_blacklist "off"
-
-# turn whitelist for highlights on or off (default: "off")
-/set plugins.var.perl.beep.beep_highlight_whitelist "off"
-
-# beep on private message (default: "on")
-/set plugins.var.perl.beep.beep_pv "on"
-
-# turn blacklist for private messages on or off (default: "off")
-/set plugins.var.perl.beep.beep_pv_blacklist "off"
-
-# turn whitelist for private messages on or off (default: "off")
-/set plugins.var.perl.beep.beep_pv_whitelist "off"
-
-# (no description)
-/set plugins.var.perl.chanmon.alignment "schannel"
-
-# (no description)
-/set plugins.var.perl.chanmon.bar_lines "2"
-
-# (no description)
-/set plugins.var.perl.chanmon.color_buf "on"
-
-# (no description)
-/set plugins.var.perl.chanmon.dynamic "off"
-
-# (no description)
-/set plugins.var.perl.chanmon.logging "off"
-
-# (no description)
-/set plugins.var.perl.chanmon.merge_private "on"
-
-# (no description)
-/set plugins.var.perl.chanmon.nick_prefix "<"
-
-# (no description)
-/set plugins.var.perl.chanmon.nick_suffix ">"
-
-# (no description)
-/set plugins.var.perl.chanmon.output "bar"
-
-# (no description)
-/set plugins.var.perl.chanmon.short_names "on"
-
-# (no description)
-/set plugins.var.perl.chanmon.show_aways "off"
-
-# (no description)
-/set plugins.var.perl.chatters.frame_color "red"
-
-# (no description)
-/set plugins.var.perl.chatters.nick_color "yellow"
-
-# (no description)
-/set plugins.var.perl.chatters.nick_timeout "600"
-
-# text color of delimiters in script buffer
-/set script.color.text_delimiters darkgray
-
-# true if bar is hidden, false if it is displayed
-/set weechat.bar.buffers.hidden off
-
-# items of bar, they can be separated by comma (space between items) or "+" (glued items); special syntax "@buffer:item" can be used to force buffer used when displaying the bar item
-/set weechat.bar.buffers.items "buffers"
-
-# items of bar, they can be separated by comma (space between items) or "+" (glued items); special syntax "@buffer:item" can be used to force buffer used when displaying the bar item
-/set weechat.bar.chanmon.items "chanmon"
-
-# items of bar, they can be separated by comma (space between items) or "+" (glued items); special syntax "@buffer:item" can be used to force buffer used when displaying the bar item
-/set weechat.bar.fset.items "fset"
-
-# items of bar, they can be separated by comma (space between items) or "+" (glued items); special syntax "@buffer:item" can be used to force buffer used when displaying the bar item
-/set weechat.bar.nicklist.items "chatters,buffer_nicklist"
-
-# items of bar, they can be separated by comma (space between items) or "+" (glued items); special syntax "@buffer:item" can be used to force buffer used when displaying the bar item
-/set weechat.bar.status.items "[time],[buffer_plugin],buffer_number+:+buffer_name+{buffer_nicklist_count}+buffer_filter,[lag],completion,scroll"
-
-# text color for channel names
-/set weechat.color.chat_channel darkgray
-
-# text color for delimiters
-/set weechat.color.chat_delimiters darkgray
-
-# background color for highlighted prefix
-/set weechat.color.chat_highlight_bg default
-
-# text color for hostnames
-/set weechat.color.chat_host darkgray
-
-# text color for chat when line is inactive (buffer is merged with other buffers and is not selected)
-/set weechat.color.chat_inactive_buffer darkgray
-
-# text color for chat when window is inactive (not current selected window)
-/set weechat.color.chat_inactive_window darkgray
-
-# text color for nicks in chat window: used in some server messages and as fallback when a nick color is not found; most of times nick color comes from option weechat.color.chat_nick_colors
-/set weechat.color.chat_nick darkgray
-
-# text color for nicks (comma separated list of colors, background is allowed with format: "fg:bg", for example: "lightred:blue")
-/set weechat.color.chat_nick_colors "cyan,magenta,green,brown,red,blue"
-
-# text color for offline nick (not in nicklist any more); this color is used only if option weechat.look.color_nick_offline is enabled
-/set weechat.color.chat_nick_offline darkgray
-
-# background color for offline nick with highlight; this color is used only if option weechat.look.color_nick_offline is enabled
-/set weechat.color.chat_nick_offline_highlight_bg darkgray
-
-# color for nick prefix (string displayed before nick in prefix)
-/set weechat.color.chat_nick_prefix black
-
-# color for nick suffix (string displayed after nick in prefix)
-/set weechat.color.chat_nick_suffix black
-
-# text color for inactive buffer name (before prefix, when many buffers are merged with same number and if buffer is not selected)
-/set weechat.color.chat_prefix_buffer_inactive_buffer darkgray
-
-# text color for join prefix
-/set weechat.color.chat_prefix_join darkgray
-
-# text color for network prefix
-/set weechat.color.chat_prefix_network darkgray
-
-# text color for quit prefix
-/set weechat.color.chat_prefix_quit darkgray
-
-# text color for unread data marker
-/set weechat.color.chat_read_marker darkgray
-
-# text color for time delimiters
-/set weechat.color.chat_time_delimiters default
-
-# default notify level for buffers (used to tell WeeChat if buffer must be displayed in hotlist or not, according to importance of message): all=all messages (default), message=messages+highlights, highlight=highlights only, none=never display in hotlist
-/set weechat.look.buffer_notify_default message
-
-# if set, uses real white color, disabled by default for terms with white background (if you never use white background, you should turn on this option to see real white instead of default term foreground color)
-/set weechat.look.color_real_white on
-
-# comma separated list of tags to highlight; case insensitive comparison; wildcard "*" is allowed in each tag; many tags can be separated by "+" to make a logical "and" between tags; examples: "nick_flashcode" for messages from nick "FlashCode", "irc_notice+nick_toto*" for notices from a nick starting with "toto"
-/set weechat.look.highlight_tags "notify_private"
-
-# level for displaying names in hotlist (combination of: 1=join/part, 2=message, 4=private, 8=highlight, for example: 12=private+highlight)
-/set weechat.look.hotlist_names_level 14
-
-# text to display before nick in prefix of message, example: "<"
-/set weechat.look.nick_prefix "<"
-
-# text to display after nick in prefix of message, example: ">"
-/set weechat.look.nick_suffix ">"
-
-# string displayed after prefix
-/set weechat.look.prefix_suffix ""
-
-# string used to draw read marker line (string is repeated until end of line)
-/set weechat.look.read_marker_string "-"
-
-# percent of screen to scroll when scrolling one page up or down (for example 100 means one page, 50 half-page)
-/set weechat.look.scroll_page_percent 50
-
-# comma separated list of plugins to load automatically at startup, "*" means all plugins found, a name beginning with "!" is a negative value to prevent a plugin from being loaded, wildcard "*" is allowed in names (examples: "*" or "*,!lua,!tcl")
-/set weechat.plugin.autoload "*,!buflist"
diff --git a/weechat/perl/autoload/beep.pl b/weechat/perl/autoload/beep.pl
deleted file mode 100644
index 69096c2..0000000
--- a/weechat/perl/autoload/beep.pl
+++ /dev/null
@@ -1,257 +0,0 @@
-#
-# Copyright (C) 2006-2012 Sebastien Helleu <flashcode@flashtux.org>
-# Copyright (C) 2011 Nils Görs <weechatter@arcor.de>
-# Copyright (C) 2011 ArZa <arza@arza.us>
-#
-# 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/>.
-#
-#
-# Beep (terminal bell) and/or run command on highlight/private message or new DCC.
-#
-# History:
-# 2012-06-05, ldvx<ldvx@freenode>:
-# version 1.1: Added wildcard support for whitelist_nicks.
-# 2012-05-09, ldvx <ldvx@freenode>:
-# version 1.0: Added beep_pv_blacklist, beep_highlight_blacklist, blacklist_nicks,
-# and wildcard support for blacklist_nicks.
-# 2012-05-02, ldvx <ldvx@freenode>:
-# version 0.9: fix regex for nick in tags, add options "whitelist_channels"
-# and "bell_always"
-# 2012-04-19, ldvx <ldvx@freenode>:
-# version 0.8: add whitelist, trigger, use hook_process for commands,
-# rename option "beep_command" to "beep_command_pv", add help for options
-# 2011-04-16, ArZa <arza@arza.us>:
-# version 0.7: fix default beep command
-# 2011-03-11, nils_2 <weechatter@arcor.de>:
-# version 0.6: add additional command options for dcc and highlight
-# 2011-03-09, nils_2 <weechatter@arcor.de>:
-# version 0.5: add option for beep command and dcc
-# 2009-05-02, Sebastien Helleu <flashcode@flashtux.org>:
-# version 0.4: sync with last API changes
-# 2008-11-05, Sebastien Helleu <flashcode@flashtux.org>:
-# version 0.3: conversion to WeeChat 0.3.0+
-# 2007-08-10, Sebastien Helleu <flashcode@flashtux.org>:
-# version 0.2: upgraded licence to GPL 3
-# 2006-09-02, Sebastien Helleu <flashcode@flashtux.org>:
-# version 0.1: initial release
-
-use strict;
-my $SCRIPT_NAME = "beep";
-my $VERSION = "1.1";
-
-# default values in setup file (~/.weechat/plugins.conf)
-my %options_default = ('beep_pv' => ['on', 'beep on private message'],
- 'beep_pv_whitelist' => ['off', 'turn whitelist for private messages on or off'],
- 'beep_pv_blacklist' => ['off', 'turn blacklist for private messages on or off'],
- 'beep_highlight' => ['on', 'beep on highlight'],
- 'beep_highlight_whitelist' => ['off', 'turn whitelist for highlights on or off'],
- 'beep_highlight_blacklist' => ['off', 'turn blacklist for highlights on or off'],
- 'beep_dcc' => ['on', 'beep on dcc'],
- 'beep_trigger_pv' => ['', 'word that will trigger execution of beep_command_pv (it empty, anything will trigger)'],
- 'beep_trigger_highlight' => ['', 'word that will trigger execution of beep_command_highlight (if empty, anything will trigger)'],
- 'beep_command_pv' => ['$bell', 'command for beep on private message, special value "$bell" is allowed, as well as "$bell;command"'],
- 'beep_command_highlight' => ['$bell', 'command for beep on highlight, special value "$bell" is allowed, as well as "$bell;command"'],
- 'beep_command_dcc' => ['$bell', 'command for beep on dcc, special value "$bell" is allowed, as well as "$bell;command"'],
- 'beep_command_timeout' => ['30000', 'timeout for command run (in milliseconds, 0 = never kill (not recommended))'],
- 'whitelist_nicks' => ['', 'comma-separated list of "server.nick": if not empty, only these nicks will trigger execution of commands (example: "freenode.nick1,freenode.nick2")'],
- 'blacklist_nicks' => ['', 'comma-separated list of "server.nick": if not empty, these nicks will not be able to trigger execution of commands. Cannot be used in conjuction with whitelist (example: "freenode.nick1,freenode.nick2")'],
- 'whitelist_channels' => ['', 'comma-separated list of "server.#channel": if not empty, only these channels will trigger execution of commands (example: "freenode.#weechat,freenode.#channel2")'],
- 'bell_always' => ['', 'use $bell on private messages and/or highlights regardless of trigger and whitelist settings (example: "pv,highlight")'],
-);
-my %options = ();
-
-weechat::register($SCRIPT_NAME, "FlashCode <flashcode\@flashtux.org>", $VERSION,
- "GPL3", "Beep (terminal bell) and/or run command on highlight/private message or new DCC", "", "");
-init_config();
-
-weechat::hook_config("plugins.var.perl.$SCRIPT_NAME.*", "toggle_config_by_set", "");
-weechat::hook_print("", "", "", 1, "pv_and_highlight", "");
-weechat::hook_signal("irc_dcc", "dcc", "");
-
-sub pv_and_highlight
-{
- my ($data, $buffer, $date, $tags, $displayed, $highlight, $prefix, $message) = @_;
-
- # return if message is filtered
- return weechat::WEECHAT_RC_OK if ($displayed != 1);
-
- # return if nick in message is own nick
- my $nick = "";
- $nick = $2 if ($tags =~ m/(^|,)nick_([^,]*)(,|$)/);
- return weechat::WEECHAT_RC_OK if (weechat::buffer_get_string($buffer, "localvar_nick") eq $nick);
-
- # highlight
- if ($highlight)
- {
- # Always print visual bel, regardless of whitelist and trigger settings
- # beep_command_highlight does not need to contain $bell
- if ($options{bell_always} =~ m/(^|,)highlight(,|$)/)
- {
- print STDERR "\a";
- }
- # Channels whitelist for highlights
- if ($options{beep_highlight} eq "on")
- {
- if ($options{whitelist_channels} ne "")
- {
- my $serverandchannel = weechat::buffer_get_string($buffer, "localvar_server"). "." .
- weechat::buffer_get_string($buffer, "localvar_channel");
- if ($options{beep_trigger_highlight} eq "" or $message =~ m/\b$options{beep_trigger_highlight}\b/)
- {
- if ($options{whitelist_channels} =~ /(^|,)$serverandchannel(,|$)/)
- {
- beep_exec_command($options{beep_command_highlight});
- }
- # What if we are highlighted and we're in a PM? For now, do nothing.
- }
- }
- else
- {
- # Execute $bell and/or command with trigger and whitelist/blacklist settings
- beep_trigger_whitelist_blacklist($buffer, $message, $nick, $options{beep_trigger_highlight},
- $options{beep_highlight_whitelist}, $options{beep_highlight_blacklist},
- $options{beep_command_highlight});
- }
- }
- }
- # private message
- elsif (weechat::buffer_get_string($buffer, "localvar_type") eq "private" and $tags =~ m/(^|,)notify_private(,|$)/)
- {
- # Always print visual bel, regardless of whitelist and trigger settings
- # beep_command_pv does not need to contain $bell
- if ($options{bell_always} =~ m/(^|,)pv(,|$)/)
- {
- print STDERR "\a";
- }
- # Execute $bell and/or command with trigger and whitelist/blacklist settings
- if ($options{beep_pv} eq "on")
- {
- beep_trigger_whitelist_blacklist($buffer, $message, $nick, $options{beep_trigger_pv},
- $options{beep_pv_whitelist}, $options{beep_pv_blacklist},
- $options{beep_command_pv});
- }
- }
- return weechat::WEECHAT_RC_OK;
-}
-
-sub dcc
-{
- beep_exec_command($options{beep_command_dcc}) if ($options{beep_dcc} eq "on");
- return weechat::WEECHAT_RC_OK;
-}
-
-sub beep_trigger_whitelist_blacklist
-{
- my ($buffer, $message, $nick, $trigger, $whitelist, $blacklist, $command) = @_;
-
- if ($trigger eq "" or $message =~ m/\b$trigger\b/)
- {
- my $serverandnick = weechat::buffer_get_string($buffer, "localvar_server").".".$nick;
- if ($whitelist eq "on" and $options{whitelist_nicks} ne "")
- {
- # What to do if there's a wildcard in the whitelit
- if ($options{whitelist_nicks} =~ m/\*/ and
- match_in_wild_card($serverandnick, $options{whitelist_nicks}))
- {
- beep_exec_command($command);
- }
- # What to do if there's no wildcard in the whitelist
- elsif ($options{whitelist_nicks} =~ /(^|,)$serverandnick(,|$)/)
- {
- beep_exec_command($command);
- }
- }
- elsif ($blacklist eq "on" and $options{blacklist_nicks} ne "")
- {
- # What to do if there's a wildcard in the blacklist
- if ($options{blacklist_nicks} =~ m/\*/ and
- !match_in_wild_card($serverandnick, $options{blacklist_nicks}))
- {
- beep_exec_command($command);
- }
- # What to do if there's no wildcard in the blacklist
- elsif ($options{blacklist_nicks} !~ /(^|,)$serverandnick(,|$)/)
- {
- beep_exec_command($command);
- }
- }
- # What to do if we are not using whitelist of blacklist feature
- elsif ($whitelist eq "off" and $blacklist eq "off")
- {
- beep_exec_command($command);
- }
- }
-}
-
-sub beep_exec_command
-{
- my $command = $_[0];
- if ($command =~ /^\$bell/)
- {
- print STDERR "\a";
- ($command) = $command =~ /^\$bell;(.+)$/;
- }
- weechat::hook_process($command, $options{beep_command_timeout}, "my_process", "") if ($command);
-}
-
-sub match_in_wild_card
-{
- my ($serverandnick, $white_or_black) = @_;
- my $nick_iter;
- my @array_of_nicks = split(",", $white_or_black);
-
- foreach $nick_iter (@array_of_nicks)
- {
- $nick_iter =~ s/\*/[^,]*/g;
- if ($serverandnick =~ /$nick_iter/)
- {
- return 1;
- }
- }
- return 0;
-}
-
-sub my_process
-{
- return weechat::WEECHAT_RC_OK;
-}
-
-sub toggle_config_by_set
-{
- my ($pointer, $name, $value) = @_;
- $name = substr($name, length("plugins.var.perl.".$SCRIPT_NAME."."), length($name));
- $options{$name} = $value;
- return weechat::WEECHAT_RC_OK;
-}
-
-sub init_config
-{
- my $version = weechat::info_get("version_number", "") || 0;
- foreach my $option (keys %options_default)
- {
- if (!weechat::config_is_set_plugin($option))
- {
- weechat::config_set_plugin($option, $options_default{$option}[0]);
- $options{$option} = $options_default{$option}[0];
- }
- else
- {
- $options{$option} = weechat::config_get_plugin($option);
- }
- if ($version >= 0x00030500)
- {
- weechat::config_set_desc_plugin($option, $options_default{$option}[1]." (default: \"".$options_default{$option}[0]."\")");
- }
- }
-}
diff --git a/weechat/perl/autoload/buffers.pl b/weechat/perl/autoload/buffers.pl
deleted file mode 100644
index 6323dc7..0000000
--- a/weechat/perl/autoload/buffers.pl
+++ /dev/null
@@ -1,1292 +0,0 @@
-#
-# 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-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.0";
-
-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 @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", "horizontal",
- "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 seperated 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_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
- 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)
- {
- my $name = $buffer->{"short_name"};
- $name = '?' . $name if $buffer->{"type"} eq 'private';
-
- if (weechat::config_integer($options{"name_size_max"}) >= 1) # check max_size of buffer name
- {
- $str .= encode("UTF-8", substr(decode("UTF-8", $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($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 .= $name;
- $str .= add_inactive_parentless($buffer->{"type"},$buffer->{"nicks_count"});
- $str .= add_hotlist_count($buffer->{"pointer"},%hotlist);
- }
- }
- else
- {
- my $name = $buffer->{"name"};
- $name = '?' . $name if $buffer->{"type"} eq 'private';
-
- if (weechat::config_integer($options{"name_size_max"}) >= 1) # check max_size of buffer name
- {
- $str .= encode("UTF-8", substr(decode("UTF-8", $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($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 .= $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
-{
- 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 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/autoload/chanmon.pl b/weechat/perl/autoload/chanmon.pl
deleted file mode 100644
index 14c0b1e..0000000
--- a/weechat/perl/autoload/chanmon.pl
+++ /dev/null
@@ -1,1154 +0,0 @@
-#
-# chanmon.pl - Channel Monitoring for weechat 0.3.0
-# Version 2.4
-#
-# Add 'Channel Monitor' buffer/bar that you can position to show IRC channel
-# messages in a single location without constantly switching buffers
-# i.e. In a seperate window beneath the main channel buffer
-#
-# Usage:
-# /chanmon [help] | [monitor [channel [server]]] | [dynmon] | [clean default|orphan|all]
-# Command wrapper for chanmon commands
-#
-# /chmonitor [channel] [server] is used to toggle a channel 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. /monitor #weechat freenode
-#
-# /dynmon is used to toggle 'Dynamic Channel Monitoring' on and off, this
-# will automagically stop monitoring the current active buffer, without
-# affecting regular settings (Default is off)
-#
-# /chanclean default|orphan|all will clean the config section of default 'on' entries,
-# channels you are no longer joined, or both
-#
-# /set plugins.var.perl.chanmon.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.chanmon.short_names
-# Setting this to 'on' will trim the network name from chanmon, ala buffers.pl
-#
-# /set plugins.var.perl.chanmon.merge_private
-# Setting this to 'on' will merge private messages to chanmon's display
-#
-# /set plugins.var.perl.chanmon.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.chanmon.show_aways
-# Toggles showing the Weechat away messages
-#
-# /set plugins.var.perl.chanmon.logging
-# Toggles logging status for chanmon buffer (default: off)
-#
-# /set plugins.var.perl.chanmon.output
-# Changes where output method of chanmon; takes either "bar" or "buffer" (default; buffer)
-# /set plugins.var.perl.chanmon.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.chanmon.nick_prefix
-# /set plugins.var.perl.chanmon.nick_suffix
-# Sets the prefix and suffix chars in the chanmon 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)
-#
-# Example set up:
-# Split the layout 70/30 (or there abouts) horizontally and load
-# Optionally, make the status and input lines only show on active windows
-#
-# /window splith 70 --> open the chanmon buffer
-# /set weechat.bar.status.conditions "active"
-# /set weechat.bar.input.conditions "active"
-#
-
-# Bugs and feature requests at: https://github.com/KenjiE20/chanmon
-
-# History:
-# 2013-12-04, KenjiE20 <longbow@longbowslair.co.uk>:
-# v2.4: -add: Support for eval style colour codes in time format used for bar output
-# 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
-# -change: Ideal set up -> Example set up
-# 2012-04-15, KenjiE20 <longbow@longbowslair.co.uk>:
-# v2.3.1: -fix: Colour tags in bar timestamp string, bar error fixes from highmon
-# 2012-02-28, KenjiE20 <longbow@longbowslair.co.uk>:
-# v2.3: -feature: Added merge_private option to display private messages (default: off)
-# 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-05, KenjiE20 <longbow@longbowslair.co.uk>:
-# v2.1.3: -change: /monitor is now /chmonitor to avoid command conflicts (thanks m4v)
-# (/chanmon monitor remains the same)
-# -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)
-# 2010-09-20, m4v <lambdae2@gmail.com>:
-# v2.1.1: -fix: chanmon wasn't detecting buffers displayed on more than one window
-# 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>:
-# -fix: No longer using hard-coded detection for ACTION and
-# TOPIC messages. Use config settings for ACTION printing
-# 2010-04-15, KenjiE20 <longbow@longbowslair.co.uk>:
-# v1.9: Rewrite for v2.0
-# -feature: /monitor takes arguments
-# -feature: Added /chanclean for config cleanup
-# -feature: Buffer logging option (default: off)
-# -feature: Selectable output (Bar/Buffer (default))
-# -feature: /chanmon is now a command wrapper for all commands
-# /help chanmon gives command help
-# /chanmon help gives config help
-# -code change: Made more subs to shrink the code down in places
-# -fix: Stop chanmon attempting to double load/hook
-# 2010-02-10, m4v <lambdae2@gmail.com>:
-# v1.7.1: -fix: chanmon was leaking infolists, changed how chanmon
-# detects if the buffer is displayed or not.
-# 2010-01-25, KenjiE20 <longbow@longbowslair.co.uk>:
-# v1.7: -fixture: Let chanmon be aware of nick_prefix/suffix
-# and allow custom prefix/suffix for chanmon buffer
-# (Defaults to <> if nothing set, and blank if there is)
-# -fix: Make dynamic monitoring aware of multiple windows
-# rather than just the active buffer
-# (Thanks to m4v for these)
-# 2009-09-07, KenjiE20 <longbow@longbowslair.co.uk>:
-# v1.6: -feature: colored buffer names
-# -change: chanmon version sync
-# 2009-09-05, KenjiE20 <longbow@longbowslair.co.uk>:
-# v1.5: -fix: disable buffer highlight
-# 2009-09-02, KenjiE20 <longbow@longbowslair.co.uk>:
-# v.1.4.1 -change: Stop unsightly text block on '/help'
-# 2009-08-10, KenjiE20 <longbow@longbowslair.co.uk>:
-# v1.4: -feature: In-client help added
-# -fix: Added missing help entries
-# Fix remaining ugly vars
-# 2009-07-09, KenjiE20 <longbow@longbowslair.co.uk>:
-# v.1.3.3 -fix: highlight on the channel monitor when someone /me highlights
-# 2009-07-04, KenjiE20 <longbow@longbowslair.co.uk>:
-# v.1.3.2 -fix: use new away_info tag instead of ugly regexp for away detection
-# -code: cleanup old raw callback arguement variables to nice neat named ones
-# 2009-07-04, KenjiE20 <longbow@longbowslair.co.uk>:
-# v.1.3.1 -feature(tte): Hide /away messages by default, change 'show_aways' to get them back
-# 2009-07-01, KenjiE20 <longbow@longbowslair.co.uk>:
-# v.1.3 -feature(tte): Mimic buffers.pl 'short_names'
-# 2009-06-29, KenjiE20 <longbow@longbowslair.co.uk>:
-# v.1.2.1 -fix: let the /monitor message respect the alignment setting
-# 2009-06-19, KenjiE20 <longbow@longbowslair.co.uk>:
-# v.1.2 -feature(tte): Customisable alignment
-# Thanks to 'FreakGaurd' for the idea
-# 2009-06-14, KenjiE20 <longbow@longbowslair.co.uk>:
-# v.1.1.2 -fix: don't assume chanmon buffer needs creating
-# fixes crashing with /upgrade
-# 2009-06-13, KenjiE20 <longbow@longbowslair.co.uk>:
-# v.1.1.1 -code: change from True/False to on/off for weechat consistency
-# Settings WILL NEED to be changed manually from previous versions
-# 2009-06-13, KenjiE20 <longbow@longbowslair.co.uk>:
-# v1.1: -feature: Dynamic Channel Monitoring,
-# don't display messages from active channel buffer
-# defaults to Disabled
-# Thanks to 'sjohnson' for the idea
-# -fix: don't set config entries for non-channels
-# -fix: don't assume all channels are #
-# 2009-06-12, KenjiE20 <longbow@longbowslair.co.uk>:
-# v1.0.1: -fix: glitch with tabs in IRC messages
-# 2009-06-10, 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
-$chanmonhelp = weechat::color("bold")."/chanmon [help] | [monitor [channel [server]]] | [dynmon] | [clean default|orphan|all]".weechat::color("-bold")."
-Command wrapper for chanmon commands
-
-".weechat::color("bold")."/chmonitor [channel] [server]".weechat::color("-bold")." is used to toggle a channel 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. /monitor #weechat freenode
-
-".weechat::color("bold")."/dynmon".weechat::color("-bold")." is used to toggle 'Dynamic Channel Monitoring' on and off, this will automagically stop monitoring the current active buffer, without affecting regular settings (Default is off)
-
-".weechat::color("bold")."/chanclean".weechat::color("-bold")." default|orphan|all will clean the config section of default 'on' entries, channels you are no longer joined, or both
-
-".weechat::color("bold")."/set plugins.var.perl.chanmon.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.chanmon.short_names".weechat::color("-bold")."
- Setting this to 'on' will trim the network name from chanmon, ala buffers.pl
-
-".weechat::color("bold")."/set plugins.var.perl.chanmon.merge_private".weechat::color("-bold")."
- Setting this to 'on' will merge private messages to chanmon's display
-
-".weechat::color("bold")."/set plugins.var.perl.chanmon.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.chanmon.show_aways".weechat::color("-bold")."
- Toggles showing the Weechat away messages
-
-".weechat::color("bold")."/set plugins.var.perl.chanmon.logging".weechat::color("-bold")."
- Toggles logging status for chanmon buffer (default: off)
-
-".weechat::color("bold")."/set plugins.var.perl.chanmon.output".weechat::color("-bold")."
- Changes where output method of chanmon; takes either \"bar\" or \"buffer\" (default; buffer)
-".weechat::color("bold")."/set plugins.var.perl.chanmon.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.chanmon.nick_prefix".weechat::color("-bold")."
-".weechat::color("bold")."/set plugins.var.perl.chanmon.nick_suffix".weechat::color("-bold")."
- Sets the prefix and suffix chars in the chanmon 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)
-
-".weechat::color("bold")."Example set up:".weechat::color("-bold")."
-Split the layout 70/30 (or there abouts) horizontally and load
-Optionally, make the status and input lines only show on active windows
-
-".weechat::color("bold")."/window splith 70 --> open the chanmon buffer".weechat::color("-bold")."
-".weechat::color("bold")."/set weechat.bar.status.conditions \"active\"".weechat::color("-bold")."
-".weechat::color("bold")."/set weechat.bar.input.conditions \"active\"".weechat::color("-bold");
-# Print verbose help
-sub print_help
-{
- weechat::print("", "\t".weechat::color("bold")."Chanmon Help".weechat::color("-bold")."\n\n");
- weechat::print("", "\t".$chanmonhelp);
- return weechat::WEECHAT_RC_OK;
-}
-
-# Bar item build
-sub chanmon_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 chanmon_bar_open
-{
- # Make the bar item
- weechat::bar_item_new("chanmon", "chanmon_bar_build", "");
-
- $chanmon_bar = weechat::bar_new ("chanmon", "off", 100, "root", "", "bottom", "vertical", "vertical", 0, 0, "default", "cyan", "default", "on", "chanmon");
-
- return weechat::WEECHAT_RC_OK;
-}
-# Close bar
-sub chanmon_bar_close
-{
- # Find if bar exists
- $chanmon_bar = weechat::bar_search("chanmon");
- # If is does, close it
- if ($chanmon_bar ne "")
- {
- weechat::bar_remove($chanmon_bar);
- }
-
- # Find if bar item exists
- $chanmon_bar_item = weechat::bar_item_search("chanmon_bar");
- # If is does, close it
- if ($chanmon_bar_item ne "")
- {
- weechat::bar_remove($chanmon_bar_item);
- }
-
- @bar_lines = ();
- return weechat::WEECHAT_RC_OK;
-}
-
-# Make a new buffer
-sub chanmon_buffer_open
-{
- # Search for pre-existing buffer
- $chanmon_buffer = weechat::buffer_search("perl", "chanmon");
-
- # Make a new buffer
- if ($chanmon_buffer eq "")
- {
- $chanmon_buffer = weechat::buffer_new("chanmon", "chanmon_buffer_input", "", "chanmon_buffer_close", "");
- }
-
- # Turn off notify, highlights
- if ($chanmon_buffer ne "")
- {
- weechat::buffer_set($chanmon_buffer, "notify", "0");
- weechat::buffer_set($chanmon_buffer, "highlight_words", "-");
- weechat::buffer_set($chanmon_buffer, "title", "Channel Monitor");
- # Set no_log
- if (weechat::config_get_plugin("logging") eq "off")
- {
- weechat::buffer_set($chanmon_buffer, "localvar_set_no_log", "1");
- }
- }
- return weechat::WEECHAT_RC_OK;
-}
-# Buffer input has no action
-sub chanmon_buffer_input
-{
- return weechat::WEECHAT_RC_OK;
-}
-# Close up
-sub chanmon_buffer_close
-{
- $chanmon_buffer = "";
- # If user hasn't changed output style warn user
- if (weechat::config_get_plugin("output") eq "buffer")
- {
- weechat::print("", "\tChanmon buffer has been closed but output is still set to buffer, unusual results may occur. To recreate the buffer use ".weechat::color("bold")."/chanmon fix".weechat::color("-bold"));
- }
- return weechat::WEECHAT_RC_OK;
-}
-
-# Chanmon command wrapper
-sub chanmon_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")
- {
- chanmon_toggle($data, $buffer, $arg);
- }
- # /dynmon command
- elsif ($cmd eq "dynmon")
- {
- chanmon_dyn_toggle();
- }
- # /chanclean command
- elsif ($cmd eq "clean")
- {
- chanmon_config_clean($data, $buffer, $arg);
- }
- # Fix closed buffer
- elsif ($cmd eq "fix")
- {
- if (weechat::config_get_plugin("output") eq "buffer" && $chanmon_buffer eq "")
- {
- chanmon_buffer_open();
- }
- }
- return weechat::WEECHAT_RC_OK;
-}
-
-# Clean up config entries
-sub chanmon_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("", "\tchanmon.pl: Unknown option");
- return weechat::WEECHAT_RC_OK;
- }
-
- @chans = ();
- # Load an infolist of chanmon options
- $infolist = weechat::infolist_get("option", "", "*chanmon*");
- while (weechat::infolist_next($infolist))
- {
- $name = weechat::infolist_string($infolist, "option_name");
- $name =~ s/perl\.chanmon\.(\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 = "\tchanmon.pl: Cleaned ".@chans." entry from the config:";
- }
- else
- {
- $str = "\tchanmon.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("", "\tchanmon.pl: No entries removed");
- }
- return weechat::WEECHAT_RC_OK;
-}
-
-# Check config elements
-sub chanmon_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");
- }
-
- # Dynmon default
- if (!(weechat::config_is_set_plugin ("dynamic")))
- {
- weechat::config_set_plugin("dynamic", "off");
- }
-
- # 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");
- }
-
- # Away message default
- if (!(weechat::config_is_set_plugin ("show_aways")))
- {
- weechat::config_set_plugin("show_aways", "off");
- }
-
- # chanmon 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");
- }
-
- # 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 chanmon_config_cb
-{
- $point = $_[0];
- $name = $_[1];
- $value = $_[2];
-
- $name =~ s/^plugins\.var\.perl\.chanmon\.//;
-
- # Set logging on buffer
- if ($name eq "logging")
- {
- # Search for pre-existing buffer
- $chanmon_buffer = weechat::buffer_search("perl", "chanmon");
- if ($value eq "off")
- {
- weechat::buffer_set($chanmon_buffer, "localvar_set_no_log", "1");
- }
- else
- {
- weechat::buffer_set($chanmon_buffer, "localvar_del_no_log", "");
- }
- }
- # Output changer
- elsif ($name eq "output")
- {
- if ($value eq "bar")
- {
- # Search for pre-existing buffer
- $chanmon_buffer = weechat::buffer_search("perl", "chanmon");
- # Close if it exists
- if ($chanmon_buffer ne "")
- {
- weechat::buffer_close($chanmon_buffer)
- }
-
- # Output bar lines default
- if (!(weechat::config_is_set_plugin ("bar_lines")))
- {
- weechat::config_set_plugin("bar_lines", "10");
- }
- # Make a bar if doesn't exist
- chanmon_bar_open();
- }
- elsif ($value eq "buffer")
- {
- # If a bar exists, close it
- chanmon_bar_close();
- # Open buffer
- chanmon_buffer_open();
- }
-
- }
- elsif ($name eq "weechat.look.prefix_suffix")
- {
- if (weechat::config_get_plugin("output") eq "bar")
- {
- @bar_lines = ();
- weechat::print("", "\tchanmon: weechat.look.prefix_suffix changed, clearing chanmon bar");
- weechat::bar_item_update("chanmon");
- }
- }
- return weechat::WEECHAT_RC_OK;
-}
-
-# Toggle dynamic monitoring on/off
-sub chanmon_dyn_toggle
-{
- if (weechat::config_get_plugin("dynamic") eq "off")
- {
- weechat::config_set_plugin("dynamic", "on");
- chanmon_print("Dynamic Channel Monitoring Enabled");
- return weechat::WEECHAT_RC_OK;
- }
- elsif (weechat::config_get_plugin("dynamic") eq "on")
- {
- weechat::config_set_plugin("dynamic", "off");
- chanmon_print("Dynamic Channel Monitoring Disabled");
- return weechat::WEECHAT_RC_OK;
- }
-}
-
-# Set up weechat hooks / commands
-sub chanmon_hook
-{
- weechat::hook_print("", "", "", 0, "chanmon_new_message", "");
- weechat::hook_command("chmonitor", "Toggles monitoring for a channel", "[channel [server]]", " channel: What channel to toggle monitoring for\n server: Internal server name, if channel is on more than one server", "%(irc_channels) %(irc_servers)", "chanmon_toggle", "");
- weechat::hook_command("dynmon", "Toggles 'dynamic' monitoring (auto-disable monitoring for current channel)", "", "", "", "chanmon_dyn_toggle", "");
- weechat::hook_command("chanclean", "Chanmon 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", "chanmon_config_clean", "");
-
- weechat::hook_command("chanmon", "Chanmon help", "[help] | [monitor [channel [server]]] | [dynmon] | [clean default|orphan|all]", " help: Print help for chanmon\n monitor: Toggles monitoring for a channel (/chmonitor)\n dynmon: Toggles 'dynamic' monitoring (auto-disable monitoring for current channel) (/dynmon)\n clean: Chanmon config clean up (/chanclean)", "help || monitor %(irc_channels) %(irc_servers) || dynmon || clean default|orphan|all", "chanmon_command_cb", "");
-
- weechat::hook_config("plugins.var.perl.chanmon.*", "chanmon_config_cb", "");
- weechat::hook_config("weechat.look.prefix_suffix", "chanmon_config_cb", "");
-}
-
-# Main body, Callback for hook_print
-sub chanmon_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 messages and topic notices
- if ($cb_tags =~ /irc_privmsg/ || $cb_tags =~ /irc_topic/)
- {
- # Check buffer name is an IRC channel or private message when enabled
- $bufname = weechat::buffer_get_string($cb_bufferp, 'name');
- if ($bufname =~ /(.*)\.([#&\+!])(.*)/ || (weechat::config_get_plugin("merge_private") eq "on" && $cb_tags =~ /notify_private/))
- {
- # Are we running on this channel
- if (weechat::config_get_plugin($bufname) ne "off" && $cb_disp eq "1")
- {
- # Are we running dynamically
- if (weechat::config_get_plugin("dynamic") eq "on")
- {
- # Check if this buffer is shown in a window somewhere
- $window_displayed = weechat::buffer_get_integer($cb_bufferp, "num_displayed");
- if ($window_displayed ne 0)
- {
- # Stop running
- return weechat::WEECHAT_RC_OK;
- }
- }
-
- # Format nick
- # Line isn't action or topic notify
- if (!($cb_tags =~ /irc_action/) && !($cb_tags =~ /irc_topic/))
- {
- # Highlight
- if ($cb_high eq "1")
- {
- # 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");
- }
- # Normal line
- else
- {
- # Format nick
- $nick = " ".weechat::config_get_plugin("nick_prefix").$cb_prefix.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
- {
- # Highlight
- if ($cb_high eq "1")
- {
- $uncolnick = weechat::string_remove_color($cb_prefix, "");
- $nick = weechat::color("chat_highlight").$uncolnick.weechat::color("reset");
- }
- # Normal line
- else
- {
- $nick = $cb_prefix.weechat::color("reset");
- }
- }
- # Send to output
- chanmon_print ($cb_msg, $cb_bufferp, $nick);
- }
- }
- }
- # Special outgoing ACTION & away_info catcher
- elsif ($cb_tags eq "" || $cb_tags =~ /away_info/ && weechat::config_get_plugin("show_aways") eq "on" )
- {
- # Check buffer name is an IRC channel or private message when enabled
- $bufname = weechat::buffer_get_string($cb_bufferp, 'name');
- if ($bufname =~ /(.*)\.([#&\+!])(.*)/ || (weechat::config_get_plugin("merge_private") eq "on" && $cb_tags =~ /notify_private/))
- {
- # Are we running dynamically
- if (weechat::config_get_plugin("dynamic") eq "on")
- {
- # Check if this buffer is shown in a window somewhere
- $window_displayed = weechat::buffer_get_integer($cb_bufferp, "num_displayed");
- if ($window_displayed eq 1)
- {
- # Stop running
- return weechat::WEECHAT_RC_OK;
- }
- }
-
- $net = $1;
- $mynick = weechat::info_get("irc_nick", $net);
- if ($cb_msg =~ $mynick)
- {
- $action_colour = weechat::color(weechat::config_string(weechat::config_get("weechat.color.chat_prefix_action")));
- $action_prefix = weechat::config_string(weechat::config_get("weechat.look.prefix_action"));
- $nick_self_colour = weechat::color(weechat::config_string(weechat::config_get("weechat.color.chat_nick_self")));
- $nick = $action_colour.$action_prefix.$nick_self_colour.$nick.weechat::color("reset");
- # Send to output
- chanmon_print ($cb_msg, $cb_bufferp, $nick);
- }
- }
- }
- return weechat::WEECHAT_RC_OK;
-}
-
-# Output formatter and printer takes (msg bufpointer nick)
-sub chanmon_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;
- }
- }
- # chanmon 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;
- }
- }
- # chanmon 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
- $chanmon_buffer = weechat::buffer_search("perl", "chanmon");
- # Print
- weechat::print($chanmon_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 =~ /\$\{(?:color:)?[\w,]+\}/) # Coloured string
- {
- while ($time =~ /\$\{(?:color:)?([\w,]+)\}/)
- {
- $color = weechat::color($1);
- $time =~ s/\$\{(?:color:)?[\w,]+\}/$color/;
- }
- $time .= weechat::color("reset");
- }
- 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("chanmon");
- }
-}
-
-# Start the output display
-sub chanmon_start
-{
- if (weechat::config_get_plugin("output") eq "buffer")
- {
- chanmon_buffer_open();
- }
- elsif (weechat::config_get_plugin("output") eq "bar")
- {
- chanmon_bar_open();
- }
-}
-
-# Takes two optional args (channel server), toggles monitoring on/off
-sub chanmon_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
- chanmon_print("Channel 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
- chanmon_print("Channel 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("chanmon", "KenjiE20", "2.4", "GPL3", "Channel Monitor", "", ""))
-{
- # Double load
- weechat::print ("", "\tChanmon is already loaded");
- return weechat::WEECHAT_RC_OK;
-}
-else
-{
- # Start everything
- chanmon_hook();
- chanmon_config_init();
- chanmon_start();
-}
diff --git a/weechat/perl/autoload/chatters.pl b/weechat/perl/autoload/chatters.pl
deleted file mode 100644
index 993ccad..0000000
--- a/weechat/perl/autoload/chatters.pl
+++ /dev/null
@@ -1,287 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright (C) 2012 Arvydas Sidorenko <asido4@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/>.
-#
-#
-# Usage:
-# To show the bar item:
-# /set weechat.bar.nicklist.items "chatters,buffer_nicklist"
-# Config options:
-# /set plugins.var.perl.chatters.frame_color "red"
-# /set plugins.var.perl.chatters.nick_color "yellow"
-# /set plugins.var.perl.chatters.nick_timeout "600"
-#
-#
-# History:
-#
-# 2012-05-01, Arvydas Sidorenko <asido4@gmail.com>
-# Version 0.1: initial release
-# 2012-05-11, Arvydas Sidorenko <asido4@gmail.com>
-# Version 0.2: rewritten script using bar_item to store the chatters
-# instead of nicklist_group
-# 2012-05-16, Arvydas Sidorenko <asido4@gmail.com>
-# Version 0.2.1: Bug fix: same channels under different servers share a
-# common chatter list.
-# 2012-05-18, Nils G <weechatter@arcor.de>
-# Version 0.3: missing return value for callbacks fixed
-# version check added
-# improved option handling
-# 2013-02-07, Ailin Nemui <anti.teamidiot.de>
-# Version 0.4: add focus info
-#
-
-use strict;
-use warnings;
-
-my $version = "0.4";
-my $script_name = "chatters";
-my $weechat_version = "";
-
-# A hash with groups where the chatters are going to be added
-#
-# Structure:
-# "#channel1" -- "nick1" -- last msg timestamp
-# `- "nick2" -- last msg timestamp
-# `- "nick3" -- last msg timestamp
-# "#channel2" -- "nick1" -- last msg timestamp
-# `- ...
-my %chatter_groups = ();
-my $chatters_bar_item_name = "chatters";
-
-weechat::register($script_name, "Arvydas Sidorenko <asido4\@gmail.com>", $version, "GPL3", "Groups people into chatters and idlers", "", "");
-$weechat_version = weechat::info_get("version_number", "");
-if (($weechat_version eq "") or ($weechat_version < 0x00030600)) # minimum v0.3.6
-{
- weechat::print("",weechat::prefix("error")."$script_name: needs at least WeeChat v0.3.6");
- weechat::command("","/wait 1ms /perl unload $script_name");
-}
-
-# Check configs
-my %default_settings = (frame_color => "red",
- nick_color => "yellow",
- nick_timeout => 600);
-for (keys %default_settings)
-{
- weechat::config_set_plugin($_ => $default_settings{$_}) unless weechat::config_is_set_plugin($_);
-}
-
-
-# Close a channel
-weechat::hook_signal("buffer_closing", "buffer_close_cb", "");
-# Callback whenever someone leaves the channel
-weechat::hook_signal("nicklist_nick_removed", "on_leave_cb", "");
-# Callback whenever someone writes something in the channel
-weechat::hook_signal("*,irc_in_PRIVMSG", "msg_cb", "");
-# Chatter observer callback
-weechat::hook_timer(60000, 0, 0, "cleanup_chatters", 0);
-# On config change
-weechat::hook_config("plugins.var.perl.${script_name}.*", "config_change_cb", "");
-
-
-weechat::bar_item_new($chatters_bar_item_name, "chatters_bar_cb", "");
-
-# For mouse support
-weechat::hook_focus($chatters_bar_item_name, "chatters_focus_cb", "") if $weechat_version >= 0x00030600;
-
-###############################################################################
-# Buffer update callback
-sub chatters_bar_cb
-{
- # $_[0] - data
- # $_[1] - bar item
- # $_[2] - window
- my $str = "";
- my $buffer = weechat::window_get_pointer($_[2], "buffer");
- my $channel = buf_to_channel_key($buffer);
- my $frame_color = weechat::color(weechat::config_get_plugin("frame_color"));
- my $nick_color = weechat::color(weechat::config_get_plugin("nick_color"));
-
- $str = $frame_color . "-- Chatters -----\n";
-
- if ($channel and $chatter_groups{$channel})
- {
- foreach my $nick (sort {uc($a) cmp uc($b)} keys %{ $chatter_groups{$channel} })
- {
- $str .= $nick_color . $nick . "\n";
- }
- }
-
- $str .= $frame_color . "-----------------\n";
-
- return $str;
-}
-
-###############################################################################
-# Buffer close callback
-sub buffer_close_cb
-{
- # $_[0] - callback data (3rd hook arg)
- # $_[1] - signal (buffer_closing)
- # $_[2] - buffer pointer
- my $channel = buf_to_channel_key($_[2]);
-
- if ($chatter_groups{$channel})
- {
- delete $chatter_groups{$channel};
- }
- return weechat::WEECHAT_RC_OK;
-}
-
-###############################################################################
-# Gets called when someones writes in a channel
-sub msg_cb
-{
- # $_[0] - callback data (3rd hook arg)
- # $_[1] - event name
- # $_[2] - the message:
- # :Asido!~asido@2b600000.rev.myisp.com PRIVMSG #linux :yoo
- my $msg = weechat::info_get_hashtable("irc_message_parse" => + { "message" => $_[2] });
- my $channel = "";
- my ($server) = split ",", $_[1];
- my $key = "";
-
- # Ignore private messages
- unless ($msg->{channel} =~ /^#/)
- {
- return weechat::WEECHAT_RC_OK;
- }
-
- $key = format_key($server, $msg->{channel});
-
- $chatter_groups{$key}{$msg->{nick}} = time();
- weechat::bar_item_update($chatters_bar_item_name);
-
- return weechat::WEECHAT_RC_OK;
-}
-
-###############################################################################
-# Gets called when someones leaves a channel
-sub on_leave_cb
-{
- # $_[0] - data
- # $_[1] - event name (nicklist_nick_removed)
- # $_[2] - 0x1ffda70,spoty (<buffer_pointer>,<nick>)
- my ($buf, $nick) = split ",", $_[2];
- my $channel = buf_to_channel_key($buf);
-
- if ($chatter_groups{$channel} and $chatter_groups{$channel}{$nick})
- {
- delete $chatter_groups{$channel}{$nick};
- weechat::bar_item_update($chatters_bar_item_name);
- }
-
- return weechat::WEECHAT_RC_OK;
-}
-
-###############################################################################
-# Script config edit callback
-sub config_change_cb
-{
- # $_[0] - data
- # $_[1] - option name
- # $_[2] - new value
-# my $opt = $_[1];
- my ( $pointer, $name, $value ) = @_;
- $name = substr($name,length("plugins.var.perl.".$script_name."."),length($name)); # don't forget the "."
-# $default_settings{$name} = $value; # store new value, if needed!
-
-# if ($opt =~ /frame_color$/ or $opt =~ /nick_color$/)
- if ($name eq "frame_color" or $name eq "nick_color")
- {
- weechat::bar_item_update($chatters_bar_item_name);
- }
-# elsif ($opt =~ /nick_timeout$/)
- elsif ($name eq "nick_timeout")
- {
- cleanup_chatters();
- }
- return weechat::WEECHAT_RC_OK;
-}
-
-###############################################################################
-# Adds nick info to focus hashtable
-sub chatters_focus_cb
-{
- my $channel = buf_to_channel_key($_[1]{_buffer});
- if ($channel and $chatter_groups{$channel} and
- $_[1]{_bar_item_line} > 0 and $_[1]{_bar_item_line} <= keys %{ $chatter_groups{$channel} })
- {
- +{ nick => (sort {uc($a) cmp uc($b)} keys %{ $chatter_groups{$channel} })[$_[1]{_bar_item_line}-1] }
- }
- else {
- $_[1]
- }
-}
-
-###############################################################################
-# Removes nicks from chatter list who idle for too long
-sub cleanup_chatters
-{
- my $changed = 0;
- my $nick_timeout = weechat::config_get_plugin("nick_timeout");
-
- foreach my $channel (keys %chatter_groups)
- {
- foreach my $nick (keys %{ $chatter_groups{$channel} })
- {
- if (time() - $chatter_groups{$channel}{$nick} >= $nick_timeout)
- {
- delete $chatter_groups{$channel}{$nick};
- $changed = 1;
- }
- }
- }
-
- if ($changed)
- {
- weechat::bar_item_update($chatters_bar_item_name);
- }
-}
-
-###############################################################################
-# Returns a key for use in chatter_groups
-sub buf_to_channel_key
-{
- my $buf = shift;
- my $server = weechat::buffer_get_string($buf, "localvar_server");
- my $channel = weechat::buffer_get_string($buf, "localvar_channel");
-
- return format_key($server, $channel);
-}
-
-###############################################################################
-# Formats a key out of server and channel to use in chatter_groups
-sub format_key
-{
- my $server = shift;
- my $channel = shift;
-
- # For unknown reason to me some channels have prepended #, some prepended ##
- # so the best to get rid of them to keep consistency
- $channel =~ /#*(.*)/;
- $channel = $1;
-
- return $server . "|" . $channel;
-}
-
-###############################################################################
-#
-sub _log
-{
- my $msg = shift;
-
- weechat::print("", "${script_name}: ${msg}\n");
-}