diff --git a/packages/nx/src/native/tui/app.rs b/packages/nx/src/native/tui/app.rs index d15bd7994b..68108e9b27 100644 --- a/packages/nx/src/native/tui/app.rs +++ b/packages/nx/src/native/tui/app.rs @@ -1005,6 +1005,10 @@ impl App { in_progress && pty.can_be_interactive(); terminal_pane_data.pty = Some(pty.clone()); has_pty = true; + } else { + // Clear PTY data when switching to a task that doesn't have a PTY instance + terminal_pane_data.pty = None; + terminal_pane_data.can_be_interactive = false; } let is_focused = match self.focus { diff --git a/packages/nx/src/native/tui/components/terminal_pane.rs b/packages/nx/src/native/tui/components/terminal_pane.rs index f8110118f7..493075c76f 100644 --- a/packages/nx/src/native/tui/components/terminal_pane.rs +++ b/packages/nx/src/native/tui/components/terminal_pane.rs @@ -496,6 +496,28 @@ impl<'a> StatefulWidget for TerminalPane<'a> { return; } + // If the task was skipped, show skipped message + if matches!(state.task_status, TaskStatus::Skipped) { + let message_style = if state.is_focused { + self.get_base_style(TaskStatus::Skipped) + } else { + self.get_base_style(TaskStatus::Skipped) + .add_modifier(Modifier::DIM) + }; + let message = vec![Line::from(vec![Span::styled( + "Task was skipped", + message_style, + )])]; + + let paragraph = Paragraph::new(message) + .block(block) + .alignment(Alignment::Center) + .style(Style::default()); + + Widget::render(paragraph, safe_area, buf); + return; + } + let inner_area = block.inner(safe_area); if let Some(pty_data) = &self.pty_data {