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