{"record":{"id":"3c5a00260e2deb3a","repo":"kovidgoyal/kitty","slug":"invalid-characters-in-visual-window-select-charact","errorCode":null,"errorMessage":"Invalid characters in visual_window_select_characters: {x} Only numbers (0-9) and alphabets (a-z,A-Z) are allowed. Ignoring.","messagePattern":"Invalid characters in visual_window_select_characters: (.+?) Only numbers \\(0-9\\) and alphabets \\(a-z,A-Z\\) are allowed\\. Ignoring\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"warning","filePath":"kitty/options/utils.py","lineNumber":818,"sourceCode":"        return positive_float(parts[0]), -1.0\n    return positive_float(parts[0]), positive_float(parts[1])\n\n\ndef resize_debounce_time(x: str) -> tuple[float, float]:\n    parts = x.split(maxsplit=1)\n    if len(parts) == 1:\n        return positive_float(parts[0]), 0.5\n    return positive_float(parts[0]), positive_float(parts[1])\n\n\ndef visual_window_select_characters(x: str) -> str:\n    import string\n\n    valid_characters = string.digits + string.ascii_uppercase + \"-=[]\\\\;',./`\"\n    ans = x.upper()\n    ans_chars = set(ans)\n    if not ans_chars.issubset(set(valid_characters)):\n        raise ValueError(f'Invalid characters in visual_window_select_characters: {x} Only numbers (0-9) and alphabets (a-z,A-Z) are allowed. Ignoring.')\n    if len(ans_chars) < len(x):\n        raise ValueError(f'Invalid characters in visual_window_select_characters: {x} Contains identical numbers or alphabets, case insensitive. Ignoring.')\n    return ans\n\n\ndef tab_separator(x: str) -> str:\n    for q in '\\'\"':\n        if x.startswith(q) and x.endswith(q):\n            x = x[1:-1]\n            if not x:\n                return ''\n            break\n    if not x.strip():\n        x = ('\\xa0' * len(x)) if x else default_tab_separator\n    return x\n\n\ndef tab_bar_edge(x: str) -> int:","sourceCodeStart":800,"sourceCodeEnd":836,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/options/utils.py#L800-L836","documentation":"visual_window_select_characters validator raises this when, after uppercasing, the set of characters contains anything outside digits, ASCII uppercase, and the punctuation \"-=[]\\\\;',./`\". kitty uses these characters to label windows during visual window selection mode.","triggerScenarios":"Setting visual_window_select_characters to include spaces, unicode letters, or other punctuation like '!' or '@'.","commonSituations":"Wanting more selectable windows than the default 0-9A-Z allows and adding invalid symbols.","solutions":["Restrict to 0-9, a-z/A-Z and the allowed punctuation set","Keep the default or extend only with allowed punctuation characters"],"exampleFix":"# before\nvisual_window_select_characters 0123456789abcdef!@\n# after\nvisual_window_select_characters 0123456789abcdef","handlingStrategy":"validation","validationCode":"import string\nALLOWED = set(string.digits + string.ascii_uppercase + \"-=[]\\\\;',./`\")\ndef valid_vwsc(x: str) -> bool:\n    return set(x.upper()).issubset(ALLOWED)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only alphanumerics plus the documented punctuation","Reject spaces/unicode before writing config"],"tags":["kitty","config","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"}