Home

Script: buffzilla.rb

Copy everything into one buffer. (for WeeChat ≥ 0.3.0)
Author: Dave Williams, version 0.1, Apache 2.0 — added: 2016-10-30
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
# buffzilla.rb
# Dave Williams <dave@dave.io>
# https://github.com/daveio/Weechat-scripts
# Licensed under the Apache License 2.0
# LicenseSHA256 b40930bbcf80744c86c46a12bc9da056641d722716c378f5659b9e555ef833e1
#
# head -n 5 buffzilla.rb | gpg --sign -ba
# -----BEGIN PGP SIGNATURE-----
#
# iQIbBAABCgAGBQJX6orKAAoJEHGMOmFhi24ljzwP+JHCCeEp2kdWOs9ixJDp+tZT
# qSBT1CMCeqmDpLmWGZirbKKaTnENokHhRiFHd5oaAGXfwTPPkfoK/fCPLB0GvYDY
# 7Fh9wvcp3kA5BS+piM8XuxKWi/dF0CXjDU2BwcZurWfu6ncbiPNxMn+SFu/L2R66
# IY6X9GEo/XF+rN4sapNyt0NK9OlyXHgpwqlJ8tfYoX1dfw/VUI3noAfIqh4D28Nv
# vYxfKSwy23BsogPqaWSEp2IrEM1ZqLYcJPBtO+yXx8VLNnmkGCxHyTvqXilEUxKQ
# yDdxAccBsmO1jHZceuT4YstgPwdIlfap0Gm6VNVxZZEUrXioVVMzdux/XKaxjH15
# d0nDkSAS0tVnpw+N2c4yFXFc+W+CXQQ2EZfRU1+/bCdueuMEmzvlrwXQjCI85d3K
# 8bXeHasJo/D8dPbF9Nbecoln/1GZYNtogUPSfZPKFBAWanSq4FK5p0YoL0sF/gxR
# W69kvZBJCDeNuJRcoL2YzJLYzYGjB4uj5qVp4Z/xS1J6xMajPBcE/BlofifinqoN
# apgvftUUBAPGCO88r6vyihsxkmV87LdIHmhvdsshFX0pgEpXjqiuPxTEi1lWXy2d
# wXyvq6MOpeycxd/zXVoxK9iGwwoumuEteyEiKkrWKniSv32QjLu7ufdaF01j7iCp
# MoqmKzbGK/oFbpDwI/4=
# =PgGj
# -----END PGP SIGNATURE-----
#
#  _      __  __  _ _ _
# | |__  _   _ / _|/ _|__(_) | | __ _
# | '_ \| | | | |_| ||_  / | | |/ _` |
# | |_) | |_| |  _|  _/ /| | | | (_| |
# |_.__/ \__,_|_| |_|/___|_|_|_|\__,_|
#
# A script for lazy people who use many quiet channels
#
# The purpose of buffzilla is simply to copy from all buffers into an
# additional buffer, for read only. To respond, switch to the real channel
# buffer in the usual way.
#
# The main benefit of this is that you can clear either this buffer or the real
# buffers without affecting scrollback in the other.
#
# Currently this script has no configuration, and is hard-coded to repeat
# everything from everywhere except anything tagged with 'irc_smart_filter'.
# If I get the time, I'll implement config to make it a bit more flexible.

DEBUG = false

if DEBUG
  require 'pp'
end

SIGNATURE = [
  'buffzilla',
  'Dave Williams',
  '0.1',
  'Apache 2.0',
  'Copy all activity to a single read-only buffer.',
  'weechat_unload',
  'UTF-8'
]

def weechat_init
  Weechat.register *SIGNATURE
  $bzbuf = Weechat.buffer_new("buffzilla", "", "", "", "")
  Weechat.hook_print("", "", "", 0, "zillify", "")
  Weechat.buffer_set($bzbuf, "title", "Buffzilla")
  return Weechat::WEECHAT_RC_OK
end

def weechat_unload
  Weechat.buffer_close($bzbuf)
end

def zillify(data, buffer, date, tags, displayed, highlight, prefix, message)
  data = {}
  %w(away type channel server).each do |meta|
    data[meta.to_sym] = Weechat.buffer_get_string(buffer, "localvar_#{meta}")
  end

  packet = {
    highlight:  ! highlight.to_i.zero?,
    type:       data[ :type ],
    channel:    data[ :channel ],
    away:       data[ :away ],
    server:     data[ :server ],
    date:       date,
    tags:       tags,
    message:    message
  }
  tags_list = packet[:tags].split(",")
  nick_tag = tags_list.find {|t| t.start_with? "nick_" }

  if DEBUG
    Weechat.print($bzbuf, "#{packet.pretty_inspect}")
  else
    unless tags_list.include? "irc_smart_filter"
      if nick_tag
        nick_cleaned = nick_tag.gsub(/^nick_/, "")
        Weechat.print($bzbuf,
          "#{nick_cleaned}@#{packet[:channel]} | #{packet[:message]}")
      else
        Weechat.print($bzbuf, "#{packet[:channel]} | #{packet[:message]}")
      end
    end
  end

  return Weechat::WEECHAT_RC_OK
end