{"record":{"id":"7b4c87ad7a3baca6","repo":"kovidgoyal/kitty","slug":"unknown-signal-rest-ignoring","errorCode":null,"errorMessage":"Unknown signal: {rest} ignoring","messagePattern":"Unknown signal: (.+?) ignoring","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"kitty/options/utils.py","lineNumber":228,"sourceCode":"def simple_parse(func: str, rest: str) -> FuncArgsType:\n    return func, (rest,)\n\n\n@func_with_args('set_font_size')\ndef float_parse(func: str, rest: str) -> FuncArgsType:\n    return func, (float(rest),)\n\n\n@func_with_args('signal_child')\ndef signal_child_parse(func: str, rest: str) -> FuncArgsType:\n    import signal\n\n    signals = []\n    for q in rest.split():\n        try:\n            signum = getattr(signal, q.upper())\n        except AttributeError:\n            log_error(f'Unknown signal: {rest} ignoring')\n        else:\n            signals.append(signum)\n    return func, tuple(signals)\n\n\n@func_with_args('change_font_size')\ndef parse_change_font_size(func: str, rest: str) -> tuple[str, tuple[bool, str | None, float]]:\n    vals = rest.strip().split(maxsplit=1)\n    if len(vals) != 2:\n        log_error(f'Invalid change_font_size specification: {rest}, treating it as default')\n        return func, (True, None, 0)\n    c_all = vals[0].lower() == 'all'\n    sign: str | None = None\n    amt = vals[1]\n    if amt[0] in '+-*/':\n        sign = amt[0]\n        amt = amt[1:]\n    return func, (c_all, sign, float(amt.strip()))","sourceCodeStart":210,"sourceCodeEnd":246,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/options/utils.py#L210-L246","documentation":"kitty's signal_child action parser could not resolve a token in the map/action definition to a Python signal module attribute (signal.<NAME>). Unknown tokens are skipped and only the recognized signals are kept, so the mapping still works but silently does less than intended.","triggerScenarios":"A map action like `signal_child SIGUSR1 foo` where the signal name is misspelled or not available on the platform (e.g. SIGWINCH variants, case typos like SIGUSR1X). The parser does getattr(signal, token.upper()) and gets AttributeError for each unrecognized token.","commonSituations":"Typos in kitty.conf signal names, using Linux-only signal names on macOS/BSD, or copy-pasting configs between platforms with different signal availability.","solutions":["Fix the signal name spelling in kitty.conf (must match a constant in Python's signal module, e.g. SIGUSR1, SIGTERM)","Check available names with `python3 -c \"import signal; print([n for n in dir(signal) if n.startswith('SIG')])\"` on the target platform","Verify platform support before using less common signals like SIGWINCH or SIGPOLL"],"exampleFix":"# before\nmap f1 signal_child SIGUSR1X some-process\n# after\nmap f1 signal_child SIGUSR1 some-process","handlingStrategy":"validation","validationCode":"import signal\nvalid = all(hasattr(signal, t.upper()) for t in 'SIGUSR1 myproc'.split() if t.startswith('SIG'))","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate signal names against Python's signal module before writing them into kitty.conf","Prefer universally available signals like SIGUSR1/SIGTERM for cross-platform configs"],"tags":["kitty","config","signals","parser"],"backgroundTag":"invalid-config-value","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}