{"record":{"id":"392a7ef0d18ca976","repo":"kovidgoyal/kitty","slug":"invalid-unfocused-cursor-shape-allowed-values","errorCode":null,"errorMessage":"Invalid unfocused cursor shape: {} allowed values are {}","messagePattern":"Invalid unfocused cursor shape: (.+?) allowed values are (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"kitty/options/utils.py","lineNumber":651,"sourceCode":"    'beam': CURSOR_BEAM,\n    'underline': CURSOR_UNDERLINE,\n    'hollow': CURSOR_HOLLOW,\n    'unchanged': NO_CURSOR_SHAPE,\n}\n\n\ndef to_cursor_shape(x: str) -> int:\n    try:\n        return cshapes[x.lower()]\n    except KeyError:\n        raise ValueError('Invalid cursor shape: {} allowed values are {}'.format(x, ', '.join(cshapes)))\n\n\ndef to_cursor_unfocused_shape(x: str) -> int:\n    try:\n        return cshapes_unfocused[x.lower()]\n    except KeyError:\n        raise ValueError('Invalid unfocused cursor shape: {} allowed values are {}'.format(x, ', '.join(cshapes_unfocused)))\n\n\ndef cursor_trail_decay(x: str) -> tuple[float, float]:\n    fast, slow = map(positive_float, x.split())\n    slow = max(slow, fast)\n    return fast, slow\n\n\ndef cursor_trail_start_threshold(x: str) -> tuple[int, int]:\n    parts = x.split()\n    if len(parts) == 1:\n        val = positive_int(parts[0])\n        return val, val\n    if len(parts) == 2:\n        return positive_int(parts[0]), positive_int(parts[1])\n    raise ValueError(f'cursor_trail_start_threshold must have 1 or 2 values, got: {x!r}')\n\n","sourceCodeStart":633,"sourceCodeEnd":669,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/options/utils.py#L633-L669","documentation":"Same as cursor_shape but for cursor_shape_unfocused (to_cursor_unfocused_shape). Raised when the value is not in cshapes_unfocused, which may additionally include 'hollow' variants depending on kitty version.","triggerScenarios":"cursor_shape_unfocused <typo> in kitty.conf, e.g. cursor_shape_unfocused hollow-blok.","commonSituations":"Typos, or expecting a shape that only exists in newer/older kitty versions.","solutions":["Use an allowed value from the error message list (e.g. block, beam, underline, hollow_block)","Upgrade kitty if you need a newer shape name"],"exampleFix":"# before\ncursor_shape_unfocused hollow-blok\n# after\ncursor_shape_unfocused hollow_block","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"def is_unfocused_shape(x: str) -> bool:\n    return x.lower() in {'block','beam','underline','hollow','hollow_block'}","tryCatchPattern":null,"preventionTips":["Use values from the docs for your kitty version","Avoid shapes only present in other terminals"],"tags":["kitty","config","cursor"],"backgroundTag":"config-value-validation-failed","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}