Files
ghostty/src/terminal/ansi.zig
Mitchell Hashimoto f50aa90ced terminal: add lib.zig to centralize lib target and re-exports
Previously every file in the terminal package independently imported
build_options and ../lib/main.zig, then computed the same
lib_target constant. This was repetitive and meant each file needed
both imports just to get the target.

Introduce src/terminal/lib.zig which computes the target once and
re-exports the commonly used lib types (Enum, TaggedUnion, Struct,
String, checkGhosttyHEnum, structSizedFieldFits). All terminal
package files now import lib.zig and use lib.target instead of the
local lib_target constant, removing the per-file boilerplate.
2026-03-25 07:25:16 -07:00

107 lines
2.3 KiB
Zig

const lib = @import("lib.zig");
/// C0 (7-bit) control characters from ANSI.
///
/// This is not complete, control characters are only added to this
/// as the terminal emulator handles them.
pub const C0 = enum(u7) {
/// Null
NUL = 0x00,
/// Start of heading
SOH = 0x01,
/// Start of text
STX = 0x02,
/// Enquiry
ENQ = 0x05,
/// Bell
BEL = 0x07,
/// Backspace
BS = 0x08,
// Horizontal tab
HT = 0x09,
/// Line feed
LF = 0x0A,
/// Vertical Tab
VT = 0x0B,
/// Form feed
FF = 0x0C,
/// Carriage return
CR = 0x0D,
/// Shift out
SO = 0x0E,
/// Shift in
SI = 0x0F,
// Non-exhaustive so that @intToEnum never fails since the inputs are
// user-generated.
_,
};
/// The SGR rendition aspects that can be set, sometimes known as attributes.
/// The value corresponds to the parameter value for the SGR command (ESC [ m).
pub const RenditionAspect = enum(u16) {
default = 0,
bold = 1,
default_fg = 39,
default_bg = 49,
// Non-exhaustive so that @intToEnum never fails since the inputs are
// user-generated.
_,
};
/// Possible cursor styles (ESC [ q)
pub const CursorStyle = lib.Enum(
lib.target,
&.{
"default",
"blinking_block",
"steady_block",
"blinking_underline",
"steady_underline",
"blinking_bar",
"steady_bar",
},
);
/// The status line type for DECSSDT.
pub const StatusLineType = enum(u16) {
none = 0,
indicator = 1,
host_writable = 2,
// Non-exhaustive so that @intToEnum never fails for unsupported values.
_,
};
/// The display to target for status updates (DECSASD).
pub const StatusDisplay = lib.Enum(
lib.target,
&.{
"main",
"status_line",
},
);
/// The possible modify key formats to ESC[>{a};{b}m
/// Note: this is not complete, we should add more as we support more
pub const ModifyKeyFormat = lib.Enum(
lib.target,
&.{
"legacy",
"cursor_keys",
"function_keys",
"other_keys_none",
"other_keys_numeric_except",
"other_keys_numeric",
},
);
/// The protection modes that can be set for the terminal. See DECSCA and
/// ESC V, W.
pub const ProtectedMode = enum {
off,
iso, // ESC V, W
dec, // CSI Ps " q
};