diff --git a/visidata/movement.py b/visidata/movement.py index 0785f684c..18a6fdba0 100644 --- a/visidata/movement.py +++ b/visidata/movement.py @@ -6,6 +6,7 @@ def rotateRange(n, idx, reverse=False): 'Wraps an iter starting from idx. Yields indices from idx to n and then 0 to idx.' + if n == 0: return [] if reverse: rng = range(idx-1, -1, -1) rng2 = range(n-1, idx-1, -1) diff --git a/visidata/search.py b/visidata/search.py index 9eb8daa40..083dd1530 100644 --- a/visidata/search.py +++ b/visidata/search.py @@ -35,7 +35,12 @@ def findMatchingColumn(sheet, row, columns, func): if regex_flags is None: regex_flags = sheet.options.regex_flags # regex_flags defined in features.regex flagbits = sum(getattr(re, f.upper()) for f in regex_flags) - vd.searchContext["regex"] = re.compile(regex, flagbits) or vd.error('invalid regex: %s' % regex) + try: + compiled_re = re.compile(regex, flagbits) + except re.error as e: + vd.searchContext["regex"] = None # make future calls to search-next fail + vd.error('invalid regex: %s' % e.msg) + vd.searchContext["regex"] = compiled_re regex = vd.searchContext.get("regex") or vd.fail("no regex")