/usr/share/weechat/python/prism.py is in weechat-scripts 20140928-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | # Copyright (c) 2010 Alex Barrett <al.barrett@gmail.com>
#
# Everyone is permitted to copy and distribute verbatim or modified
# copies of this license document, and changing it is allowed as long
# as the name is changed.
#
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.
# 2014-09-03, Matthew Martin <phy1729@gmail.com>
# v0.2.8: add color reset to the end of the output
# 2013-11-26, Seganku <seganku@zenu.net>
# v0.2.7: add -c switch for the option to pass output to a command
# 2013-07-19, Sebastien Helleu <flashcode@flashtux.org>
# v0.2.6: use buffer received in command callback instead of current buffer
# 2013-05-04, Rylai
# v0.2.5: add -e switch for the option to destroy the eyes of all
# who have the misfortune of seeing your text
# 2013-04-26, Biohazard
# v0.2.4: add support for using the command through keybindings
# 2013-03-12, R1cochet
# v0.2.3: add -b switch for backwards/reverse text
# 2013-01-29, SuperT1R:
# v0.2.2: add -m switch to append /me to the beginning of the output
import weechat as w
import random
import re
SCRIPT_NAME = "prism"
SCRIPT_AUTHOR = "Alex Barrett <al.barrett@gmail.com>"
SCRIPT_VERSION = "0.2.8"
SCRIPT_LICENSE = "WTFPL"
SCRIPT_DESC = "Taste the rainbow."
# red, lightred, brown, yellow, green, lightgreen, cyan,
# lightcyan, blue, lightblue, magenta, lightmagenta
colors = [5, 4, 7, 8, 3, 9, 10, 11, 2, 12, 6, 13]
color_count = len(colors)
# keeping a global index means the coloring will pick up where it left off
color_index = 0
# spaces don't need to be colored and commas cannot be because mIRC is dumb
chars_neutral = " ,"
chars_control = "\x01-\x1f\x7f-\x9f"
regex_chars = "[^%(n)s%(s)s][%(n)s%(s)s]*" % { 'n': chars_neutral, 's': chars_control }
regex_words = "[^%(n)s]+[%(n)s%(s)s]*" % { 'n': chars_neutral, 's': chars_control }
if w.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION,
SCRIPT_LICENSE, SCRIPT_DESC, "", ""):
w.hook_command("prism",
SCRIPT_DESC,
"[-rwmbe] text|-c[wbe] <sep> <command> <sep>text",
" -r: randomizes the order of the color sequence\n"
" -w: color entire words instead of individual characters\n"
" -m: append /me to beginning of output\n"
" -b: backwards text (entire string is reversed)\n"
" -e: eye-destroying colors (randomized background colors)\n"
" -c: specify a separator to turn on colorization\n"
" eg. -c : /topic :howdy howdy howdy\n"
" text: text to be colored",
"-r|-w|-m|-b|-e|-c", "prism_cmd_cb", "")
def find_another_color(colorCode):
otherColor = (unicode(colors[random.randint(1, color_count - 1) % color_count]).rjust(2, "0"))
while (otherColor == colorCode):
otherColor = (unicode(colors[random.randint(1, color_count - 1) % color_count]).rjust(2, "0"))
return otherColor
def prism_cmd_cb(data, buffer, args):
global color_index
input = args.decode("UTF-8")
input_method = "command"
if not input:
input = w.buffer_get_string(buffer, "input")
input = input.decode("UTF-8")
input_method = "keybinding"
# select a tokenizer and increment mode
regex = regex_chars
inc = 1
bs = 0
cmd = ""
m = re.match(r'(-[rwmbec]+)\s+(?:([^ ]+)\s+(.+?)\s*\2)?(.*)', input)
if m and input_method == "command":
opts = m.group(1)
input = m.group(4)
if 'c' in opts:
cmd = m.group(3)
if 'w' in opts:
regex = regex_words
if 'r' in opts:
inc = 0
if 'm' in opts:
cmd = "/me"
if 'b' in opts:
input = input[::-1]
if 'e' in opts:
bs = 1
output = u""
tokens = re.findall(regex, input)
for token in tokens:
# prefix each token with a color code
color_code = unicode(colors[color_index % color_count]).rjust(2, "0")
if bs == 1:
output += u'\x03' + color_code + ',' + find_another_color(color_code) + token
else:
output += u"\x03" + color_code + token
# select the next color or another color at
# random depending on the options specified
if inc == 0:
color_index += random.randint(1, color_count - 1)
else:
color_index += inc
output += u'\x0f'
# output starting with a / will be executed as a
# command unless we escape it with a preceding /
# Commands should use the -c flag
if len(output) > 0 and output[0] == "/":
output = "/" + output
if len(cmd) > 0:
output = cmd + ' ' + output
if input_method == "keybinding":
w.buffer_set(buffer, "input", output.encode("UTF-8"))
else:
w.command(buffer, output.encode("UTF-8"))
return w.WEECHAT_RC_OK
|