{"record":{"id":"168e6894034d1b83","repo":"kovidgoyal/kitty","slug":"mouse-button-xbutton-not-recognized-ignoring","errorCode":null,"errorMessage":"Mouse button: {xbutton} not recognized, ignoring","messagePattern":"Mouse button: (.+?) not recognized, ignoring","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"kitty/options/utils.py","lineNumber":1614,"sourceCode":"        xbutton, event, modes = parts\n        action = ''\n    else:\n        log_error(f'Ignoring invalid mouse action: {val}')\n        return\n    kparts = xbutton.split('+')\n    if len(kparts) > 1:\n        mparts, obutton = kparts[:-1], kparts[-1].lower()\n        mods = parse_mods(mparts, obutton)\n        if mods is None:\n            return\n    else:\n        obutton = parts[0].lower()\n        mods = 0\n    try:\n        b = mouse_button_map.get(obutton, obutton)[1:]\n        button = getattr(defines, f'GLFW_MOUSE_BUTTON_{b}')\n    except Exception:\n        log_error(f'Mouse button: {xbutton} not recognized, ignoring')\n        return\n    try:\n        count = mouse_trigger_count_map[event.lower()]\n    except KeyError:\n        log_error(f'Mouse event type: {event} not recognized, ignoring')\n        return\n    specified_modes = frozenset(modes.lower().split(','))\n    if specified_modes - {'grabbed', 'ungrabbed'}:\n        log_error(f'Mouse modes: {modes} not recognized, ignoring')\n        return\n    for mode in sorted(specified_modes):\n        yield MouseMapping(button, mods, count, mode == 'grabbed', definition=action)\n\n\ndef parse_font_spec(spec: str) -> FontSpec:\n    return FontSpec.from_setting(spec)\n\n","sourceCodeStart":1596,"sourceCodeEnd":1632,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/options/utils.py#L1596-L1632","documentation":"The mouse button token could not be resolved to a GLFW_MOUSE_BUTTON_* constant (after applying mouse_button_map aliases and stripping 'b'). The mapping is ignored.","triggerScenarios":"mouse_map middle2 click ... or 'mouse_map baux click ...' — unrecognized button names or malformed 'b<N>' forms cause the getattr to fail.","commonSituations":"Typos in button names; using wheel without proper event names; assuming arbitrary button numbers work without the b prefix.","solutions":["Use standard names: left, right, middle, b1..b8, or wheel directions per docs.","Fix typos like 'middle2'.","Check mouse_button_map if you remapped aliases."],"exampleFix":"# before\nmouse_map middle2 click ungrabbed paste\n\n# after\nmouse_map middle click ungrabbed paste","handlingStrategy":"validation","validationCode":"def valid_mouse_button(tok: str) -> bool:\n    import re\n    return bool(re.fullmatch(r'(ctrl\\+|shift\\+|alt\\+|super\\+)*(left|right|middle|b[1-8]|wheel_up|wheel_down)', tok, re.I))","typeGuard":"def is_known_mouse_button(tok: str) -> bool:\n    base = tok.split('+')[-1].lower()\n    return base in {'left','right','middle','b1','b2','b3','b4','b5','b6','b7','b8','wheel_up','wheel_down'}","tryCatchPattern":null,"preventionTips":["Use standard button names or bN numeric form","Remember mouse_button_map aliases if customized"],"tags":["kitty","config","mouse","mouse-map"],"backgroundTag":"config-value-validation-failed","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}