kovidgoyal/kitty · error · ValueError

{rest} is not a valid scroll_to_mark destination

Error message

{rest} is not a valid scroll_to_mark destination

What it means

scroll_to_mark raises this when its destination argument is neither prev/previous/next nor an integer in 0..3. The parser accepts a direction word or a mark column index clamped to 0-3; anything else fails int() and raises ValueError.

Source

Thrown at kitty/options/utils.py:472

        raise ValueError(f'{rest} is not a valid marker specification')
    ftype, spec = parts
    parts = list(shlex_split(spec))
    return func, list(parse_marker_spec(ftype, parts))


@func_with_args('scroll_to_mark')
def scroll_to_mark(func: str, rest: str) -> FuncArgsType:
    parts = rest.split()
    if not parts or not rest:
        return func, [True, 0]
    if len(parts) == 1:
        q = parts[0].lower()
        if q in ('prev', 'previous', 'next'):
            return func, [q != 'next', 0]
        try:
            return func, [True, max(0, min(int(q), 3))]
        except Exception:
            raise ValueError(f'{rest} is not a valid scroll_to_mark destination')
    return func, [parts[0] != 'next', max(0, min(int(parts[1]), 3))]


@func_with_args('mouse_selection')
def mouse_selection(func: str, rest: str) -> FuncArgsType:
    cmap = getattr(mouse_selection, 'code_map', None)
    if cmap is None:
        cmap = {
            'normal': defines.MOUSE_SELECTION_NORMAL,
            'extend': defines.MOUSE_SELECTION_EXTEND,
            'move-end': defines.MOUSE_SELECTION_MOVE_END,
            'move_end': defines.MOUSE_SELECTION_MOVE_END,
            'rectangle': defines.MOUSE_SELECTION_RECTANGLE,
            'word': defines.MOUSE_SELECTION_WORD,
            'line': defines.MOUSE_SELECTION_LINE,
            'line_from_begin': defines.MOUSE_SELECTION_LINE_FROM_BEGIN,
            'line_from_point': defines.MOUSE_SELECTION_LINE_FROM_POINT,
            'word_and_line_from_point': defines.MOUSE_SELECTION_WORD_AND_LINE_FROM_POINT,

View on GitHub (pinned to 6d5d0c4406)

Solutions

  1. Use prev, previous, next, or an integer 0-3
  2. For multi-token form use e.g. scroll_to_mark next 1

Example fix

# before
map f1 scroll_to_mark home
# after
map f1 scroll_to_mark next
Defensive patterns

Strategy: validation

Validate before calling

def valid_scroll_dest(q: str) -> bool:
    return q.lower() in ('prev','previous','next') or (q.isdigit() and 0 <= int(q) <= 3)

Prevention

When it happens

Trigger: map f1 scroll_to_mark home or toggle_marker-style specs; any non-numeric, non-keyword first token. Also when two tokens are given and parts[1] is not an int.

Common situations: Typo'd keywords ('backward', 'up'), or assuming arbitrary column numbers/out-of-range formats work.

Related errors


AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27). Data as JSON: /api/errors/aba65f7c51f368db. Report an issue: GitHub.