261 lines
6.0 KiB
Python
261 lines
6.0 KiB
Python
|
import datetime
|
||
|
import random
|
||
|
import string
|
||
|
|
||
|
WEECHAT_BASE_COLORS = {
|
||
|
"black": "0",
|
||
|
"red": "1",
|
||
|
"green": "2",
|
||
|
"brown": "3",
|
||
|
"blue": "4",
|
||
|
"magenta": "5",
|
||
|
"cyan": "6",
|
||
|
"default": "7",
|
||
|
"gray": "8",
|
||
|
"lightred": "9",
|
||
|
"lightgreen": "10",
|
||
|
"yellow": "11",
|
||
|
"lightblue": "12",
|
||
|
"lightmagenta": "13",
|
||
|
"lightcyan": "14",
|
||
|
"white": "15"
|
||
|
}
|
||
|
|
||
|
|
||
|
class MockObject(object):
|
||
|
pass
|
||
|
|
||
|
class MockConfig(object):
|
||
|
config_template = {
|
||
|
'debug_buffer': None,
|
||
|
'debug_category': None,
|
||
|
'_ptr': None,
|
||
|
'read': None,
|
||
|
'free': None,
|
||
|
'page_up_hook': None,
|
||
|
'color': {
|
||
|
'error_message_bg': "",
|
||
|
'error_message_fg': "",
|
||
|
'quote_bg': "",
|
||
|
'quote_fg': "",
|
||
|
'unconfirmed_message_bg': "",
|
||
|
'unconfirmed_message_fg': "",
|
||
|
'untagged_code_bg': "",
|
||
|
'untagged_code_fg': "",
|
||
|
},
|
||
|
'upload_buffer': {
|
||
|
'display': None,
|
||
|
'move_line_down': None,
|
||
|
'move_line_up': None,
|
||
|
'render': None,
|
||
|
},
|
||
|
'look': {
|
||
|
'bar_item_typing_notice_prefix': None,
|
||
|
'busy_sign': None,
|
||
|
'code_block_margin': None,
|
||
|
'code_blocks': None,
|
||
|
'disconnect_sign': None,
|
||
|
'encrypted_room_sign': None,
|
||
|
'encryption_warning_sign': None,
|
||
|
'max_typing_notice_item_length': None,
|
||
|
'pygments_style': None,
|
||
|
'redactions': None,
|
||
|
'server_buffer': None,
|
||
|
'new_channel_position': None,
|
||
|
'markdown_input': True,
|
||
|
},
|
||
|
'network': {
|
||
|
'debug_buffer': None,
|
||
|
'debug_category': None,
|
||
|
'debug_level': None,
|
||
|
'fetch_backlog_on_pgup': None,
|
||
|
'lag_min_show': None,
|
||
|
'lag_reconnect': None,
|
||
|
'lazy_load_room_users': None,
|
||
|
'max_initial_sync_events': None,
|
||
|
'max_nicklist_users': None,
|
||
|
'print_unconfirmed_messages': None,
|
||
|
'read_markers_conditions': None,
|
||
|
'typing_notice_conditions': None,
|
||
|
'autoreconnect_delay_growing': None,
|
||
|
'autoreconnect_delay_max': None,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
def __init__(self):
|
||
|
for category, options in MockConfig.config_template.items():
|
||
|
if options:
|
||
|
category_object = MockObject()
|
||
|
for option, value in options.items():
|
||
|
setattr(category_object, option, value)
|
||
|
else:
|
||
|
category_object = options
|
||
|
|
||
|
setattr(self, category, category_object)
|
||
|
|
||
|
|
||
|
def color(color_name):
|
||
|
# type: (str) -> str
|
||
|
# yapf: disable
|
||
|
escape_codes = []
|
||
|
reset_code = "0"
|
||
|
|
||
|
def make_fg_color(color_code):
|
||
|
return "38;5;{}".format(color_code)
|
||
|
|
||
|
def make_bg_color(color_code):
|
||
|
return "48;5;{}".format(color_code)
|
||
|
|
||
|
attributes = {
|
||
|
"bold": "1",
|
||
|
"-bold": "21",
|
||
|
"reverse": "27",
|
||
|
"-reverse": "21",
|
||
|
"italic": "3",
|
||
|
"-italic": "23",
|
||
|
"underline": "4",
|
||
|
"-underline": "24",
|
||
|
"reset": "0",
|
||
|
"resetcolor": "39"
|
||
|
}
|
||
|
|
||
|
short_attributes = {
|
||
|
"*": "1",
|
||
|
"!": "27",
|
||
|
"/": "3",
|
||
|
"_": "4"
|
||
|
}
|
||
|
|
||
|
colors = color_name.split(",", 2)
|
||
|
|
||
|
fg_color = colors.pop(0)
|
||
|
|
||
|
bg_color = colors.pop(0) if colors else ""
|
||
|
|
||
|
if fg_color in attributes:
|
||
|
escape_codes.append(attributes[fg_color])
|
||
|
else:
|
||
|
chars = list(fg_color)
|
||
|
|
||
|
for char in chars:
|
||
|
if char in short_attributes:
|
||
|
escape_codes.append(short_attributes[char])
|
||
|
elif char == "|":
|
||
|
reset_code = ""
|
||
|
else:
|
||
|
break
|
||
|
|
||
|
stripped_color = fg_color.lstrip("*_|/!")
|
||
|
|
||
|
if stripped_color in WEECHAT_BASE_COLORS:
|
||
|
escape_codes.append(
|
||
|
make_fg_color(WEECHAT_BASE_COLORS[stripped_color]))
|
||
|
|
||
|
elif stripped_color.isdigit():
|
||
|
num_color = int(stripped_color)
|
||
|
if 0 <= num_color < 256:
|
||
|
escape_codes.append(make_fg_color(stripped_color))
|
||
|
|
||
|
if bg_color in WEECHAT_BASE_COLORS:
|
||
|
escape_codes.append(make_bg_color(WEECHAT_BASE_COLORS[bg_color]))
|
||
|
else:
|
||
|
if bg_color.isdigit():
|
||
|
num_color = int(bg_color)
|
||
|
if 0 <= num_color < 256:
|
||
|
escape_codes.append(make_bg_color(bg_color))
|
||
|
|
||
|
escape_string = "\033[{}{}m".format(reset_code, ";".join(escape_codes))
|
||
|
|
||
|
return escape_string
|
||
|
|
||
|
|
||
|
def prefix(prefix_string):
|
||
|
prefix_to_symbol = {
|
||
|
"error": "=!=",
|
||
|
"network": "--",
|
||
|
"action": "*",
|
||
|
"join": "-->",
|
||
|
"quit": "<--"
|
||
|
}
|
||
|
|
||
|
if prefix_string in prefix_to_symbol:
|
||
|
return prefix_to_symbol[prefix]
|
||
|
|
||
|
return ""
|
||
|
|
||
|
|
||
|
def prnt(_, message):
|
||
|
print(message)
|
||
|
|
||
|
|
||
|
def prnt_date_tags(_, date, tags_string, data):
|
||
|
message = "{} {} [{}]".format(
|
||
|
datetime.datetime.fromtimestamp(date),
|
||
|
data,
|
||
|
tags_string
|
||
|
)
|
||
|
print(message)
|
||
|
|
||
|
|
||
|
def config_search_section(*_, **__):
|
||
|
pass
|
||
|
|
||
|
|
||
|
def config_new_option(*_, **__):
|
||
|
pass
|
||
|
|
||
|
|
||
|
def mkdir_home(*_, **__):
|
||
|
return True
|
||
|
|
||
|
|
||
|
def info_get(info, *_):
|
||
|
if info == "nick_color_name":
|
||
|
return random.choice(list(WEECHAT_BASE_COLORS.keys()))
|
||
|
|
||
|
return ""
|
||
|
|
||
|
|
||
|
def buffer_new(*_, **__):
|
||
|
return "".join(
|
||
|
random.choice(string.ascii_uppercase + string.digits) for _ in range(8)
|
||
|
)
|
||
|
|
||
|
|
||
|
def buffer_set(*_, **__):
|
||
|
return
|
||
|
|
||
|
|
||
|
def buffer_get_string(_ptr, property):
|
||
|
if property == "localvar_type":
|
||
|
return "channel"
|
||
|
return ""
|
||
|
|
||
|
|
||
|
def buffer_get_integer(_ptr, property):
|
||
|
return 0
|
||
|
|
||
|
|
||
|
def current_buffer():
|
||
|
return 1
|
||
|
|
||
|
|
||
|
def nicklist_add_group(*_, **__):
|
||
|
return
|
||
|
|
||
|
|
||
|
def nicklist_add_nick(*_, **__):
|
||
|
return
|
||
|
|
||
|
|
||
|
def nicklist_remove_nick(*_, **__):
|
||
|
return
|
||
|
|
||
|
|
||
|
def nicklist_search_nick(*args, **kwargs):
|
||
|
return buffer_new(args, kwargs)
|
||
|
|
||
|
|
||
|
def string_remove_color(message, _):
|
||
|
return message
|