diff --git a/visidata/path.py b/visidata/path.py index 11b53bd9b..d8fedfd12 100644 --- a/visidata/path.py +++ b/visidata/path.py @@ -95,7 +95,7 @@ def peek(self, size=-1): class FileProgress: - 'Open file in binary mode and track read() progress.' + 'Open file as text or binary, then track read() progress.' def __init__(self, path, fp, mode='r', **kwargs): self.path = path self.fp = fp @@ -130,13 +130,13 @@ def read(self, size=-1): r = self.fp_orig_read(size) if self.prog: if r: - self.prog.addProgress(len(r)) + self.prog.addProgress(len(r.encode(self.encoding)) if self.encoding else len(r)) return r def readline(self, size=-1): r = self.fp_orig_readline(size) if self.prog: - self.prog.addProgress(len(r)) + self.prog.addProgress(len(r.encode(self.encoding)) if self.encoding else len(r)) return r def __getattr__(self, k): @@ -148,7 +148,7 @@ def __enter__(self): def __next__(self): r = next(self.fp) - self.prog.addProgress(len(r)) + self.prog.addProgress(len(r.encode(self.encoding)) if self.encoding else len(r)) return r def __iter__(self): @@ -156,7 +156,7 @@ def __iter__(self): yield from self.fp else: for line in self.fp: - self.prog.addProgress(len(line)) + self.prog.addProgress(len(line.encode(self.encoding)) if self.encoding else len(line)) yield line def __exit__(self, type, value, tb): @@ -326,9 +326,10 @@ def _open(self, *args, **kwargs): def __iter__(self): with Progress(total=filesize(self)) as prog: - with self.open(encoding=vd.options.encoding) as fd: - for i, line in enumerate(fd): - prog.addProgress(len(line)) + enc = vd.options.encoding + with self.open(encoding=enc) as fd: + for line in fd: + prog.addProgress(len(line.encode(enc))) yield line.rstrip('\n') def open_bytes(self, mode='rb'):