a modern tui library written in zig
1const std = @import("std");
2const builtin = @import("builtin");
3const build_options = @import("build_options");
4
5pub const Vaxis = @import("Vaxis.zig");
6
7pub const Loop = @import("Loop.zig").Loop;
8pub const xev = @import("xev.zig");
9pub const aio = @import("aio.zig");
10
11pub const zigimg = @import("zigimg");
12
13pub const Queue = @import("queue.zig").Queue;
14pub const Key = @import("Key.zig");
15pub const Cell = @import("Cell.zig");
16pub const Segment = Cell.Segment;
17pub const PrintOptions = Window.PrintOptions;
18pub const Style = Cell.Style;
19pub const Color = Cell.Color;
20pub const Image = @import("Image.zig");
21pub const Mouse = @import("Mouse.zig");
22pub const Screen = @import("Screen.zig");
23pub const AllocatingScreen = @import("InternalScreen.zig");
24pub const Parser = @import("Parser.zig");
25pub const Window = @import("Window.zig");
26pub const widgets = @import("widgets.zig");
27pub const gwidth = @import("gwidth.zig");
28pub const ctlseqs = @import("ctlseqs.zig");
29pub const GraphemeCache = @import("GraphemeCache.zig");
30pub const grapheme = @import("grapheme");
31pub const Event = @import("event.zig").Event;
32pub const Unicode = @import("Unicode.zig");
33
34/// The target TTY implementation
35pub const Tty = switch (builtin.os.tag) {
36 .windows => @import("windows/Tty.zig"),
37 else => @import("posix/Tty.zig"),
38};
39
40/// The size of the terminal screen
41pub const Winsize = struct {
42 rows: usize,
43 cols: usize,
44 x_pixel: usize,
45 y_pixel: usize,
46};
47
48/// Initialize a Vaxis application.
49pub fn init(alloc: std.mem.Allocator, opts: Vaxis.Options) !Vaxis {
50 return Vaxis.init(alloc, opts);
51}
52
53/// Resets terminal state on a panic, then calls the default zig panic handler
54pub fn panic_handler(msg: []const u8, error_return_trace: ?*std.builtin.StackTrace, ret_addr: ?usize) noreturn {
55 if (Tty.global_tty) |gty| {
56 const reset: []const u8 = ctlseqs.csi_u_pop ++
57 ctlseqs.mouse_reset ++
58 ctlseqs.bp_reset ++
59 ctlseqs.rmcup;
60
61 gty.anyWriter().writeAll(reset) catch {};
62
63 gty.deinit();
64 }
65
66 std.builtin.default_panic(msg, error_return_trace, ret_addr);
67}
68
69pub const log_scopes = enum {
70 vaxis,
71};
72
73/// the vaxis logo. In PixelCode
74pub const logo =
75 \\▄ ▄ ▄▄▄ ▄ ▄ ▄▄▄ ▄▄▄
76 \\█ █ █▄▄▄█ ▀▄ ▄▀ █ █ ▀
77 \\▀▄ ▄▀ █ █ ▄▀▄ █ ▀▀▀▄
78 \\ ▀▄▀ █ █ █ █ ▄█▄ ▀▄▄▄▀
79;
80
81test {
82 _ = @import("gwidth.zig");
83 _ = @import("Cell.zig");
84 _ = @import("Key.zig");
85 _ = @import("Parser.zig");
86 _ = @import("Window.zig");
87
88 _ = @import("gwidth.zig");
89 _ = @import("queue.zig");
90 if (build_options.text_input)
91 _ = @import("widgets/TextInput.zig");
92}