#
# History:
#
+# 2022-11-11, anonymous2ch
+# version 0.8.6: ignore utf-8 decoding errors
+#
+# 2021-05-02, Sébastien Helleu <flashcode@flashtux.org>
+# version 0.8.5: add compatibility with WeeChat >= 3.2 (XDG directories)
+#
+# 2020-10-11, Thom Wiggers <thom@thomwiggers.nl>
+# version 0.8.4: Python3 compatibility fix
+#
+# 2020-05-06, Dominique Martinet <asmadeus@codewreck.org> and hexa-
+# version 0.8.3: more python3 compatibility fixes...
+#
# 2019-06-30, dabbill <dabbill@gmail.com>
# and Sébastien Helleu <flashcode@flashtux.org>
# version 0.8.2: make script compatible with Python 3
SCRIPT_NAME = "grep"
SCRIPT_AUTHOR = "Elián Hanisch <lambdae2@gmail.com>"
-SCRIPT_VERSION = "0.8.2"
+SCRIPT_VERSION = "0.8.6"
SCRIPT_LICENSE = "GPL3"
SCRIPT_DESC = "Search in buffers and logs"
SCRIPT_COMMAND = "grep"
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=''):
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('%', '$')
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
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)
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,
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):
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)
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))