+8
-10
examples/vt.zig
+8
-10
examples/vt.zig
···
22
22
23
23
var buffer: [1024]u8 = undefined;
24
24
var tty = try vaxis.Tty.init(&buffer);
25
+
const writer = tty.writer();
25
26
var vx = try vaxis.init(alloc, .{});
26
-
defer vx.deinit(alloc, tty.writer());
27
+
defer vx.deinit(alloc, writer);
27
28
28
29
var loop: vaxis.Loop(Event) = .{ .tty = &tty, .vaxis = &vx };
29
30
try loop.init();
···
31
32
try loop.start();
32
33
defer loop.stop();
33
34
34
-
try vx.enterAltScreen(tty.writer());
35
-
try vx.queryTerminal(tty.writer(), 1 * std.time.ns_per_s);
35
+
try vx.enterAltScreen(writer);
36
+
try vx.queryTerminal(writer, 1 * std.time.ns_per_s);
36
37
var env = try std.process.getEnvMap(alloc);
37
38
defer env.deinit();
38
39
···
81
82
if (key.matches('c', .{ .ctrl = true })) return;
82
83
try vt.update(.{ .key_press = key });
83
84
},
84
-
.winsize => |ws| {
85
-
try vx.resize(alloc, tty.writer(), ws);
86
-
},
85
+
.winsize => |ws| try vx.resize(alloc, writer, ws),
87
86
}
88
87
}
89
88
if (!redraw) continue;
···
95
94
const child = win.child(.{
96
95
.x_off = 4,
97
96
.y_off = 2,
98
-
.width = 8,
99
-
.height = 6,
97
+
.width = 120,
98
+
.height = 40,
100
99
.border = .{
101
100
.where = .all,
102
101
},
···
110
109
});
111
110
try vt.draw(alloc, child);
112
111
113
-
try vx.render(tty.writer());
114
-
try tty.writer().flush();
112
+
try vx.render(writer);
115
113
}
116
114
}
+22
-10
src/widgets/terminal/Terminal.zig
+22
-10
src/widgets/terminal/Terminal.zig
···
242
242
243
243
pub fn update(self: *Terminal, event: InputEvent) !void {
244
244
switch (event) {
245
-
.key_press => |k| try key.encode(self.writer(), k, true, self.back_screen.csi_u_flags),
245
+
.key_press => |k| {
246
+
const pty_writer = self.get_pty_writer();
247
+
defer pty_writer.flush() catch {};
248
+
try key.encode(pty_writer, k, true, self.back_screen.csi_u_flags);
249
+
},
246
250
}
247
251
}
248
252
249
-
pub fn writer(self: *Terminal) *std.Io.Writer {
253
+
pub fn get_pty_writer(self: *Terminal) *std.Io.Writer {
250
254
return &self.pty_writer.interface;
251
255
}
252
256
···
502
506
},
503
507
// Device Attributes
504
508
'c' => {
509
+
const pty_writer = self.get_pty_writer();
510
+
defer pty_writer.flush() catch {};
505
511
if (seq.private_marker) |pm| {
506
512
switch (pm) {
507
513
// Secondary
508
-
'>' => try self.writer().writeAll("\x1B[>1;69;0c"),
509
-
'=' => try self.writer().writeAll("\x1B[=0000c"),
514
+
'>' => try pty_writer.writeAll("\x1B[>1;69;0c"),
515
+
'=' => try pty_writer.writeAll("\x1B[=0000c"),
510
516
else => log.info("unhandled CSI: {f}", .{seq}),
511
517
}
512
518
} else {
513
519
// Primary
514
-
try self.writer().writeAll("\x1B[?62;22c");
520
+
try pty_writer.writeAll("\x1B[?62;22c");
515
521
}
516
522
},
517
523
// Cursor Vertical Position Absolute
···
575
581
var iter = seq.iterator(u16);
576
582
const ps = iter.next() orelse 0;
577
583
if (seq.intermediate == null and seq.private_marker == null) {
584
+
const pty_writer = self.get_pty_writer();
585
+
defer pty_writer.flush() catch {};
578
586
switch (ps) {
579
-
5 => try self.writer().writeAll("\x1b[0n"),
580
-
6 => try self.writer().print("\x1b[{d};{d}R", .{
587
+
5 => try pty_writer.writeAll("\x1b[0n"),
588
+
6 => try pty_writer.print("\x1b[{d};{d}R", .{
581
589
self.back_screen.cursor.row + 1,
582
590
self.back_screen.cursor.col + 1,
583
591
}),
···
592
600
switch (int) {
593
601
// report mode
594
602
'$' => {
603
+
const pty_writer = self.get_pty_writer();
604
+
defer pty_writer.flush() catch {};
595
605
switch (ps) {
596
-
2026 => try self.writer().writeAll("\x1b[?2026;2$p"),
606
+
2026 => try pty_writer.writeAll("\x1b[?2026;2$p"),
597
607
else => {
598
608
std.log.warn("unhandled mode: {}", .{ps});
599
-
try self.writer().print("\x1b[?{d};0$p", .{ps});
609
+
try pty_writer.print("\x1b[?{d};0$p", .{ps});
600
610
},
601
611
}
602
612
},
···
616
626
}
617
627
}
618
628
if (seq.private_marker) |pm| {
629
+
const pty_writer = self.get_pty_writer();
630
+
defer pty_writer.flush() catch {};
619
631
switch (pm) {
620
632
// XTVERSION
621
-
'>' => try self.writer().print(
633
+
'>' => try pty_writer.print(
622
634
"\x1bP>|libvaxis {s}\x1B\\",
623
635
.{"dev"},
624
636
),