diff --git a/codex-rs/tui/src/bottom_pane/status_line_setup.rs b/codex-rs/tui/src/bottom_pane/status_line_setup.rs index ff2c5da2eb..fe0e1e962e 100644 --- a/codex-rs/tui/src/bottom_pane/status_line_setup.rs +++ b/codex-rs/tui/src/bottom_pane/status_line_setup.rs @@ -201,6 +201,10 @@ fn restore_hidden_status_line_items( mut items: Vec, hidden_items: &[(usize, StatusLineItem)], ) -> Vec { + if items.is_empty() { + return items; + } + for (index, item) in hidden_items { if items.contains(item) { continue; @@ -548,6 +552,28 @@ mod tests { ); } + #[tokio::test] + async fn confirm_empty_selection_does_not_restore_hidden_github_pr() { + let (tx_raw, mut rx) = unbounded_channel::(); + let mut view = StatusLineSetupView::new( + Some(&[ + StatusLineItem::ModelName.to_string(), + StatusLineItem::GithubPr.to_string(), + ]), + StatusLinePreviewData::default(), + /*github_pr_available*/ false, + AppEventSender::new(tx_raw), + ); + + view.handle_key_event(KeyEvent::new(KeyCode::Char(' '), KeyModifiers::NONE)); + view.handle_key_event(KeyEvent::new(KeyCode::Enter, KeyModifiers::NONE)); + + let Some(AppEvent::StatusLineSetup { items }) = rx.recv().await else { + panic!("expected status line setup event"); + }; + assert_eq!(items, Vec::::new()); + } + fn render_lines(view: &StatusLineSetupView, width: u16) -> String { let height = view.desired_height(width); let area = Rect::new(0, 0, width, height);