vaxis: send winsize at run, initialize screen to default cells
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
This commit is contained in:
parent
08d2aae5fe
commit
bef5276340
7 changed files with 34 additions and 14 deletions
|
@ -1,5 +1,6 @@
|
|||
const std = @import("std");
|
||||
const vaxis = @import("vaxis");
|
||||
const Cell = vaxis.Cell;
|
||||
|
||||
const log = std.log.scoped(.main);
|
||||
pub fn main() !void {
|
||||
|
@ -21,6 +22,7 @@ pub fn main() !void {
|
|||
|
||||
try vx.enterAltScreen();
|
||||
|
||||
const msg = "Hello, world!";
|
||||
outer: while (true) {
|
||||
const event = vx.nextEvent();
|
||||
log.debug("event: {}\r\n", .{event});
|
||||
|
@ -37,12 +39,17 @@ pub fn main() !void {
|
|||
}
|
||||
|
||||
const win = vx.window();
|
||||
_ = win;
|
||||
const child = win.initChild(20, 20, .expand, .expand);
|
||||
for (msg, 0..) |_, i| {
|
||||
const cell: Cell = .{ .char = .{ .grapheme = msg[i .. i + 1] } };
|
||||
child.writeCell(cell, i, 0);
|
||||
}
|
||||
try vx.render();
|
||||
}
|
||||
}
|
||||
|
||||
const Event = union(enum) {
|
||||
key_press: vaxis.Key,
|
||||
winsize: vaxis.Winsize,
|
||||
mouse: u8,
|
||||
foo: u8,
|
||||
};
|
||||
|
|
|
@ -24,6 +24,9 @@ pub fn deinit(self: *Screen, alloc: std.mem.Allocator) void {
|
|||
pub fn resize(self: *Screen, alloc: std.mem.Allocator, w: usize, h: usize) !void {
|
||||
alloc.free(self.buf);
|
||||
self.buf = try alloc.alloc(Cell, w * h);
|
||||
for (self.buf, 0..) |_, i| {
|
||||
self.buf[i] = .{};
|
||||
}
|
||||
self.width = w;
|
||||
self.height = h;
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ pub fn run(
|
|||
|
||||
// get our initial winsize
|
||||
const winsize = try getWinsize(self.fd);
|
||||
log.debug("{}", .{winsize});
|
||||
vx.postEvent(.{ .winsize = winsize });
|
||||
|
||||
// assign the write end of the pipe to our quit_fd
|
||||
self.quit_fd = pipe[1];
|
||||
|
|
|
@ -25,7 +25,7 @@ screen: *Screen,
|
|||
/// parent's size. Windows do not retain a reference to their parent and are
|
||||
/// unaware of resizes.
|
||||
pub fn initChild(
|
||||
self: *Window,
|
||||
self: Window,
|
||||
x_off: usize,
|
||||
y_off: usize,
|
||||
width: Size,
|
||||
|
@ -60,7 +60,7 @@ pub fn initChild(
|
|||
|
||||
/// writes a cell to the location in the window
|
||||
pub fn writeCell(self: Window, cell: Cell, row: usize, col: usize) void {
|
||||
if (self.h < row or self.w < col) return;
|
||||
if (self.height < row or self.width < col) return;
|
||||
self.screen.writeCell(cell, row + self.y_off, col + self.x_off);
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ pub const csi_u_push = "\x1b[>{d}u";
|
|||
pub const csi_u_pop = "\x1b[<u";
|
||||
|
||||
// Cursor
|
||||
pub const home = "\x1b[H";
|
||||
pub const cup = "\x1b[{d};{d}H";
|
||||
|
||||
// alt screen
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
pub const Vaxis = @import("vaxis.zig").Vaxis;
|
||||
pub const Options = @import("Options.zig");
|
||||
|
||||
const cell = @import("cell.zig");
|
||||
pub const Cell = cell.Cell;
|
||||
|
||||
pub const Key = @import("Key.zig");
|
||||
pub const Winsize = @import("Tty.zig").Winsize;
|
||||
|
||||
|
|
|
@ -110,20 +110,26 @@ pub fn Vaxis(comptime T: type) type {
|
|||
/// be exited if calling deinit while in the alt screen
|
||||
pub fn enterAltScreen(self: *Self) !void {
|
||||
if (self.alt_screen) return;
|
||||
if (self.tty) |_| {
|
||||
var tty = &self.tty.?;
|
||||
_ = try tty.write(ctlseqs.smcup);
|
||||
self.alt_screen = true;
|
||||
}
|
||||
var tty = self.tty orelse return;
|
||||
_ = try tty.write(ctlseqs.smcup);
|
||||
self.alt_screen = true;
|
||||
}
|
||||
|
||||
/// exit the alternate screen
|
||||
pub fn exitaltScreen(self: *Self) !void {
|
||||
if (!self.alt_screen) return;
|
||||
if (self.tty) |_| {
|
||||
var tty = &self.tty.?;
|
||||
_ = try tty.write(ctlseqs.rmcup);
|
||||
self.alt_screen = false;
|
||||
var tty = self.tty orelse return;
|
||||
_ = try tty.write(ctlseqs.rmcup);
|
||||
self.alt_screen = false;
|
||||
}
|
||||
|
||||
pub fn render(self: *Self) !void {
|
||||
log.debug("HERE", .{});
|
||||
var tty = self.tty orelse return;
|
||||
|
||||
_ = try tty.write(ctlseqs.home);
|
||||
for (self.screen.buf) |cell| {
|
||||
_ = try tty.write(cell.char.grapheme);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue