Skip to content

Kitty keyboard protocol: No text reported for input from Compose key #10049

@mitchellh

Description

@mitchellh

Discussed in #10026

Originally posted by delthas December 23, 2025

Issue Description

When the Kitty keyboard protocol is enabled and the modifier 0b1000 (8) Report all keys as escape codes is enabled, ghostty does not report any key for composed keys.

I am using an AZERTY (French) keyboard layout, but that should not matter much. To send a composed key, I typically:

  • Press the Compose (Right Alt) key
  • Press and release some key, such as ,
  • Release the Compose (Right Alt) key
  • At this point, ghostty properly shows a pending, "being-composed" key, such as an acute accent
  • Press and release some "base" key, such as a
  • At this point, the pending composed key disappears

Expected Behavior

I would expect ghostty to send a key event for the composed key, containing the composed text, such as á.

Foot does:

$ kitty +kitten show_key -m kitty
Press any keys - Ctrl+C or Ctrl+D will terminate
num_lock+ISO_LEVEL3_SHIFT PRESS 
CSI 57453 ; 129 : 1 u

num_lock+ISO_LEVEL3_SHIFT RELEASE 
CSI 57453 ; 129 : 3 u

Text: á

num_lock+a RELEASE 
CSI 97 ; 129 : 3 u

Kitty does:

$ kitty +kitten show_key -m kitty
Press any keys - Ctrl+C or Ctrl+D will terminate
num_lock+ENTER RELEASE 
CSI 13 ; 129 : 3 u

num_lock+ISO_LEVEL3_SHIFT PRESS 
CSI 57453 ; 129 u

num_lock+ISO_LEVEL3_SHIFT RELEASE 
CSI 57453 ; 129 : 3 u

Text: ä

Notice the Text event.

Actual Behavior

ghostty does not send any key event for the composed key.

$ kitty +kitten show_key -m kitty
Press any keys - Ctrl+C or Ctrl+D will terminate
alt+num_lock+RIGHT_ALT PRESS
CSI 57449 ; 131 u

num_lock+RIGHT_ALT RELEASE
CSI 57449 ; 129 : 3 u

num_lock+a RELEASE
CSI 97 :  : 113 ; 129 : 3 u
Alternate key: q

Notice no event was sent for the composed key. There is no way for the application to kow what was the input.

Reproduction Steps

  • Open Ghostty
  • Negotiate the Kitty keyboard protocol, with at least the report all keys modifier (for example, use kitty +kitten show_key -m kitty)
  • Press the Compose (Right Alt) key
  • Press and release some key, such as ,
  • Release the Compose (Right Alt) key
  • At this point, ghostty properly shows a pending, "being-composed" key, such as an acute accent
  • Press and release some "base" key, such as a
  • At this point, the pending composed key disappears
  • No event for the composed key is sent

Ghostty Logs

warning(stream): unimplemented CSI action: ESC [ * {  } x
warning(io_handler): unimplemented or unknown SGR attribute: .{ .full = { 222 }, .partial = { 222 } }

Ghostty Version

Ghostty 1.2.0-r1457.gfbed63b-1-arch

Version
  - version: 1.2.0-r1457.gfbed63b-1-arch
  - channel: tip
Build Config
  - Zig version   : 0.15.2
  - build mode    : .ReleaseFast
  - app runtime   : .gtk
  - font engine   : .fontconfig_freetype
  - renderer      : renderer.generic.Renderer(renderer.OpenGL)
  - libxev        : io_uring
  - kernel version: 6.17.9-arch1-1
  - desktop env   : gnome
  - GTK version   :
    build         : 4.20.3
    runtime       : 4.20.3
  - libadwaita    : enabled
    build         : 1.8.2
    runtime       : 1.8.2
  - libX11        : enabled
  - libwayland    : enabled

OS Version Information

Arch Linux

(Linux only) Display Server

Wayland

(Linux only) Desktop Environment/Window Manager

GNOME 49

Minimal Ghostty Configuration

# Default config

Additional Relevant Configuration

No response

I acknowledge that:

  • I have reviewed the FAQ and confirm that my issue is NOT among them.
  • I have searched the Ghostty repository (both open and closed Discussions and Issues) and confirm this is not a duplicate of an existing issue or discussion.
  • I have checked the "Preview" tab on all text fields to ensure that everything looks right, and have wrapped all configuration and code in code blocks with a group of three backticks (```) on separate lines.

Metadata

Metadata

Assignees

No one assigned

    Labels

    inputKeyboard or mouse input

    Type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions