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
- Use --action=os-panel with panel options to resize panels
- Verify is_layer_shell / window type before choosing the action
- Tighten the --match expression to select regular windows only
- 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
- Classify windows before choosing resize actions
- Reserve generic resize loops for non-layer-shell windows
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
- The OS Window {os_window_id} is not a panel you should not u
- The OS Window {os_window_id} has no panel configuration
- Failed to change panel configuration for OS Window {os_windo
- The OS Window {os_window_id} is a desktop panel that cannot
- The OS Window {os_window_id} is a panel and cannot be resize
AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27).
Data as JSON: /api/errors/e92f1b2e4d5d7a1d.
Report an issue: GitHub.