{"record":{"id":"deef851a3beeba11","repo":"kovidgoyal/kitty","slug":"the-value-val-is-not-a-valid-choice-for-tab-bar-deef85","errorCode":null,"errorMessage":"The value {val} is not a valid choice for tab_bar_style","messagePattern":"The value (.+?) is not a valid choice for tab_bar_style","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"kitty/options/parse.py","lineNumber":1409,"sourceCode":"    def tab_bar_margin_color(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['tab_bar_margin_color'] = to_color_or_none(val)\n\n    def tab_bar_margin_height(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['tab_bar_margin_height'] = tab_bar_margin_height(val)\n\n    def tab_bar_margin_width(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['tab_bar_margin_width'] = positive_float(val)\n\n    def tab_bar_min_tabs(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['tab_bar_min_tabs'] = tab_bar_min_tabs(val)\n\n    def tab_bar_show_new_tab_button(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['tab_bar_show_new_tab_button'] = to_bool(val)\n\n    def tab_bar_style(self, val: str, ans: dict[str, typing.Any]) -> None:\n        val = val.lower()\n        if val not in self.choices_for_tab_bar_style:\n            raise ValueError(f\"The value {val} is not a valid choice for tab_bar_style\")\n        ans[\"tab_bar_style\"] = val\n\n    choices_for_tab_bar_style = frozenset(('fade', 'hidden', 'powerline', 'separator', 'slant', 'custom'))\n\n    def tab_fade(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['tab_fade'] = tab_fade(val)\n\n    def tab_powerline_style(self, val: str, ans: dict[str, typing.Any]) -> None:\n        val = val.lower()\n        if val not in self.choices_for_tab_powerline_style:\n            raise ValueError(f\"The value {val} is not a valid choice for tab_powerline_style\")\n        ans[\"tab_powerline_style\"] = val\n\n    choices_for_tab_powerline_style = frozenset(('angled', 'round', 'slanted'))\n\n    def tab_separator(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['tab_separator'] = tab_separator(val)\n","sourceCodeStart":1391,"sourceCodeEnd":1427,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/options/parse.py#L1391-L1427","documentation":"tab_bar_style selects the tab bar renderer and must be one of fade, hidden, powerline, separator, slant, custom. The parser lowercases and validates against this frozenset; custom requires you to supply a tab_bar_style definition via separate config.","triggerScenarios":"Setting `tab_bar_style custom` without defining the custom tab bar functions, or using an unknown style like `tab_bar_style minimal` or `tab_bar_style powerline10`.","commonSituations":"Typos (e.g. 'powerlin'), using community themes written as Lua/other plugins with different style names, or picking 'custom' without implementing draw_tab_bar in a custom Python file.","solutions":["Use one of: fade, hidden, powerline, separator, slant, custom","If using custom, ensure you have the required custom tab bar implementation (tab_bar_style.py / kittens) set up","Check spelling — e.g. it is 'powerline', not 'powerlines'"],"exampleFix":"# before\ntab_bar_style powerlines\n# after\ntab_bar_style powerline","handlingStrategy":"validation","validationCode":"value = value.lower()\nif value not in ('fade','hidden','powerline','separator','slant','custom'):\n    raise SystemExit(f'bad tab_bar_style: {value}')","typeGuard":"def is_tab_bar_style(v: str) -> bool:\n    return v.lower() in ('fade','hidden','powerline','separator','slant','custom')","tryCatchPattern":null,"preventionTips":["Only choose custom after implementing the custom tab bar","Double-check spelling when copying themes"],"tags":["kitty","config","validation","tab-bar"],"backgroundTag":"config-invalid-choice","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}