diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/exec.zig | 10 | ||||
| -rw-r--r-- | src/pardes.zig | 5 |
2 files changed, 10 insertions, 5 deletions
diff --git a/src/exec.zig b/src/exec.zig index fa915b16..cc2d3c4f 100644 --- a/src/exec.zig +++ b/src/exec.zig @@ -572,11 +572,13 @@ fn echoCommand(p: *Pardes, pane: *Pane, line: []const u8) void { } /// `run <serial> <word>` or `exit <serial> <N|?>` in the log. +/// The whole line, one record as `msg` carries its text: its control +/// characters, a newline too, become spaces (events.pushLog). A new pane is +/// announced first, so `new` comes before the `run` in it. fn noteRun(p: *Pardes, pane: *Pane, what: []const u8, said: []const u8) void { - var buf: [96]u8 = undefined; - const word = std.mem.trim(u8, said, " \t"); - const first = word[0 .. std.mem.indexOfAny(u8, word, " \t") orelse word.len]; - pardes.ctlfs.events.notePath(p, what, std.fmt.bufPrint(&buf, "{d} {s}", .{ pane.serial, first[0..@min(first.len, 64)] }) catch return); + pardes.ctlfs.events.announce(p); + var buf: [command_max + 16]u8 = undefined; + pardes.ctlfs.events.notePath(p, what, std.fmt.bufPrint(&buf, "{d} {s}", .{ pane.serial, std.mem.trim(u8, said, " \t\r\n") }) catch return); } /// A command pane's child is gone: the pane stays, showing what it said diff --git a/src/pardes.zig b/src/pardes.zig index 5e86f0fd..58354b95 100644 --- a/src/pardes.zig +++ b/src/pardes.zig @@ -1593,7 +1593,10 @@ test "a command pane shows how its command ended, and the next command there run const log = try ctlfs.events.freezeLog(p); defer gpa.free(log.bytes); var want: [64]u8 = undefined; - try std.testing.expect(std.mem.indexOf(u8, log.bytes, try std.fmt.bufPrint(&want, "run {d} make\n", .{pane.serial})) != null); + // The whole line, after the `new` of the pane it runs in. + const ran = std.mem.indexOf(u8, log.bytes, try std.fmt.bufPrint(&want, "run {d} make -j8\n", .{pane.serial})) orelse return error.NoRunRecord; + const made = std.mem.indexOf(u8, log.bytes, try std.fmt.bufPrint(&want, "new {d} ", .{pane.serial})) orelse return error.NoNewRecord; + try std.testing.expect(made < ran); try std.testing.expect(std.mem.indexOf(u8, log.bytes, try std.fmt.bufPrint(&want, "exit {d} 2\n", .{pane.serial})) != null); // A signal for a pane is not performed on whoever takes its slot. const Count = struct { |
