diff options
| -rw-r--r-- | main.zig | 99 |
1 files changed, 54 insertions, 45 deletions
@@ -60,35 +60,20 @@ fn fork_pty(argv: [:0]const u8, ws: std.posix.winsize) std.Io.File { return f; } -const nrows = 40; -const ncols = 6; +const nrows = 16; +const ncols = 80; pub fn main(init: std.process.Init) !void { - std.debug.print("hello!\n", .{}); const io = init.io; const gpa = init.gpa; - const master = fork_pty("/usr/bin/bash", .{ - .row = nrows, - .col = ncols, - .xpixel = 0, - .ypixel = 0, - }); - - var read_buf: [0x100]u8 = undefined; - var reader = master.readerStreaming(io, &read_buf); - try io.sleep(.fromMilliseconds(100), .real); - const str = try reader.interface.readAlloc(gpa, 2); - std.debug.print("\n\nreader: {} {s}\n\n", .{ reader.size orelse 1234, str }); - var term: ghostty_vt.Terminal = try .init(gpa, .{ .cols = ncols, .rows = nrows, }); defer term.deinit(gpa); - var stream = term.vtStream(); - defer stream.deinit(); - try term.printString("hello there!\nhowdy!"); + var tty_reader = term.vtStream(); + defer tty_reader.deinit(); // const str = try term.plainString(gpa); @@ -99,36 +84,60 @@ pub fn main(init: std.process.Init) !void { var vx = try vaxis.init(io, gpa, init.environ_map, .{}); defer vx.deinit(gpa, tty.writer()); - // try vx.enterAltScreen(tty.writer()); - // defer vx.exitAltScreen(tty.writer()) catch {}; + const pty_master = fork_pty("/usr/bin/bash", .{ + .row = nrows, + .col = ncols, + .xpixel = 0, + .ypixel = 0, + }); - // try vx.setMouseMode(tty.writer(), true); + var write_buf: [0x100]u8 = undefined; + var writer = pty_master.writer(io, &write_buf); + + std.debug.print("written {}\n", .{try writer.interface.write("ls -la /\r\n")}); + try writer.flush(); + + var read_buf: [0x400]u8 = undefined; + var reader = pty_master.readerStreaming(io, &read_buf); - // var loop: Loop = .init(io, &tty, &vx); - // try loop.start(); - // defer loop.stop(); + try io.sleep(.fromMilliseconds(200), .real); + const str = try reader.interface.readAlloc(gpa, 0x400); - // while (true) { - // const event = try loop.nextEvent(); - // const win = vx.window(); - // const win_child = win.child(.{ .border = .{ .where = .all }, .height = 8, .width = 42 }); - // _ = win_child.printSegment(.{ .text = "hey" }, .{}); + tty_reader.nextSlice(str); - // switch (event) { - // .key_press => |key| { - // if (key.matches('c', .{ .ctrl = true })) { - // break; - // } - // }, - // .mouse => |m| { - // _ = win.printSegment(.{ .text = str }, .{ .col_offset = 1, .row_offset = 1 }); + defer gpa.free(str); - // if (m.type == .press) {} - // }, - // .winsize => |ws| try vx.resize(gpa, tty.writer(), ws), - // else => {}, - // } + const tty_str = try term.plainString(gpa); + defer gpa.free(tty_str); + + // std.debug.print("{s}", .{tty_str}); + + // try vx.setMouseMode(tty.writer(), true); - // try vx.render(tty.writer()); - // } + var loop: Loop = .init(io, &tty, &vx); + try loop.start(); + defer loop.stop(); + + while (true) { + const event = try loop.nextEvent(); + const win = vx.window(); + const win_child = win.child(.{ + .border = .{ .where = .all }, + .height = nrows, + .width = ncols, + }); + _ = win_child.printSegment(.{ .text = tty_str }, .{}); + + switch (event) { + .key_press => |key| { + if (key.matches('c', .{ .ctrl = true })) { + break; + } + }, + .winsize => |ws| try vx.resize(gpa, tty.writer(), ws), + else => {}, + } + + try vx.render(tty.writer()); + } } |
