libghostty
Loading...
Searching...
No Matches
Mode Utilities

Detailed Description

Utilities for working with terminal modes. A mode is a compact 16-bit representation of a terminal mode identifier that encodes both the numeric mode value (up to 15 bits) and whether the mode is an ANSI mode or a DEC private mode (?-prefixed).

The packed layout (least-significant bit first) is:

  • Bits 0–14: mode value (u15)
  • Bit 15: ANSI flag (0 = DEC private mode, 1 = ANSI mode)

Example

void modes_example() {
// Create a mode for DEC mode 25 (cursor visible)
GhosttyMode tag = ghostty_mode_new(25, false);
printf("value=%u ansi=%d packed=0x%04x\n",
ghostty_mode_value(tag),
ghostty_mode_ansi(tag),
tag);
// Create a mode for ANSI mode 4 (insert mode)
GhosttyMode ansi_tag = ghostty_mode_new(4, true);
printf("value=%u ansi=%d packed=0x%04x\n",
ghostty_mode_value(ansi_tag),
ghostty_mode_ansi(ansi_tag),
ansi_tag);
}

DECRPM Report Encoding

Use ghostty_mode_report_encode() to encode a DECRPM response into a caller-provided buffer:

void decrpm_example() {
char buf[32];
size_t written = 0;
// Encode a report that DEC mode 25 (cursor visible) is set
buf, sizeof(buf), &written);
if (result == GHOSTTY_SUCCESS) {
printf("Encoded %zu bytes: ", written);
fwrite(buf, 1, written, stdout);
printf("\n"); // prints: ESC[?25;1$y
}
}

Typedefs

typedef uint16_t GhosttyMode

Enumerations

enum  GhosttyModeReportState {
  GHOSTTY_MODE_REPORT_NOT_RECOGNIZED = 0 , GHOSTTY_MODE_REPORT_SET = 1 , GHOSTTY_MODE_REPORT_RESET = 2 , GHOSTTY_MODE_REPORT_PERMANENTLY_SET = 3 ,
  GHOSTTY_MODE_REPORT_PERMANENTLY_RESET = 4 , GHOSTTY_MODE_REPORT_MAX_VALUE = GHOSTTY_ENUM_MAX_VALUE
}

Functions

GHOSTTY_API GhosttyResult ghostty_mode_report_encode (GhosttyMode mode, GhosttyModeReportState state, char *buf, size_t buf_len, size_t *out_written)

ANSI Modes

Modes for standard ANSI modes.

#define GHOSTTY_MODE_KAM   (ghostty_mode_new(2, true))
#define GHOSTTY_MODE_INSERT   (ghostty_mode_new(4, true))
#define GHOSTTY_MODE_SRM   (ghostty_mode_new(12, true))
#define GHOSTTY_MODE_LINEFEED   (ghostty_mode_new(20, true))

DEC Private Modes

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_IN_BAND_RESIZE   (ghostty_mode_new(2048, false))

Typedef Documentation

◆ GhosttyMode

typedef uint16_t GhosttyMode

A packed 16-bit terminal mode.

Encodes a mode value (bits 0–14) and an ANSI flag (bit 15) into a single 16-bit integer. Use the inline helper functions to construct and inspect modes rather than manipulating bits directly.

Definition at line 105 of file modes.h.

Enumeration Type Documentation

◆ GhosttyModeReportState

DECRPM report state values.

These correspond to the Ps2 parameter in a DECRPM response sequence (CSI ? Ps1 ; Ps2 $ y).

Enumerator
GHOSTTY_MODE_REPORT_NOT_RECOGNIZED 

Mode is not recognized

GHOSTTY_MODE_REPORT_SET 

Mode is set (enabled)

GHOSTTY_MODE_REPORT_RESET 

Mode is reset (disabled)

GHOSTTY_MODE_REPORT_PERMANENTLY_SET 

Mode is permanently set

GHOSTTY_MODE_REPORT_PERMANENTLY_RESET 

Mode is permanently reset

Definition at line 150 of file modes.h.

Function Documentation

◆ ghostty_mode_report_encode()

GHOSTTY_API GhosttyResult ghostty_mode_report_encode ( GhosttyMode mode,
GhosttyModeReportState state,
char * buf,
size_t buf_len,
size_t * out_written )

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 the buffer is too small, the function returns GHOSTTY_OUT_OF_SPACE and writes the required buffer size to out_written. The caller can then retry with a sufficiently sized buffer.

Parameters
modeThe mode identifying the mode to report on
stateThe report state for this mode
bufOutput buffer to write the encoded sequence into (may be NULL)
buf_lenSize of the output buffer in bytes
[out]out_writtenOn success, the number of bytes written. On GHOSTTY_OUT_OF_SPACE, the required buffer size.
Returns
GHOSTTY_SUCCESS on success, GHOSTTY_OUT_OF_SPACE if the buffer is too small

