mirror of
https://github.com/openai/codex.git
synced 2026-05-01 01:47:18 +00:00
Modes label below textarea (#9645)
# Summary - Add a collaboration mode indicator rendered at the bottom-right of the TUI composer footer. - Style modes per design (Plan in #D72EE1, Execute matching dim context style, Pair Programming using the same cyan as text elements). - Add shared “(shift+tab to cycle)” hint text for all mode labels and align the indicator with the left footer margin. NOTE: currently this is hidden if the Collaboration Modes feature flag is disabled, or in Custom mode. Maybe we should show it in Custom mode too? I'll leave that out of this PR though # UI - Mode indicator appears below the textarea, bottom-right of the footer line. - Includes “(shift+tab to cycle)” and keeps right padding aligned to the left footer indent. <img width="983" height="200" alt="Screenshot 2026-01-21 at 7 17 54 PM" src="https://github.com/user-attachments/assets/d1c5e4ed-7d7b-4f6c-9e71-bc3cf6400e0e" /> <img width="980" height="200" alt="Screenshot 2026-01-21 at 7 18 53 PM" src="https://github.com/user-attachments/assets/d22ff0da-a406-4930-85c5-affb2234e84b" /> <img width="979" height="201" alt="Screenshot 2026-01-21 at 7 19 12 PM" src="https://github.com/user-attachments/assets/862cb17f-0495-46fa-9b01-a4a9f29b52d5" />
This commit is contained in:
@@ -34,7 +34,6 @@ use crossterm::event::KeyCode;
|
||||
use crossterm::event::KeyEvent;
|
||||
use ratatui::buffer::Buffer;
|
||||
use ratatui::layout::Rect;
|
||||
use ratatui::text::Line;
|
||||
use std::time::Duration;
|
||||
|
||||
mod approval_overlay;
|
||||
@@ -60,11 +59,14 @@ mod list_selection_view;
|
||||
mod prompt_args;
|
||||
mod skill_popup;
|
||||
mod skills_toggle_view;
|
||||
pub(crate) use footer::CollaborationModeIndicator;
|
||||
pub(crate) use list_selection_view::SelectionViewParams;
|
||||
mod feedback_view;
|
||||
pub(crate) use feedback_view::feedback_disabled_params;
|
||||
pub(crate) use feedback_view::feedback_selection_params;
|
||||
pub(crate) use feedback_view::feedback_upload_consent_params;
|
||||
pub(crate) use skills_toggle_view::SkillsToggleItem;
|
||||
pub(crate) use skills_toggle_view::SkillsToggleView;
|
||||
mod paste_burst;
|
||||
pub mod popup_consts;
|
||||
mod queued_user_messages;
|
||||
@@ -110,8 +112,6 @@ pub(crate) use experimental_features_view::BetaFeatureItem;
|
||||
pub(crate) use experimental_features_view::ExperimentalFeaturesView;
|
||||
pub(crate) use list_selection_view::SelectionAction;
|
||||
pub(crate) use list_selection_view::SelectionItem;
|
||||
pub(crate) use skills_toggle_view::SkillsToggleItem;
|
||||
pub(crate) use skills_toggle_view::SkillsToggleView;
|
||||
|
||||
/// Pane displayed in the lower half of the chat UI.
|
||||
///
|
||||
@@ -207,6 +207,14 @@ impl BottomPane {
|
||||
self.request_redraw();
|
||||
}
|
||||
|
||||
pub fn set_collaboration_mode_indicator(
|
||||
&mut self,
|
||||
indicator: Option<CollaborationModeIndicator>,
|
||||
) {
|
||||
self.composer.set_collaboration_mode_indicator(indicator);
|
||||
self.request_redraw();
|
||||
}
|
||||
|
||||
pub fn status_widget(&self) -> Option<&StatusIndicatorWidget> {
|
||||
self.status.as_ref()
|
||||
}
|
||||
@@ -548,23 +556,6 @@ impl BottomPane {
|
||||
self.request_redraw();
|
||||
}
|
||||
|
||||
pub(crate) fn flash_footer_hint(&mut self, line: Line<'static>, duration: Duration) {
|
||||
self.composer.show_footer_flash(line, duration);
|
||||
let frame_requester = self.frame_requester.clone();
|
||||
if let Ok(handle) = tokio::runtime::Handle::try_current() {
|
||||
handle.spawn(async move {
|
||||
tokio::time::sleep(duration).await;
|
||||
frame_requester.schedule_frame();
|
||||
});
|
||||
} else {
|
||||
std::thread::spawn(move || {
|
||||
std::thread::sleep(duration);
|
||||
frame_requester.schedule_frame();
|
||||
});
|
||||
}
|
||||
self.request_redraw();
|
||||
}
|
||||
|
||||
pub(crate) fn composer_is_empty(&self) -> bool {
|
||||
self.composer.is_empty()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user