{"record":{"id":"f98fa840a37475cd","repo":"kovidgoyal/kitty","slug":"the-value-val-is-not-a-valid-choice-for-window-l","errorCode":null,"errorMessage":"The value {val} is not a valid choice for window_logo_position","messagePattern":"The value (.+?) is not a valid choice for window_logo_position","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"kitty/options/parse.py","lineNumber":1548,"sourceCode":"    def window_alert_on_bell(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['window_alert_on_bell'] = to_bool(val)\n\n    def window_border_width(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['window_border_width'] = window_border_width(val)\n\n    def window_drag_tolerance(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['window_drag_tolerance'] = float(val)\n\n    def window_logo_alpha(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['window_logo_alpha'] = unit_float(val)\n\n    def window_logo_path(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['window_logo_path'] = config_or_absolute_path(val)\n\n    def window_logo_position(self, val: str, ans: dict[str, typing.Any]) -> None:\n        val = val.lower()\n        if val not in self.choices_for_window_logo_position:\n            raise ValueError(f\"The value {val} is not a valid choice for window_logo_position\")\n        ans[\"window_logo_position\"] = val\n\n    choices_for_window_logo_position = choices_for_placement_strategy\n\n    def window_logo_scale(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['window_logo_scale'] = window_logo_scale(val)\n\n    def window_margin_width(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['window_margin_width'] = edge_width(val)\n\n    def window_padding_width(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['window_padding_width'] = edge_width(val)\n\n    def window_resize_step_cells(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['window_resize_step_cells'] = positive_int(val)\n\n    def window_resize_step_lines(self, val: str, ans: dict[str, typing.Any]) -> None:\n        ans['window_resize_step_lines'] = positive_int(val)","sourceCodeStart":1530,"sourceCodeEnd":1566,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/options/parse.py#L1530-L1566","documentation":"window_logo_position places the background logo and reuses the placement strategy set (choices_for_placement_strategy: e.g. top-left, center, bottom-right, etc.). The parser lowercases and validates; anything not a recognized placement keyword raises this error.","triggerScenarios":"Setting `window_logo_position top-left-corner`, `middle`, or an inverted order like `left-top` in kitty.conf while window_logo_path is set.","commonSituations":"Inverting the corner order (left-top instead of top-left); using 'middle' instead of 'center'; copy-paste from other tools' gravity syntax (CSS/ImageMagick).","solutions":["Use standard corner/edge names in vertical-horizontal order: e.g. top-left, top, center, bottom-right","Use 'center' not 'middle'","If unsure of the exact list, check choices_for_placement_strategy in kitty/options/parse.py or the docs for placement strategies"],"exampleFix":"# before\nwindow_logo_position left-top\n# after\nwindow_logo_position top-left","handlingStrategy":"validation","validationCode":"from kitty.options.parse import choices_for_placement_strategy\nvalue = value.lower()\nif value not in choices_for_placement_strategy:\n    raise SystemExit(f'bad window_logo_position: {value}')","typeGuard":"def is_window_logo_position(v: str, valid: frozenset[str]) -> bool:\n    return v.lower() in valid","tryCatchPattern":null,"preventionTips":["Corner order is vertical-horizontal: top-left not left-top","Use 'center' not 'middle'"],"tags":["kitty","config","validation","logo","placement"],"backgroundTag":"config-invalid-choice","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}