/usr/share/weechat/python/prism.py is in weechat-scripts 20131007-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 | # 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.
# 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.6"
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",
" -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"
" text: text to be colored",
"-r|-w|-m|-b|-e", "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
mepfx = 0
bs = 0
m = re.match('-[rwmbe]* ', input)
if m and input_method == "command":
opts = m.group(0)
input = input[len(opts):]
if 'w' in opts:
regex = regex_words
if 'r' in opts:
inc = 0
if 'm' in opts:
mepfx = 1
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 starting with a / will be executed as a
# command unless we escape it with a preceding /
if len(output) > 0 and output[0] == "/":
output = "/" + output
if mepfx == 1:
output = "/me " + 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
|