kovidgoyal/kitty · warning · RemoteControlErrorWithoutTraceback

The OS Window {os_window_id} is a desktop panel, no actions

Error message

The OS Window {os_window_id} is a desktop panel, no actions other than resizing are supported for it

What it means

Catch-all raised when any action other than the panel-specific ones (os-panel, hide, show, toggle-visibility, toggle-fullscreen) is requested for a window that is a desktop panel. Panels only support visibility and panel-resizing operations; generic actions like resize, size, center fall through to this guard.

Source

Thrown at kitty/rc/resize_os_window.py:160

                        from kitty.launch import layer_shell_config_from_panel_opts

                        try:
                            lsc = layer_shell_config_from_panel_opts(panels)
                        except Exception as e:
                            raise RemoteControlErrorWithoutTraceback(f'Invalid panel options specified: {e}')
                    if not set_layer_shell_config(os_window_id, lsc):
                        raise RemoteControlErrorWithoutTraceback(f'Failed to change panel configuration for OS Window {os_window_id}')
                elif ac == 'toggle-visibility':
                    toggle_os_window_visibility(os_window_id)
                elif ac == 'hide':
                    toggle_os_window_visibility(os_window_id, False)
                elif ac == 'show':
                    toggle_os_window_visibility(os_window_id, True)
                elif ac == 'toggle-fullscreen':
                    if not toggle_fullscreen(os_window_id):
                        raise RemoteControlErrorWithoutTraceback(f'The OS Window {os_window_id} is a desktop panel that cannot be made fullscreen')
                elif is_panel:
                    raise RemoteControlErrorWithoutTraceback(
                        f'The OS Window {os_window_id} is a desktop panel, no actions other than resizing are supported for it'
                    )
                elif ac == 'resize':
                    boss.resize_os_window(
                        os_window_id,
                        width=payload_get('width'),
                        height=payload_get('height'),
                        unit=payload_get('unit'),
                        incremental=payload_get('incremental'),
                        metrics=metrics,
                    )
                elif ac == 'toggle-maximized':
                    boss.toggle_maximized(os_window_id)
        return None


resize_os_window = ResizeOSWindow()

View on GitHub (pinned to 6d5d0c4406)

Solutions

  1. Use --action=os-panel with panel options to resize panels
  2. Verify is_layer_shell / window type before choosing the action
  3. Tighten the --match expression to select regular windows only
  4. For layout scripts, branch: normal windows -> resize, panels -> os-panel

Example fix

# before
kitten @ resize-os-window --match id:$PANEL_ID --action=resize --width=80
# after
kitten @ resize-os-window --match id:$PANEL_ID --action=os-panel --os-panel-size=80
Defensive patterns

Strategy: type-guard

Validate before calling

metrics = get_window_metrics(os_window_id)
action = 'os-panel' if metrics['is_layer_shell'] else 'resize'
send({'cmd': 'resize_os_window', 'action': action, ...})

Type guard

def is_panel(w: dict) -> bool:
    return bool(w.get('is_layer_shell'))

Prevention

When it happens

Trigger: kitten @ resize-os-window --action=resize (or size/center) targeting a layer-shell panel window.

Common situations: Window-management loops that call resize on all windows; scripts written before panels existed; matching by ambiguous criteria that hits the panel.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27). Data as JSON: /api/errors/e92f1b2e4d5d7a1d. Report an issue: GitHub.