Macro Definition Documentation

◆ GHOSTTY_MODE_132_COLUMN

#define GHOSTTY_MODE_132_COLUMN   (ghostty_mode_new(3, false))

132/80 column mode

Definition at line 60 of file modes.h.

◆ GHOSTTY_MODE_ALT_ESC_PREFIX

#define GHOSTTY_MODE_ALT_ESC_PREFIX   (ghostty_mode_new(1036, false))

Alt key sends ESC prefix

Definition at line 85 of file modes.h.

◆ GHOSTTY_MODE_ALT_SCREEN

#define GHOSTTY_MODE_ALT_SCREEN   (ghostty_mode_new(1047, false))

Alternate screen

Definition at line 88 of file modes.h.

◆ GHOSTTY_MODE_ALT_SCREEN_LEGACY

#define GHOSTTY_MODE_ALT_SCREEN_LEGACY   (ghostty_mode_new(47, false))

Alternate screen (legacy)

Definition at line 71 of file modes.h.

◆ GHOSTTY_MODE_ALT_SCREEN_SAVE

#define GHOSTTY_MODE_ALT_SCREEN_SAVE   (ghostty_mode_new(1049, false))

Alt screen + save cursor + clear

Definition at line 90 of file modes.h.

◆ GHOSTTY_MODE_ALT_SCROLL

#define GHOSTTY_MODE_ALT_SCROLL   (ghostty_mode_new(1007, false))

Alternate scroll mode

Definition at line 81 of file modes.h.

◆ GHOSTTY_MODE_ALT_SENDS_ESC

#define GHOSTTY_MODE_ALT_SENDS_ESC   (ghostty_mode_new(1039, false))

Alt sends escape

Definition at line 86 of file modes.h.

◆ GHOSTTY_MODE_ANY_MOUSE

#define GHOSTTY_MODE_ANY_MOUSE   (ghostty_mode_new(1003, false))

Any-event mouse tracking

Definition at line 77 of file modes.h.

◆ GHOSTTY_MODE_AUTOREPEAT

#define GHOSTTY_MODE_AUTOREPEAT   (ghostty_mode_new(8, false))

Auto-repeat keys

Definition at line 65 of file modes.h.

◆ GHOSTTY_MODE_BACKARROW_KEY_MODE

#define GHOSTTY_MODE_BACKARROW_KEY_MODE   (ghostty_mode_new(67, false))

Backarrow key mode (DECBKM)

Definition at line 73 of file modes.h.

◆ GHOSTTY_MODE_BRACKETED_PASTE

#define GHOSTTY_MODE_BRACKETED_PASTE   (ghostty_mode_new(2004, false))

Bracketed paste mode

Definition at line 91 of file modes.h.

◆ GHOSTTY_MODE_BUTTON_MOUSE

#define GHOSTTY_MODE_BUTTON_MOUSE   (ghostty_mode_new(1002, false))

Button-event mouse tracking

Definition at line 76 of file modes.h.

◆ GHOSTTY_MODE_COLOR_SCHEME_REPORT

#define GHOSTTY_MODE_COLOR_SCHEME_REPORT   (ghostty_mode_new(2031, false))

Report color scheme

Definition at line 94 of file modes.h.

◆ GHOSTTY_MODE_CURSOR_BLINKING

#define GHOSTTY_MODE_CURSOR_BLINKING   (ghostty_mode_new(12, false))

Cursor blink

Definition at line 67 of file modes.h.

◆ GHOSTTY_MODE_CURSOR_VISIBLE

#define GHOSTTY_MODE_CURSOR_VISIBLE   (ghostty_mode_new(25, false))

Cursor visible (DECTCEM)

Definition at line 68 of file modes.h.

◆ GHOSTTY_MODE_DECCKM

#define GHOSTTY_MODE_DECCKM   (ghostty_mode_new(1, false))

Cursor keys

Definition at line 59 of file modes.h.

◆ GHOSTTY_MODE_ENABLE_MODE_3

#define GHOSTTY_MODE_ENABLE_MODE_3   (ghostty_mode_new(40, false))

Allow 132 column mode

Definition at line 69 of file modes.h.

◆ GHOSTTY_MODE_FOCUS_EVENT

#define GHOSTTY_MODE_FOCUS_EVENT   (ghostty_mode_new(1004, false))

Focus in/out events

Definition at line 78 of file modes.h.

◆ GHOSTTY_MODE_GRAPHEME_CLUSTER

#define GHOSTTY_MODE_GRAPHEME_CLUSTER   (ghostty_mode_new(2027, false))

Grapheme cluster mode

Definition at line 93 of file modes.h.

◆ GHOSTTY_MODE_IN_BAND_RESIZE

#define GHOSTTY_MODE_IN_BAND_RESIZE   (ghostty_mode_new(2048, false))

In-band size reports

Definition at line 95 of file modes.h.

