tiny.sys.terminal
Defined in tiny.sys.
API (19)
Actions
Public operations.
capabilityEnvironmentValuecolumnsFromEnvironmentenableKeyboardInterruptgetAttributesisDescriptorTtyisTtyqueryDescriptorSizequerySizesetAttributessetDescriptorSizesetReadTiming
Types and contracts
Public types and contracts.
AttributeActionAttributeApplyErrorAttributeQueryErrorAttributesKeyboardInterruptErrorSizeSizeError
Values and defaults
Public values and defaults.
Source
Source: lib/sys/src/root.zig:51
zig
pub const terminal = @import("terminal.zig");Source: lib/sys/src/terminal.zig
zig
const std = @import("std");const builtin = @import("builtin");const capabilities = @import("capabilities.zig");const env = @import("env.zig");const fd = @import("fd.zig");const posix = std.posix;pub const required_capabilities = capabilities.host(&.{ .descriptors, .environment, .terminal });pub const Size = struct { rows: u16, cols: u16, x_pixel: u16, y_pixel: u16,};pub const Attributes = posix.termios;pub const AttributeAction = posix.TCSA;pub const AttributeQueryError = posix.TermiosGetError || error{UnsupportedPlatform};pub const AttributeApplyError = posix.TermiosSetError || error{UnsupportedPlatform};pub const SizeError = error{ UnsupportedPlatform, QueryFailed, ApplyFailed };pub fn querySize(file: std.Io.File) ?Size { return queryDescriptorSize(file.handle);}pub fn isTty(file: std.Io.File) bool { if (file.isTty(std.Options.debug_io) catch false) return true; return isDescriptorTty(file.handle);}pub fn isDescriptorTty(descriptor: fd.Descriptor) bool { if (!supportsPosixTerminalIo()) return false; _ = posix.tcgetattr(descriptor) catch return false; return true;}pub fn queryDescriptorSize(descriptor: fd.Descriptor) ?Size { if (!supportsPosixTerminalIo()) return null; var winsize: posix.winsize = .{ .row = 0, .col = 0, .xpixel = 0, .ypixel = 0, }; const err = posix.system.ioctl(descriptor, posix.T.IOCGWINSZ, @intFromPtr(&winsize)); if (posix.errno(err) != .SUCCESS) return null; return .{ .rows = winsize.row, .cols = winsize.col, .x_pixel = winsize.xpixel, .y_pixel = winsize.ypixel, };}pub fn setDescriptorSize(descriptor: fd.Descriptor, size: Size) SizeError!void { if (!supportsPosixTerminalIo()) return error.UnsupportedPlatform; var winsize = posix.winsize{ .row = size.rows, .col = size.cols, .xpixel = size.x_pixel, .ypixel = size.y_pixel, }; const result = posix.system.ioctl( descriptor, posix.T.IOCSWINSZ, @intFromPtr(&winsize), ); if (posix.errno(result) != .SUCCESS) return error.ApplyFailed;}pub fn getAttributes(descriptor: fd.Descriptor) AttributeQueryError!Attributes { if (!supportsPosixTerminalIo()) return error.UnsupportedPlatform; return posix.tcgetattr(descriptor);}pub fn setAttributes( descriptor: fd.Descriptor, action: AttributeAction, attributes: Attributes,) AttributeApplyError!void { if (!supportsPosixTerminalIo()) return error.UnsupportedPlatform; return posix.tcsetattr(descriptor, action, attributes);}pub fn setReadTiming( attributes: *Attributes, minimum_bytes: u8, timeout_deciseconds: u8,) void { attributes.cc[@backingInt(posix.V.MIN)] = minimum_bytes; attributes.cc[@backingInt(posix.V.TIME)] = timeout_deciseconds;}pub const KeyboardInterruptError = error{ UnsupportedPlatform, QueryFailed, ApplyFailed,};pub fn enableKeyboardInterrupt(descriptor: fd.Descriptor) KeyboardInterruptError!void { if (!supportsPosixTerminalIo()) return error.UnsupportedPlatform; var raw = posix.tcgetattr(descriptor) catch return error.QueryFailed; raw.lflag.ISIG = true; posix.tcsetattr(descriptor, .FLUSH, raw) catch return error.ApplyFailed;}pub fn columnsFromEnvironment() ?usize { if (!supportsPosixTerminalEnvironment()) return null; const text = env.getConstant("COLUMNS") orelse return null; return std.fmt.parseInt(usize, text, 10) catch null;}pub fn capabilityEnvironmentValue(comptime key: []const u8) ?[]const u8 { if (!supportsPosixTerminalEnvironment()) return null; return env.getConstant(key);}fn supportsPosixTerminalIo() bool { return switch (builtin.os.tag) { .windows, .wasi => false, else => true, };}fn supportsPosixTerminalEnvironment() bool { return switch (builtin.os.tag) { .windows, .wasi => false, else => true, };}test "columnsFromEnvironment ignores missing or unparsable values" { if (env.getConstant("TINY_SYS_TERMINAL_TEST_COLUMNS")) |_| { return error.SkipZigTest; } try std.testing.expect(columnsFromEnvironment() == null or columnsFromEnvironment().? > 0);}Audit
| Definitions | 20 |
|---|---|
| Public names | 20 |
| Members | 10 |
| Version | 26.7.0 |
| Revision | daab053ee433 |