Logo Search packages:      
Sourcecode: weechat-scripts version File versions  Download package

theme.py

00001 """
Theme manager for WeeChat. 
It loads configuration parameters from file 
and allows to create new theme out of current configuration.

by Stalwart <stlwrt@gmail.com>

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 <name> | save <name>]", "", "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 <name>". 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



Generated by  Doxygen 1.6.0   Back to index