{"record":{"id":"fc3bc52a6b638d21","repo":"kovidgoyal/kitty","slug":"the-window-layout-p-is-unknown","errorCode":null,"errorMessage":"The window layout {p} is unknown","messagePattern":"The window layout (.+?) is unknown","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"kitty/options/utils.py","lineNumber":738,"sourceCode":"\ndef window_size(val: str) -> tuple[int, str]:\n    val = val.lower()\n    unit = 'cells' if val.endswith('c') else 'px'\n    return positive_int(val.rstrip('c')), unit\n\n\ndef parse_layout_names(parts: Iterable[str]) -> list[str]:\n    from kitty.layout.interface import all_layouts\n\n    ans = []\n    for p in parts:\n        p = p.lower()\n        if p in ('*', 'all'):\n            ans.extend(sorted(all_layouts))\n            continue\n        name = p.partition(':')[0]\n        if name not in all_layouts:\n            raise ValueError(f'The window layout {p} is unknown')\n        ans.append(p)\n    return uniq(ans)\n\n\ndef to_layout_names(raw: str) -> list[str]:\n    return parse_layout_names(x.strip() for x in raw.split(','))\n\n\ndef window_border_width(x: str | int | float) -> tuple[float, str]:\n    unit = 'pt'\n    if isinstance(x, str):\n        trailer = x[-2:]\n        if trailer in ('px', 'pt'):\n            unit = trailer\n            val = float(x[:-2])\n        else:\n            val = float(x)\n    else:","sourceCodeStart":720,"sourceCodeEnd":756,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/options/utils.py#L720-L756","documentation":"parse_layout_names raises this when a window layout name in enabled_layouts (or a layout-related remote-control message) is not in all_layouts. The '*'/'all' wildcard expands to all registered layouts; anything else must be a known layout name, optionally with ':params' after partitioning on ':'.","triggerScenarios":"enabled_layouts grid,vertical,stacking_typo or layout messages with unknown names like 'splits' on kitty versions before splits existed.","commonSituations":"Typos, or using layouts (splits, stacks, fat/bias variants) that don't exist in the installed kitty version.","solutions":["Check the error-time list: layouts, fat, grid, horizontal, splits, stack, tall, vertical and fix the name","Upgrade kitty if the layout exists only in newer versions","Use '*' to enable all layouts"],"exampleFix":"# before\nenabled_layouts grid,vertcial\n# after\nenabled_layouts grid,vertical","handlingStrategy":"validation","validationCode":"def valid_layouts(raw: str, known: set[str]) -> bool:\n    return all(p.partition(':')[0] in known or p in ('*','all') for p in (q.strip().lower() for q in raw.split(',')))","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Discover layouts at runtime: from kitty.layout import all_layouts","Use '*' to enable everything"],"tags":["kitty","config","layouts","window-management"],"backgroundTag":"config-value-validation-failed","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}