{"record":{"id":"64fe21c6c1fc3caf","repo":"kovidgoyal/kitty","slug":"unknown-key-action-action","errorCode":null,"errorMessage":"Unknown key action: {action}","messagePattern":"Unknown key action: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"kitty/conf/utils.py","lineNumber":535,"sourceCode":"        return ans\n\n\ndef parse_kittens_func_args(action: str, args_funcs: dict[str, KeyFunc[tuple[str, Any]]]) -> KeyAction:\n    parts = action.strip().split(' ', 1)\n    func = parts[0]\n    if len(parts) == 1:\n        return KeyAction(func, ())\n    rest = parts[1]\n\n    try:\n        parser = args_funcs[func]\n    except KeyError as e:\n        raise KeyError(f'Unknown action: {func}. Check if map action: {action} is valid') from e\n\n    try:\n        func, args = parser(func, rest)\n    except Exception:\n        raise ValueError(f'Unknown key action: {action}')\n\n    if not isinstance(args, (list, tuple)):\n        args = (args,)\n\n    return KeyAction(func, tuple(args))\n\n\nKittensKeyDefinition = tuple[ParsedShortcut, KeyAction]\nKittensKeyMap = dict[ParsedShortcut, KeyAction]\n\n\ndef parse_kittens_key(val: str, funcs_with_args: dict[str, KeyFunc[tuple[str, Any]]]) -> KittensKeyDefinition | None:\n    from ..key_encoding import parse_shortcut\n\n    sc, action = val.partition(' ')[::2]\n    if not sc or not action:\n        return None\n    ans = parse_kittens_func_args(action, funcs_with_args)","sourceCodeStart":517,"sourceCodeEnd":553,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/conf/utils.py#L517-L553","documentation":"The companion error to 54: when the action name resolves but its argument parser throws (bad or malformed arguments for the action), parse_kittens_func_args re-raises ValueError('Unknown key action: {action}') covering the whole map line.","triggerScenarios":"A recognized kitten map action whose argument string fails parsing, e.g. wrong argument count or invalid argument format.","commonSituations":"Argument syntax changes across kitty versions; copy-pasted map lines from other kittens with different action signatures.","solutions":["Check the action's expected arguments in docs and fix them","Quote/escape arguments containing spaces","Match the action syntax to your kitty version"],"exampleFix":"# before\nmap ctrl+x send_text\n# after\nmap ctrl+x send_text all hello","handlingStrategy":"try-catch","validationCode":"# validate against the action's expected argument shape before parsing\nparts = action.split(' ', 1)\nassert len(parts) == 2, 'action needs arguments'","typeGuard":null,"tryCatchPattern":"try:\n    parse_kittens_func_args(action)\nexcept ValueError as e:\n    if 'Unknown key action' in str(e):\n        log_config_error(action)\n    else:\n        raise","preventionTips":["Match argument count/format to the action's documented syntax","Version-pin kitten configs whose action syntax changed"],"tags":["kitty","keybinding","kitten","config","valueerror"],"backgroundTag":"invalid-config-value","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}