From 949c75ad121461c35e46c0a2b3b54ba07aa35db0 Mon Sep 17 00:00:00 2001 From: Sheppy Date: Sat, 25 Feb 2017 23:39:51 +0100 Subject: [PATCH] saved modified script for futher use --- other/hl2file.py | 178 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 other/hl2file.py diff --git a/other/hl2file.py b/other/hl2file.py new file mode 100644 index 0000000..39f0cf6 --- /dev/null +++ b/other/hl2file.py @@ -0,0 +1,178 @@ +# coding: utf-8 +# +# Copyright (c) 2012 by nesthib +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# This script generates a file containing a formatted list of highlights to be +# used by an external program like conky. +# +# 2014-05-10, Sébastien Helleu +# 0.2: change hook_print callback argument type of displayed/highlight +# (WeeChat >= 1.0) +# 2012-03-07: nesthib +# 0.1: initial release + +try: + import weechat as w +except Exception: + print("This script must be run under WeeChat.") + print("Get WeeChat now at: http://www.weechat.org/") + quit() + +import re, os +from collections import Counter + +name = "hl2file" +author = "nesthib " +version = "0.2" +license = "GPL" +description = "Generates a file with highlights for external programs like conky" +shutdown_function = "shutdown" +charset = "" + +w.register(name, author, version, license, description, shutdown_function, charset) + +settings = { + 'output_file': '%h/highlights.txt', + 'output_active_buffer': '%h/active_buffer.txt', + #'ignore_chans': 'server', + 'output_format': '%{buffer}: %{nick} (%{message})', + 'summarize_by_buffer': 'off', + 'short_buffer_names': 'on', + 'clear_visited_buffers': 'on', + } + +for opt, val in settings.iteritems(): + if not w.config_is_set_plugin(opt): + w.config_set_plugin(opt, val) + +highlights = [] +regex_tags = re.compile('%\{[^\{\}]+\}') + +def bufname(buffer): + buffer_name = w.buffer_get_string(buffer , 'name') + if w.config_get_plugin('short_buffer_names') == 'on': + buffer_name = buffer_name.partition('.')[2] + return buffer_name + +def write(my_file, content): + if my_file == "": + return + my_file = os.path.expanduser(my_file.replace("%h", w.info_get("weechat_dir", ""))) + try: + f = open(my_file, 'w') + except IOError: + w.prnt('', 'Error: %s is unable to open "%s", please select an appropriate location' % (name, my_file)) + else: + f.writelines(content) + f.close() + +def my_print_cb(data, buffer, date, tags, displayed, highlight, prefix, message): + global highlights + if w.config_get_plugin('clear_visited_buffers') == 'on': + if buffer == w.window_get_pointer(w.current_window(), 'buffer'): + pass + #return w.WEECHAT_RC_OK + if int(highlight): + infos = {'buffer' : buffer, + 'date' : date, + 'tags' : str.split(tags, ','), + 'nick' : prefix, + 'message' : message, + } + highlights.append(infos) + write_file() + return w.WEECHAT_RC_OK + +def write_file(): + global highlights + filename = w.config_get_plugin('output_file') + if w.config_get_plugin('summarize_by_buffer') == 'on': + items = Counter([ bufname(item['buffer']) for item in highlights ]) + output_lines = [ '%s (%s)\n' % (item, items[item]) for item in items ] + else: + output_regex = w.config_get_plugin('output_format') + tags = regex_tags.findall(output_regex) + output_lines = [] + for infos in highlights: + output_string = output_regex+'\n' + for tag in tags: + item = tag.lstrip('%{').rstrip('}') + if item in infos.keys(): + if item == 'buffer': + new_string = bufname(infos[item]) + else: + new_string = infos[item] + output_string = output_string.replace(tag, new_string) + output_lines.append(output_string) + write(filename, output_lines) + +def clear_file_cb(data, buffer, args): + global highlights + highlights = [] + write_file() + return w.WEECHAT_RC_OK + +def buffer_switch_cb(data, signal, signal_data): + global highlights + if w.config_get_plugin('clear_visited_buffers') == 'on': + buffer = w.window_get_pointer(w.current_window(), 'buffer') + write(w.config_get_plugin('output_active_buffer'), bufname(buffer)) + highlights = [ item for item in highlights if item['buffer'] != buffer ] + write_file() + return w.WEECHAT_RC_OK + +def shutdown(): + for my_file in ['output_file', 'output_active_buffer']: + filename = w.config_get_plugin(my_file).replace("%h", w.info_get("weechat_dir", "")) + if os.path.exists(filename): + os.remove(filename) + return w.WEECHAT_RC_OK + +### OPTIONS ### + +invertdict = lambda d: dict(zip(d.itervalues(), d.keys())) +booleans = {'on': True, 'off': False} +boolean_options = ['summarize_by_buffer', 'short_buffer_name', 'clear_visited_buffers'] + +options = {} +for option in settings.keys(): + if option in boolean_options : + options[option] = booleans[w.config_get_plugin(option)] + else: + options[option] = w.config_get_plugin(option) + +def my_config_cb(data, option, value): + global options + + for boolean_option in boolean_options : + if option.endswith(boolean_option): + if value in booleans.keys(): + options[boolean_option] = booleans[w.config_get_plugin(boolean_option)] + else: + w.prnt('', 'Error: "%s" is not a boolean, please use "on" or "off"' % w.config_get_plugin(boolean_option)) + w.config_set_plugin(boolean_option, invertdict(booleans)[options[boolean_option]]) + write_file() + return w.WEECHAT_RC_OK + +for option in settings.keys(): + w.hook_config("plugins.var.python.%s.%s" % (name, option), "my_config_cb", "") + +### HOOKS ### + +w.hook_command("hl2file_clear", "", "", "", "", "clear_file_cb", "") +w.hook_signal("buffer_switch","buffer_switch_cb","") +w.hook_signal("window_switch","buffer_switch_cb","") +w.hook_print("", "", "", 1, "my_print_cb", "")