mirror of
https://github.com/weechat/weechat.git
synced 2026-06-25 12:26:40 +02:00
Initial import
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
#!/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 <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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user