diff --git a/src/termio/Exec.zig b/src/termio/Exec.zig index cf6b1ab7c..3779fc4c0 100644 --- a/src/termio/Exec.zig +++ b/src/termio/Exec.zig @@ -379,12 +379,20 @@ pub fn clearScreen(self: *Exec, history: bool) !void { // Clear our scrollback if (history) try self.terminal.screen.clear(.history); - // Clear our screen using terminal state. - try self.terminal.screen.clear(.above_cursor); + // If we're not at a prompt, we clear the screen manually using + // the terminal screen state. If we are at a prompt, we send + // form-feed so that the shell can repaint the entire screen. + if (!self.terminal.cursorIsAtPrompt()) { + // Clear above the cursor + try self.terminal.screen.clear(.above_cursor); + + // Exit + return; + } } - // We also always send form feed so that the terminal can repaint - // our prompt. + // If we reached here it means we're at a prompt, so we send a form-feed. + assert(self.terminal.cursorIsAtPrompt()); try self.queueWrite(&[_]u8{0x0C}); }