#!/usr/bin/env python """ Theme manager for WeeChat. It loads configuration parameters from file and allows to create new theme out of current configuration. by Stalwart Licensed under GNU GPL v2 """ ## ---------- Code starts here ---------- import weechat import os VERSION = "0.2.3" weechat.register("theme", VERSION, "", "Theme manager for WeeChat") THEMEDIR = weechat.get_info("weechat_dir") + '/themes' weechat.add_command_handler("theme", "parameter_parser", "Apply and create themes", "[load | save ]", "", "load|save") settings = [ 'look_startup_logo', 'look_startup_version', 'look_weechat_slogan', 'look_buffer_timestamp', 'look_color_nicks_number', 'look_color_actions', 'look_nicklist', 'look_nicklist_position', 'look_nicklist_min_size', 'look_nicklist_max_size', 'look_no_nickname', 'look_nickmode', 'look_nickmode_empty', 'look_nick_prefix', 'look_nick_suffix', 'look_align_nick', 'look_align_other', 'look_align_size', 'look_align_size_max', 'look_infobar', 'look_infobar_timestamp', 'look_infobar_seconds', 'look_infobar_delay_highlight', 'look_hotlist_names_count', 'look_hotlist_names_level', 'look_hotlist_names_length', 'look_read_marker', 'look_input_format', 'col_separator', 'col_title', 'col_title_bg', 'col_chat', 'col_chat_time', 'col_chat_time_sep', 'col_chat_prefix1', 'col_chat_prefix2', 'col_chat_server', 'col_chat_join', 'col_chat_part', 'col_chat_nick', 'col_chat_host', 'col_chat_channel', 'col_chat_dark', 'col_chat_highlight', 'col_chat_bg', 'col_chat_read_marker', 'col_chat_read_marker_bg', 'col_status', 'col_status_delimiters', 'col_status_channel', 'col_status_data_msg', 'col_status_private', 'col_status_highlight', 'col_status_data_other', 'col_status_more', 'col_status_bg', 'col_infobar', 'col_infobar_delimiters', 'col_infobar_highlight', 'col_infobar_bg', 'col_input', 'col_input_server', 'col_input_channel', 'col_input_nick', 'col_input_delimiters', 'col_input_bg', 'col_nick', 'col_nick_away', 'col_nick_chanowner', 'col_nick_chanadmin', 'col_nick_op', 'col_nick_halfop', 'col_nick_voice', 'col_nick_more', 'col_nick_sep', 'col_nick_self', 'col_nick_color1', 'col_nick_color2', 'col_nick_color3', 'col_nick_color4', 'col_nick_color5', 'col_nick_color6', 'col_nick_color7', 'col_nick_color8', 'col_nick_color9', 'col_nick_color10', 'col_nick_private', 'col_nick_bg', 'col_chat_dcc_selected', 'col_dcc_waiting', 'col_dcc_connecting', 'col_dcc_active', 'col_dcc_done', 'col_dcc_failed', 'col_dcc_aborted' ] def themes_dir_available(writeable): if not os.access(THEMEDIR, os.F_OK): os.mkdir(THEMEDIR, 0700) if writeable: if os.access(THEMEDIR, os.W_OK): return 1 else: return 0 else: if os.access(THEMEDIR, os.R_OK): return 1 else: return 0 def save_theme(theme_filename): if themes_dir_available(1): try: themefile = open("%s/%s" % (THEMEDIR, theme_filename), 'wU') except: weechat.print_infobar(3, "Bad theme name, try another") else: themefile.write("# This WeeChat theme has been generated by Themes v.%s\n" % VERSION) for variable in settings: try: value = weechat.get_config(variable) except: weechat.prnt("Unable to get the value of %s" % variable) else: themefile.write("%s=%s\n" % (variable, value)) themefile.flush() themefile.close() weechat.print_infobar(3, "Theme %s saved" % theme_filename) def load_theme(theme_filename): if themes_dir_available(0): if os.access("%s/%s" % (THEMEDIR, theme_filename), os.F_OK): themefile = open("%s/%s" % (THEMEDIR, theme_filename), 'rU') lines = themefile.readlines() for line in lines: if ((len(line) > 3) and (line[0] != '#') and (line.find("="))): try: weechat.set_config(line[:line.find("=")], line[line.find("=")+1:].replace("\n", "")) except: weechat.prnt("Unable to set the value of %s" % variable) weechat.print_infobar(3, "Theme %s applied" % theme_filename) else: weechat.print_infobar(3, "Theme %s doesn't exist" % theme_filename) themefile.close() def list_themes(): if themes_dir_available(0): files = os.listdir(THEMEDIR) if len(files): weechat.prnt('Available themes:') for filename in files: if filename[-9:] == '.weetheme': weechat.prnt(" %s" % filename[:-9]) else: weechat.prnt('Theme directory is empty, you can create new theme out of your current configuration by executing "/theme save ". Additional themes available on http://weechat.flashtux.org') else: weechat.prnt('Theme directory is not available. Please, check access rights') def parameter_parser(server, args): if ((args != '') & (len(args.split()) == 2)): if args.split()[0] == 'save': save_theme(args.split()[1] + '.weetheme') elif args.split()[0] == 'load': load_theme(args.split()[1] + '.weetheme') else: weechat.prnt('Invalid parameter, must be "load" or "save"') else: list_themes() return weechat.PLUGIN_RC_OK