Pack DEC and ANSI mode numbers and encode DECRPM reports.
A GhosttyMode is a terminal mode number packed into 16 bits, together with whether it's an ANSI mode or a DEC private mode.
The number alone isn't enough. ANSI mode 4 is insert mode, and DEC private mode 4 is slow scroll. Use these to name a mode when you read or set one on a terminal with GhosttyTerminalModeConfig, or to encode a DECRPM report with ghostty_mode_report_encode(). You don't need a terminal to pack one.
Example
void modes_example() {
printf("value=%u ansi=%d packed=0x%04x\n",
ghostty_mode_value(tag),
ghostty_mode_ansi(tag),
tag);
printf("value=%u ansi=%d packed=0x%04x\n",
ghostty_mode_value(ansi_tag),
ghostty_mode_ansi(ansi_tag),
ansi_tag);
}
Full program: c-vt-modes/src/main.c
See the Input guide for the modes that change what input encodes to.
|
Modes for DEC private modes (?-prefixed).
|
| #define | GHOSTTY_MODE_DECCKM (ghostty_mode_new(1, false)) |
| #define | GHOSTTY_MODE_132_COLUMN (ghostty_mode_new(3, false)) |
| #define | GHOSTTY_MODE_SLOW_SCROLL (ghostty_mode_new(4, false)) |
| #define | GHOSTTY_MODE_REVERSE_COLORS (ghostty_mode_new(5, false)) |
| #define | GHOSTTY_MODE_ORIGIN (ghostty_mode_new(6, false)) |
| #define | GHOSTTY_MODE_WRAPAROUND (ghostty_mode_new(7, false)) |
| #define | GHOSTTY_MODE_AUTOREPEAT (ghostty_mode_new(8, false)) |
| #define | GHOSTTY_MODE_X10_MOUSE (ghostty_mode_new(9, false)) |
| #define | GHOSTTY_MODE_CURSOR_BLINKING (ghostty_mode_new(12, false)) |
| #define | GHOSTTY_MODE_CURSOR_VISIBLE (ghostty_mode_new(25, false)) |
| #define | GHOSTTY_MODE_ENABLE_MODE_3 (ghostty_mode_new(40, false)) |
| #define | GHOSTTY_MODE_REVERSE_WRAP (ghostty_mode_new(45, false)) |
| #define | GHOSTTY_MODE_ALT_SCREEN_LEGACY (ghostty_mode_new(47, false)) |
| #define | GHOSTTY_MODE_KEYPAD_KEYS (ghostty_mode_new(66, false)) |
| #define | GHOSTTY_MODE_BACKARROW_KEY_MODE (ghostty_mode_new(67, false)) |
| #define | GHOSTTY_MODE_LEFT_RIGHT_MARGIN (ghostty_mode_new(69, false)) |
| #define | GHOSTTY_MODE_NORMAL_MOUSE (ghostty_mode_new(1000, false)) |
| #define | GHOSTTY_MODE_BUTTON_MOUSE (ghostty_mode_new(1002, false)) |
| #define | GHOSTTY_MODE_ANY_MOUSE (ghostty_mode_new(1003, false)) |
| #define | GHOSTTY_MODE_FOCUS_EVENT (ghostty_mode_new(1004, false)) |
| #define | GHOSTTY_MODE_UTF8_MOUSE (ghostty_mode_new(1005, false)) |
| #define | GHOSTTY_MODE_SGR_MOUSE (ghostty_mode_new(1006, false)) |
| #define | GHOSTTY_MODE_ALT_SCROLL (ghostty_mode_new(1007, false)) |
| #define | GHOSTTY_MODE_URXVT_MOUSE (ghostty_mode_new(1015, false)) |
| #define | GHOSTTY_MODE_SGR_PIXELS_MOUSE (ghostty_mode_new(1016, false)) |
| #define | GHOSTTY_MODE_NUMLOCK_KEYPAD (ghostty_mode_new(1035, false)) |
| #define | GHOSTTY_MODE_ALT_ESC_PREFIX (ghostty_mode_new(1036, false)) |
| #define | GHOSTTY_MODE_ALT_SENDS_ESC (ghostty_mode_new(1039, false)) |
| #define | GHOSTTY_MODE_REVERSE_WRAP_EXT (ghostty_mode_new(1045, false)) |
| #define | GHOSTTY_MODE_ALT_SCREEN (ghostty_mode_new(1047, false)) |
| #define | GHOSTTY_MODE_SAVE_CURSOR (ghostty_mode_new(1048, false)) |
| #define | GHOSTTY_MODE_ALT_SCREEN_SAVE (ghostty_mode_new(1049, false)) |
| #define | GHOSTTY_MODE_BRACKETED_PASTE (ghostty_mode_new(2004, false)) |
| #define | GHOSTTY_MODE_SYNC_OUTPUT (ghostty_mode_new(2026, false)) |
| #define | GHOSTTY_MODE_GRAPHEME_CLUSTER (ghostty_mode_new(2027, false)) |
| #define | GHOSTTY_MODE_COLOR_SCHEME_REPORT (ghostty_mode_new(2031, false)) |
| #define | GHOSTTY_MODE_VISIBILITY_REPORT (ghostty_mode_new(2033, false)) |
| #define | GHOSTTY_MODE_IN_BAND_RESIZE (ghostty_mode_new(2048, false)) |
| #define | GHOSTTY_MODE_PASTE_EVENTS (ghostty_mode_new(5522, false)) |
Encode a DECRPM (DEC Private Mode Report) response sequence.
Writes a mode report escape sequence into the provided buffer. The generated sequence has the form:
- DEC private mode: CSI ? Ps1 ; Ps2 $ y
- ANSI mode: CSI Ps1 ; Ps2 $ y
If buf is too small, this returns GHOSTTY_OUT_OF_SPACE and sets out_written to the size needed. The buffer may then hold part of the sequence, which you should discard. To get the size without encoding anything, pass NULL for buf and 0 for buf_len.
void decrpm_example() {
uint8_t buf[32];
size_t written = 0;
buf, sizeof(buf), &written);
printf("Encoded %zu bytes: ", written);
fwrite(buf, 1, written, stdout);
printf("\n");
}
}
Full program: c-vt-modes/src/main.c
- Parameters
-
| mode | The mode identifying the mode to report on |
| state | The report state for this mode |
| buf | Buffer to write the sequence into. May be NULL if buf_len is 0. |
| buf_len | Size of buf in bytes |
| [out] | out_written | The number of bytes written, or the size needed if the result is GHOSTTY_OUT_OF_SPACE |
- Returns
- GHOSTTY_SUCCESS on success, GHOSTTY_OUT_OF_SPACE if the buffer is too small
- Examples
- c-vt-modes/src/main.c.