From c0c690633740c0e73e113c402aec504c4bce0a76 Mon Sep 17 00:00:00 2001 From: Ross Mackay Date: Fri, 8 Aug 2025 19:22:22 +0100 Subject: [PATCH] feat(tui): add shortcut for clearing task logs --- crates/turborepo-ui/src/tui/app.rs | 9 +++++++++ crates/turborepo-ui/src/tui/event.rs | 1 + crates/turborepo-ui/src/tui/input.rs | 1 + crates/turborepo-ui/src/tui/popup.rs | 1 + crates/turborepo-ui/src/tui/term_output.rs | 7 +++++++ 5 files changed, 19 insertions(+) diff --git a/crates/turborepo-ui/src/tui/app.rs b/crates/turborepo-ui/src/tui/app.rs index a157dec118c6c..4897bad099f2d 100644 --- a/crates/turborepo-ui/src/tui/app.rs +++ b/crates/turborepo-ui/src/tui/app.rs @@ -605,6 +605,12 @@ impl App { task.parser.screen_mut().set_scrollback(0); Ok(()) } + + pub fn clear_task_logs(&mut self) -> Result<(), Error> { + let task = self.get_full_task_mut()?; + task.clear_logs(); + Ok(()) + } } impl App { @@ -899,6 +905,9 @@ fn update( app.scroll_momentum.reset(); app.jump_to_logs_bottom()?; } + Event::ClearLogs => { + app.clear_task_logs()?; + } Event::EnterInteractive => { app.is_task_selection_pinned = true; app.interact()?; diff --git a/crates/turborepo-ui/src/tui/event.rs b/crates/turborepo-ui/src/tui/event.rs index fd7425bb43db9..8c07c3f37ea19 100644 --- a/crates/turborepo-ui/src/tui/event.rs +++ b/crates/turborepo-ui/src/tui/event.rs @@ -34,6 +34,7 @@ pub enum Event { PageDown, JumpToLogsTop, JumpToLogsBottom, + ClearLogs, SetStdin { task: String, stdin: Box, diff --git a/crates/turborepo-ui/src/tui/input.rs b/crates/turborepo-ui/src/tui/input.rs index 1d64e31cc914a..64edc7da95092 100644 --- a/crates/turborepo-ui/src/tui/input.rs +++ b/crates/turborepo-ui/src/tui/input.rs @@ -120,6 +120,7 @@ fn translate_key_event(options: InputOptions, key_event: KeyEvent) -> Option Some(Event::PageDown), KeyCode::Char('t') => Some(Event::JumpToLogsTop), KeyCode::Char('b') => Some(Event::JumpToLogsBottom), + KeyCode::Char('C') => Some(Event::ClearLogs), KeyCode::Char('m') => Some(Event::ToggleHelpPopup), KeyCode::Char('p') => Some(Event::TogglePinnedTask), KeyCode::Up | KeyCode::Char('k') => Some(Event::Up), diff --git a/crates/turborepo-ui/src/tui/popup.rs b/crates/turborepo-ui/src/tui/popup.rs index c97646e9cfe24..6cc52683afdc4 100644 --- a/crates/turborepo-ui/src/tui/popup.rs +++ b/crates/turborepo-ui/src/tui/popup.rs @@ -21,6 +21,7 @@ const BIND_LIST: &[&str] = [ "d - Scroll logs down", "Shift+u - Page logs up", "Shift+d - Page logs down", + "Shift+c - Clear logs", "t - Jump to top of logs", "b - Jump to bottom of logs", ] diff --git a/crates/turborepo-ui/src/tui/term_output.rs b/crates/turborepo-ui/src/tui/term_output.rs index dfd078decf5c4..120ba44601018 100644 --- a/crates/turborepo-ui/src/tui/term_output.rs +++ b/crates/turborepo-ui/src/tui/term_output.rs @@ -170,4 +170,11 @@ impl TerminalOutput { pub fn copy_selection(&self) -> Option { self.parser.screen().selected_text() } + + pub fn clear_logs(&mut self) { + self.output.clear(); + + // clear screen and reset cursor + self.process(b"\x1bc"); + } }