◆ GHOSTTY_MODE_INSERT

#define GHOSTTY_MODE_INSERT   (ghostty_mode_new(4, true))

Insert mode

Definition at line 50 of file modes.h.

◆ GHOSTTY_MODE_KAM

#define GHOSTTY_MODE_KAM   (ghostty_mode_new(2, true))

Keyboard action (disable keyboard)

Definition at line 49 of file modes.h.

◆ GHOSTTY_MODE_KEYPAD_KEYS

#define GHOSTTY_MODE_KEYPAD_KEYS   (ghostty_mode_new(66, false))

Application keypad

Definition at line 72 of file modes.h.

◆ GHOSTTY_MODE_LEFT_RIGHT_MARGIN

#define GHOSTTY_MODE_LEFT_RIGHT_MARGIN   (ghostty_mode_new(69, false))

Left/right margin mode

Definition at line 74 of file modes.h.

◆ GHOSTTY_MODE_LINEFEED

#define GHOSTTY_MODE_LINEFEED   (ghostty_mode_new(20, true))

Linefeed/new line mode

Definition at line 52 of file modes.h.

◆ GHOSTTY_MODE_NORMAL_MOUSE

#define GHOSTTY_MODE_NORMAL_MOUSE   (ghostty_mode_new(1000, false))

Normal mouse tracking

Definition at line 75 of file modes.h.

◆ GHOSTTY_MODE_NUMLOCK_KEYPAD

#define GHOSTTY_MODE_NUMLOCK_KEYPAD   (ghostty_mode_new(1035, false))

Ignore keypad with NumLock

Definition at line 84 of file modes.h.

◆ GHOSTTY_MODE_ORIGIN

#define GHOSTTY_MODE_ORIGIN   (ghostty_mode_new(6, false))

Origin mode

Definition at line 63 of file modes.h.

◆ GHOSTTY_MODE_REVERSE_COLORS

#define GHOSTTY_MODE_REVERSE_COLORS   (ghostty_mode_new(5, false))

Reverse video

Definition at line 62 of file modes.h.

◆ GHOSTTY_MODE_REVERSE_WRAP

#define GHOSTTY_MODE_REVERSE_WRAP   (ghostty_mode_new(45, false))

Reverse wrap

Definition at line 70 of file modes.h.

◆ GHOSTTY_MODE_REVERSE_WRAP_EXT

#define GHOSTTY_MODE_REVERSE_WRAP_EXT   (ghostty_mode_new(1045, false))

Extended reverse wrap

Definition at line 87 of file modes.h.

◆ GHOSTTY_MODE_SAVE_CURSOR

#define GHOSTTY_MODE_SAVE_CURSOR   (ghostty_mode_new(1048, false))

Save cursor (DECSC)

Definition at line 89 of file modes.h.

◆ GHOSTTY_MODE_SGR_MOUSE

#define GHOSTTY_MODE_SGR_MOUSE   (ghostty_mode_new(1006, false))

SGR mouse format

Definition at line 80 of file modes.h.

◆ GHOSTTY_MODE_SGR_PIXELS_MOUSE

#define GHOSTTY_MODE_SGR_PIXELS_MOUSE   (ghostty_mode_new(1016, false))

SGR-Pixels mouse format

Definition at line 83 of file modes.h.

◆ GHOSTTY_MODE_SLOW_SCROLL

#define GHOSTTY_MODE_SLOW_SCROLL   (ghostty_mode_new(4, false))

Slow scroll

Definition at line 61 of file modes.h.

◆ GHOSTTY_MODE_SRM

#define GHOSTTY_MODE_SRM   (ghostty_mode_new(12, true))

Send/receive mode

Definition at line 51 of file modes.h.

◆ GHOSTTY_MODE_SYNC_OUTPUT

#define GHOSTTY_MODE_SYNC_OUTPUT   (ghostty_mode_new(2026, false))

Synchronized output

Definition at line 92 of file modes.h.

◆ GHOSTTY_MODE_URXVT_MOUSE

#define GHOSTTY_MODE_URXVT_MOUSE   (ghostty_mode_new(1015, false))

URxvt mouse format

Definition at line 82 of file modes.h.

◆ GHOSTTY_MODE_UTF8_MOUSE

#define GHOSTTY_MODE_UTF8_MOUSE   (ghostty_mode_new(1005, false))

UTF-8 mouse format

Definition at line 79 of file modes.h.

◆ GHOSTTY_MODE_WRAPAROUND

#define GHOSTTY_MODE_WRAPAROUND   (ghostty_mode_new(7, false))

Auto-wrap mode

Definition at line 64 of file modes.h.

◆ GHOSTTY_MODE_X10_MOUSE

#define GHOSTTY_MODE_X10_MOUSE   (ghostty_mode_new(9, false))

X10 mouse reporting

Definition at line 66 of file modes.h.