dotfiles/weechat/python/matrix/_weechat.py

261 lines
6.0 KiB
Python
Raw Normal View History

2021-07-07 21:59:54 -05:00
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