From fb2f635c915cd0abbc25cd70f80c8f9ef4fe5742 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 4 Aug 2023 11:07:46 -0700 Subject: [PATCH] termio/exec: default window title to the pwd if not reported We rely on the shell to report the window title. If the shell doesn't report the window title then we default to the pwd. --- src/termio/Exec.zig | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/termio/Exec.zig b/src/termio/Exec.zig index 29d716bb8..88881299a 100644 --- a/src/termio/Exec.zig +++ b/src/termio/Exec.zig @@ -400,6 +400,10 @@ const EventData = struct { /// flooding with cursor resets. last_cursor_reset: i64 = 0, + /// This is set to true when we've seen a title escape sequence. We use + /// this to determine if we need to default the window title. + seen_title: bool = false, + pub fn deinit(self: *EventData, alloc: Allocator) void { // Clear our write pools. We know we aren't ever going to do // any more IO since we stop our data stream below so we can just @@ -1377,6 +1381,9 @@ const StreamHandler = struct { std.mem.copy(u8, &buf, title); buf[title.len] = 0; + // Mark that we've seen a title + self.ev.seen_title = true; + _ = self.ev.surface_mailbox.push(.{ .set_title = buf, }, .{ .forever = {} }); @@ -1458,5 +1465,11 @@ const StreamHandler = struct { log.debug("terminal pwd: {s}", .{uri.path}); try self.terminal.setPwd(uri.path); + + // If we haven't seen a title, use our pwd as the title. + if (!self.ev.seen_title) { + try self.changeWindowTitle(uri.path); + self.ev.seen_title = false; + } } };