kovidgoyal/kitty · error · ValueError

{parts[0]} is not a valid edge specification

Error message

{parts[0]} is not a valid edge specification

What it means

The left-hand side of name=value must be a known spacing key: margin/padding/border (optionally with -left/-top/-right/-bottom), or cell-width/cell-height. Unknown names raise this error.

Source

Thrown at kitty/rc/set_spacing.py:53

        setattr(opts, q, new_edges)


def parse_spacing_settings(args: Iterable[str]) -> dict[str, float | None]:
    mapper: dict[str, list[LiteralString]] = {}
    for q in ('margin', 'padding'):
        mapper[q] = f'{q}-left {q}-top {q}-right {q}-bottom'.split()
        mapper[f'{q}-h'] = mapper[f'{q}-horizontal'] = f'{q}-left {q}-right'.split()
        mapper[f'{q}-v'] = mapper[f'{q}-vertical'] = f'{q}-top {q}-bottom'.split()
        for edge in ('left', 'top', 'right', 'bottom'):
            mapper[f'{q}-{edge}'] = [f'{q}-{edge}']
    settings: dict[str, float | None] = {}
    for spec in args:
        parts = spec.split('=', 1)
        if len(parts) != 2:
            raise ValueError(f'{spec} is not a valid setting')
        which = mapper.get(parts[0].lower())
        if not which:
            raise ValueError(f'{parts[0]} is not a valid edge specification')
        if parts[1].lower() == 'default':
            val = None
        else:
            try:
                val = float(parts[1])
            except Exception:
                raise ValueError(f'{parts[1]} is not a number')
        for q in which:
            settings[q] = val
    return settings


class SetSpacing(RemoteCommand):
    protocol_spec = __doc__ = """
    settings+/dict.spacing: An object mapping margins/paddings using canonical form {'margin-top': 50, 'padding-left': null} etc
    match_window/str: Window to change paddings and margins in
    match_tab/str: Tab to change paddings and margins in
    all/bool: Boolean indicating change paddings and margins everywhere or not

View on GitHub (pinned to 6d5d0c4406)

Solutions

  1. Use valid keys: margin, padding, border (with optional -left/-top/-right/-bottom), cell-width, cell-height
  2. Check kitty @set-spacing --help for the current list

Example fix

# before
kitten @set-spacing margins=10
# after
kitten @set-spacing margin=10
Defensive patterns

Strategy: type-guard

Validate before calling

KEYS={'margin','padding','border','cell-width','cell-height'}
# plus f'{k}-{edge}' variants

Type guard

def is_valid_key(k): base=k.rsplit('-',1)[0]; edge=k.rsplit('-',1)[-1]; return k in KEYS or (base in KEYS and edge in {'left','top','right','bottom'})

Prevention

When it happens

Trigger: Passing 'kitten @set-spacing foo=10' or a misspelled edge like 'margin-leftt=2'.

Common situations: Typos in spacing names, or scripts assuming a spacing key that kitty doesn't support.

Related errors


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