{"record":{"id":"4b6b0caa060a6170","repo":"kovidgoyal/kitty","slug":"unknown-menu-type-parts-0-known-types-global","errorCode":null,"errorMessage":"Unknown menu type: {parts[0]}. Known types: global","messagePattern":"Unknown menu type: (.+?)\\. Known types: global","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"kitty/options/utils.py","lineNumber":1151,"sourceCode":"                if v:\n                    v = expandvars(v, current_val)\n                yield key, v\n        else:\n            yield val, DELETE_ENV_VAR\n\n\ndef store_multiple(val: str, current_val: Container[str]) -> Iterable[tuple[str, str]]:\n    val = val.strip()\n    if val not in current_val:\n        yield val, val\n\n\ndef menu_map(val: str, current_val: Container[str]) -> Iterable[tuple[tuple[str, ...], str]]:\n    parts = val.split(maxsplit=1)\n    if len(parts) != 2:\n        raise ValueError(f'Ignoring invalid menu action: {val}')\n    if parts[0] != 'global':\n        raise ValueError(f'Unknown menu type: {parts[0]}. Known types: global')\n    start = 0\n    if parts[1].startswith('\"'):\n        start = 1\n        idx = parts[1].find('\"', 1)\n        if idx == -1:\n            raise ValueError(f'The menu entry name in {val} must end with a double quote')\n    else:\n        idx = parts[1].find(' ')\n        if idx == -1:\n            raise ValueError(f'The menu entry {val} must have an action')\n    location = ('global',) + tuple(parts[1][start:idx].split('::'))\n    yield location, parts[1][idx + 1 :].lstrip()\n\n\nallowed_shell_integration_values = frozenset({'enabled', 'disabled', 'no-rc', 'no-cursor', 'no-title', 'no-prompt-mark', 'no-complete', 'no-cwd', 'no-sudo'})\n\n\ndef shell_integration(x: str) -> frozenset[str]:","sourceCodeStart":1133,"sourceCodeEnd":1169,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/options/utils.py#L1133-L1169","documentation":"menu_map requires the first token to be the menu type; currently only 'global' is supported. Any other first token raises this error listing known types.","triggerScenarios":"menu main ... or menu tab ... — any type other than global.","commonSituations":"Expecting per-tab or per-window menus that kitty does not (yet) support; guessing type names.","solutions":["Use 'global' as the menu type","Remove unsupported menu lines until kitty supports other scopes"],"exampleFix":"# before\nmenu main \"Item\" launch nvim\n# after\nmenu global \"Item\" launch nvim","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"def is_menu_type(t: str) -> bool:\n    return t == 'global'","tryCatchPattern":null,"preventionTips":["Only 'global' menus exist; parameterize your generator accordingly"],"tags":["kitty","config","menus"],"backgroundTag":"config-value-validation-failed","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}