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