X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/c8a632a3ff5226a6e61ddc19b479abfe565ba3dd..dd35844f0c0ecb1eb059f60a66d55bd064df4fc2:/weechat/python/grep.py diff --git a/weechat/python/grep.py b/weechat/python/grep.py index 64dbc52..b675122 100644 --- a/weechat/python/grep.py +++ b/weechat/python/grep.py @@ -69,6 +69,18 @@ # # History: # +# 2022-11-11, anonymous2ch +# version 0.8.6: ignore utf-8 decoding errors +# +# 2021-05-02, Sébastien Helleu +# version 0.8.5: add compatibility with WeeChat >= 3.2 (XDG directories) +# +# 2020-10-11, Thom Wiggers +# version 0.8.4: Python3 compatibility fix +# +# 2020-05-06, Dominique Martinet and hexa- +# version 0.8.3: more python3 compatibility fixes... +# # 2019-06-30, dabbill # and Sébastien Helleu # version 0.8.2: make script compatible with Python 3 @@ -230,7 +242,7 @@ except ImportError: SCRIPT_NAME = "grep" SCRIPT_AUTHOR = "Elián Hanisch " -SCRIPT_VERSION = "0.8.2" +SCRIPT_VERSION = "0.8.6" SCRIPT_LICENSE = "GPL3" SCRIPT_DESC = "Search in buffers and logs" SCRIPT_COMMAND = "grep" @@ -446,9 +458,13 @@ def get_config_log_filter(): return [] def get_home(): - home = weechat.config_string(weechat.config_get('logger.file.path')) - home = home.replace('%h', weechat.info_get('weechat_dir', '')) - home = path.abspath(path.expanduser(home)) + options = { + 'directory': 'data', + } + home = weechat.string_eval_path_home( + weechat.config_string(weechat.config_get('logger.file.path')), + {}, {}, options, + ) return home def strip_home(s, dir=''): @@ -596,7 +612,10 @@ def get_file_by_name(buffer_name): if '$server' in mask: mask = mask.replace('$server', server) # change the unreplaced vars by '*' - from string import letters + try: + from string import letters + except ImportError: + from string import ascii_letters as letters if '%' in mask: # vars for time formatting mask = mask.replace('%', '$') @@ -722,7 +741,7 @@ def grep_file(file, head, tail, after_context, before_context, count, regexp, hi check = lambda s: check_string(s, regexp, hilight, exact) try: - file_object = open(file, 'r') + file_object = open(file, 'r', errors='ignore') except IOError: # file doesn't exist return lines @@ -885,8 +904,7 @@ def grep_buffer(buffer, head, tail, after_context, before_context, count, regexp check = lambda s: check_string(s, regexp, hilight, exact) if before_context: - before_context_range = range(1, before_context + 1) - before_context_range.reverse() + before_context_range = reversed(range(1, before_context + 1)) while infolist_next(infolist): line = get_line(infolist) @@ -984,7 +1002,7 @@ def show_matching_lines(): buffer_update() else: global hook_file_grep, grep_stdout, grep_stderr, pattern_tmpl - grep_stdout = grep_stderr = '' + grep_stdout = grep_stderr = b'' hook_file_grep = weechat.hook_process( 'func:grep_process', get_config_int('timeout_secs') * 1000, @@ -1009,14 +1027,17 @@ def grep_process(*args): except Exception as e: result = e - return pickle.dumps(result) - -grep_stdout = grep_stderr = '' + return pickle.dumps(result, 0) def grep_process_cb(data, command, return_code, out, err): global grep_stdout, grep_stderr, matched_lines, hook_file_grep + if isinstance(out, str): + out = out.encode() grep_stdout += out + + if isinstance(err, str): + err = err.encode() grep_stderr += err def set_buffer_error(message): @@ -1548,7 +1569,7 @@ def cmd_logs(data, buffer, args): buffer = buffer_create() if get_config_boolean('clear_buffer'): weechat.buffer_clear(buffer) - file_list = zip(file_list, file_sizes) + file_list = list(zip(file_list, file_sizes)) msg = 'Found %s logs.' %len(file_list) print_line(msg, buffer, display=True) @@ -1738,8 +1759,11 @@ Examples: debug = pybuffer.debugBuffer(globals(), '%s_debug' % SCRIPT_NAME) except: def debug(s, *args): - if not isinstance(s, basestring): - s = str(s) + try: + if not isinstance(s, basestring): + s = str(s) + except NameError: + pass if args: s = s %args prnt('', '%s\t%s' %(script_nick, s))