diff --git a/src/compound_targets.py b/src/compound_targets.py index 7fc27359..f6c25d4b 100644 --- a/src/compound_targets.py +++ b/src/compound_targets.py @@ -7,31 +7,31 @@ @mod.capture( rule=( " | " - "past | " - " past " + "(past|until|tween) | " + " (past|until|tween) " ) ) def cursorless_range(m) -> str: - if "past" in m: - end = m[-1] - if m[0] == "past": - start = BASE_TARGET.copy() - else: - start = m.cursorless_primitive_target_list[0] - return { - "type": "range", - "start": start, - "end": end, - } + length = len(m) + if length == 1: + return m[0] - return m[0] + if length == 2: + start = BASE_TARGET.copy() + else: + start = m[0] + modifier = m[-2] + return { + "type": "range", + "start": start, + "end": m[-1], + "excludeStart": modifier == "tween", + "excludeEnd": modifier in ["tween", "until"], + } @mod.capture(rule=(" (and )*")) def cursorless_target(m) -> str: if len(m.cursorless_range_list) == 1: return m.cursorless_range - return { - "type": "list", - "elements": m.cursorless_range_list - } + return {"type": "list", "elements": m.cursorless_range_list}