Package org.jline.terminal.impl
Class KittyKeyboardSupport
java.lang.Object
org.jline.terminal.impl.KittyKeyboardSupport
Utility class for Kitty Keyboard Protocol support in terminals.
The Kitty Keyboard Protocol is a progressive enhancement to terminal keyboard
handling that replaces legacy, ambiguous escape code encodings with unambiguous
CSI … u sequences. It allows applications to reliably distinguish key
combinations that were previously indistinguishable, such as Shift+Enter versus
Enter, or Ctrl+I versus Tab.
The protocol uses a flags-based push/pop stack model. Applications push a set of enhancement flags when entering an interactive mode and pop them when leaving. Main and alternate screens maintain independent stacks.
Enhancement Flags
| Flag | Value | Effect |
|---|---|---|
| Disambiguate | 1 | All keys get unambiguous CSI … u encoding |
| Report event types | 2 | Adds press/repeat/release distinction |
| Report alternate keys | 4 | Sends shifted + base-layout key codes |
| Report all keys | 8 | Even plain letters become CSI sequences |
| Report associated text | 16 | Adds generated text as codepoints |
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringDA1 (Primary Device Attributes) query used as sentinel:CSI cstatic final intstatic final intstatic final intstatic final intDisambiguate escape codes: all keys get unambiguous CSI encoding.static final intReport all keys as escape codes, including plain text keys.static final intReport alternate keys: shifted and base-layout key codes.static final intReport event types: press, repeat, release.static final intReport associated text as Unicode codepoints.static final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final StringQuery the current enhancement flags:CSI ? u -
Method Summary
Modifier and TypeMethodDescriptionstatic StringaltKey(char letter) Builds a kitty keyboard escape sequence for Alt+letter.static StringctrlAltKey(char letter) Builds a kitty keyboard escape sequence for Ctrl+Alt+letter.static StringctrlKey(char letter) Builds a kitty keyboard escape sequence for Ctrl+letter.static booleanisFlagsResponse(String sequence) Checks whether a raw sequence looks like a kitty keyboard flags query response.static StringkeySequence(int keyCode, int modifiers) Builds a kitty keyboard escape sequence string for a key with modifiers.static StringmodifiedKey(int keyCode, boolean shift, boolean alt, boolean ctrl) Builds a kitty keyboard escape sequence for a special key with modifiers.static intparseFlagsResponse(String sequence) Parses the flags value from a kitty keyboard query response.static StringpopFlags()Returns the escape sequence to pop a single entry from the stack.static StringpopFlags(int count) Returns the escape sequence to pop enhancement flags from the stack.static StringpushFlags(int flags) Returns the escape sequence to push enhancement flags onto the stack.static StringReturns the escape sequence to push enhancement modes onto the stack.static inttoFlags(EnumSet<Terminal.KittyKeyboardMode> modes) Converts a set ofTerminal.KittyKeyboardModevalues to the protocol bitmask.
-
Field Details
-
FLAG_DISAMBIGUATE
public static final int FLAG_DISAMBIGUATEDisambiguate escape codes: all keys get unambiguous CSI encoding.- See Also:
-
FLAG_REPORT_EVENTS
public static final int FLAG_REPORT_EVENTSReport event types: press, repeat, release.- See Also:
-
FLAG_REPORT_ALTERNATES
public static final int FLAG_REPORT_ALTERNATESReport alternate keys: shifted and base-layout key codes.- See Also:
-
FLAG_REPORT_ALL_KEYS
public static final int FLAG_REPORT_ALL_KEYSReport all keys as escape codes, including plain text keys.- See Also:
-
FLAG_REPORT_TEXT
public static final int FLAG_REPORT_TEXTReport associated text as Unicode codepoints.- See Also:
-
QUERY_FLAGS
-
DA1_QUERY
DA1 (Primary Device Attributes) query used as sentinel:CSI c- See Also:
-
MOD_SHIFT
public static final int MOD_SHIFT- See Also:
-
MOD_ALT
public static final int MOD_ALT- See Also:
-
MOD_CTRL
public static final int MOD_CTRL- See Also:
-
MOD_SUPER
public static final int MOD_SUPER- See Also:
-
MOD_HYPER
public static final int MOD_HYPER- See Also:
-
MOD_META
public static final int MOD_META- See Also:
-
MOD_CAPS_LOCK
public static final int MOD_CAPS_LOCK- See Also:
-
MOD_NUM_LOCK
public static final int MOD_NUM_LOCK- See Also:
-
EVENT_PRESS
public static final int EVENT_PRESS- See Also:
-
EVENT_REPEAT
public static final int EVENT_REPEAT- See Also:
-
EVENT_RELEASE
public static final int EVENT_RELEASE- See Also:
-
KEY_ESCAPE
public static final int KEY_ESCAPE- See Also:
-
KEY_ENTER
public static final int KEY_ENTER- See Also:
-
KEY_TAB
public static final int KEY_TAB- See Also:
-
KEY_BACKSPACE
public static final int KEY_BACKSPACE- See Also:
-
KEY_INSERT
public static final int KEY_INSERT- See Also:
-
KEY_DELETE
public static final int KEY_DELETE- See Also:
-
KEY_LEFT
public static final int KEY_LEFT- See Also:
-
KEY_RIGHT
public static final int KEY_RIGHT- See Also:
-
KEY_UP
public static final int KEY_UP- See Also:
-
KEY_DOWN
public static final int KEY_DOWN- See Also:
-
KEY_PAGE_UP
public static final int KEY_PAGE_UP- See Also:
-
KEY_PAGE_DOWN
public static final int KEY_PAGE_DOWN- See Also:
-
KEY_HOME
public static final int KEY_HOME- See Also:
-
KEY_END
public static final int KEY_END- See Also:
-
KEY_CAPS_LOCK
public static final int KEY_CAPS_LOCK- See Also:
-
KEY_SCROLL_LOCK
public static final int KEY_SCROLL_LOCK- See Also:
-
KEY_NUM_LOCK
public static final int KEY_NUM_LOCK- See Also:
-
KEY_PRINT_SCREEN
public static final int KEY_PRINT_SCREEN- See Also:
-
KEY_PAUSE
public static final int KEY_PAUSE- See Also:
-
KEY_MENU
public static final int KEY_MENU- See Also:
-
KEY_F13
public static final int KEY_F13- See Also:
-
KEY_KP_0
public static final int KEY_KP_0- See Also:
-
KEY_KP_1
public static final int KEY_KP_1- See Also:
-
KEY_KP_2
public static final int KEY_KP_2- See Also:
-
KEY_KP_3
public static final int KEY_KP_3- See Also:
-
KEY_KP_4
public static final int KEY_KP_4- See Also:
-
KEY_KP_5
public static final int KEY_KP_5- See Also:
-
KEY_KP_6
public static final int KEY_KP_6- See Also:
-
KEY_KP_7
public static final int KEY_KP_7- See Also:
-
KEY_KP_8
public static final int KEY_KP_8- See Also:
-
KEY_KP_9
public static final int KEY_KP_9- See Also:
-
KEY_KP_DECIMAL
public static final int KEY_KP_DECIMAL- See Also:
-
KEY_KP_DIVIDE
public static final int KEY_KP_DIVIDE- See Also:
-
KEY_KP_MULTIPLY
public static final int KEY_KP_MULTIPLY- See Also:
-
KEY_KP_SUBTRACT
public static final int KEY_KP_SUBTRACT- See Also:
-
KEY_KP_ADD
public static final int KEY_KP_ADD- See Also:
-
KEY_KP_ENTER
public static final int KEY_KP_ENTER- See Also:
-
KEY_KP_EQUAL
public static final int KEY_KP_EQUAL- See Also:
-
KEY_KP_SEPARATOR
public static final int KEY_KP_SEPARATOR- See Also:
-
KEY_KP_LEFT
public static final int KEY_KP_LEFT- See Also:
-
KEY_KP_RIGHT
public static final int KEY_KP_RIGHT- See Also:
-
KEY_KP_UP
public static final int KEY_KP_UP- See Also:
-
KEY_KP_DOWN
public static final int KEY_KP_DOWN- See Also:
-
KEY_KP_PAGE_UP
public static final int KEY_KP_PAGE_UP- See Also:
-
KEY_KP_PAGE_DOWN
public static final int KEY_KP_PAGE_DOWN- See Also:
-
KEY_KP_HOME
public static final int KEY_KP_HOME- See Also:
-
KEY_KP_END
public static final int KEY_KP_END- See Also:
-
KEY_KP_INSERT
public static final int KEY_KP_INSERT- See Also:
-
KEY_KP_DELETE
public static final int KEY_KP_DELETE- See Also:
-
KEY_KP_BEGIN
public static final int KEY_KP_BEGIN- See Also:
-
KEY_MEDIA_PLAY
public static final int KEY_MEDIA_PLAY- See Also:
-
KEY_MEDIA_PAUSE
public static final int KEY_MEDIA_PAUSE- See Also:
-
KEY_MEDIA_PLAY_PAUSE
public static final int KEY_MEDIA_PLAY_PAUSE- See Also:
-
KEY_MEDIA_REVERSE
public static final int KEY_MEDIA_REVERSE- See Also:
-
KEY_MEDIA_STOP
public static final int KEY_MEDIA_STOP- See Also:
-
KEY_MEDIA_FAST_FORWARD
public static final int KEY_MEDIA_FAST_FORWARD- See Also:
-
KEY_MEDIA_REWIND
public static final int KEY_MEDIA_REWIND- See Also:
-
KEY_MEDIA_TRACK_NEXT
public static final int KEY_MEDIA_TRACK_NEXT- See Also:
-
KEY_MEDIA_TRACK_PREVIOUS
public static final int KEY_MEDIA_TRACK_PREVIOUS- See Also:
-
KEY_MEDIA_RECORD
public static final int KEY_MEDIA_RECORD- See Also:
-
KEY_MEDIA_LOWER_VOLUME
public static final int KEY_MEDIA_LOWER_VOLUME- See Also:
-
KEY_MEDIA_RAISE_VOLUME
public static final int KEY_MEDIA_RAISE_VOLUME- See Also:
-
KEY_MEDIA_MUTE_VOLUME
public static final int KEY_MEDIA_MUTE_VOLUME- See Also:
-
KEY_LEFT_SHIFT
public static final int KEY_LEFT_SHIFT- See Also:
-
KEY_LEFT_CONTROL
public static final int KEY_LEFT_CONTROL- See Also:
-
KEY_LEFT_ALT
public static final int KEY_LEFT_ALT- See Also:
-
KEY_LEFT_SUPER
public static final int KEY_LEFT_SUPER- See Also:
-
KEY_LEFT_HYPER
public static final int KEY_LEFT_HYPER- See Also:
-
KEY_LEFT_META
public static final int KEY_LEFT_META- See Also:
-
KEY_RIGHT_SHIFT
public static final int KEY_RIGHT_SHIFT- See Also:
-
KEY_RIGHT_CONTROL
public static final int KEY_RIGHT_CONTROL- See Also:
-
KEY_RIGHT_ALT
public static final int KEY_RIGHT_ALT- See Also:
-
KEY_RIGHT_SUPER
public static final int KEY_RIGHT_SUPER- See Also:
-
KEY_RIGHT_HYPER
public static final int KEY_RIGHT_HYPER- See Also:
-
KEY_RIGHT_META
public static final int KEY_RIGHT_META- See Also:
-
-
Method Details
-
toFlags
Converts a set ofTerminal.KittyKeyboardModevalues to the protocol bitmask.- Parameters:
modes- the enhancement modes- Returns:
- the bitmask value used in the protocol escape sequences
-
pushFlags
Returns the escape sequence to push enhancement modes onto the stack.- Parameters:
modes- the enhancement modes to enable- Returns:
- the push escape sequence
CSI > flags u
-
pushFlags
Returns the escape sequence to push enhancement flags onto the stack.- Parameters:
flags- the enhancement flags (bitmask of FLAG_* constants)- Returns:
- the push escape sequence
CSI > flags u
-
popFlags
Returns the escape sequence to pop enhancement flags from the stack.- Parameters:
count- the number of entries to pop (default 1)- Returns:
- the pop escape sequence
CSI < count u
-
popFlags
Returns the escape sequence to pop a single entry from the stack.- Returns:
- the pop escape sequence
CSI < 1 u
-
keySequence
Builds a kitty keyboard escape sequence string for a key with modifiers. Used for registering key bindings in KeyMap.- Parameters:
keyCode- the Unicode key codemodifiers- the modifier value (1 + bitmask), or 0 for no modifiers- Returns:
- the escape sequence string
-
ctrlKey
Builds a kitty keyboard escape sequence for Ctrl+letter. With the kitty protocol, Ctrl+A sendsCSI 97;5uinstead of 0x01.- Parameters:
letter- the lowercase letter ('a' through 'z')- Returns:
- the kitty escape sequence for Ctrl+letter
-
altKey
Builds a kitty keyboard escape sequence for Alt+letter. With the kitty protocol, Alt+A sendsCSI 97;3uinstead of ESC followed by 'a'.- Parameters:
letter- the lowercase letter ('a' through 'z')- Returns:
- the kitty escape sequence for Alt+letter
-
ctrlAltKey
Builds a kitty keyboard escape sequence for Ctrl+Alt+letter.- Parameters:
letter- the lowercase letter ('a' through 'z')- Returns:
- the kitty escape sequence for Ctrl+Alt+letter
-
modifiedKey
Builds a kitty keyboard escape sequence for a special key with modifiers.- Parameters:
keyCode- the special key code (e.g., KEY_ENTER, KEY_TAB)shift- whether shift is heldalt- whether alt is heldctrl- whether ctrl is held- Returns:
- the kitty escape sequence
-
isFlagsResponse
Checks whether a raw sequence looks like a kitty keyboard flags query response. The response format isCSI ? flags u.- Parameters:
sequence- the sequence to check- Returns:
- true if it matches the response pattern
-
parseFlagsResponse
Parses the flags value from a kitty keyboard query response.- Parameters:
sequence- the response sequenceCSI ? flags u- Returns:
- the flags value, or -1 if the sequence is not a valid response
-