a modern tui library written in zig
at v0.4.0 92 lines 2.8 kB view raw
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}