fn footer_tips()

in codex-rs/tui/src/bottom_pane/request_user_input/mod.rs [473:522]


    fn footer_tips(&self) -> Vec<FooterTip> {
        let mut tips = Vec::new();
        let notes_visible = self.notes_ui_visible();
        if self.has_options() {
            if self.selected_option_index().is_some() && !notes_visible {
                tips.push(FooterTip::highlighted("tab to add notes"));
            }
            if self.selected_option_index().is_some() && notes_visible {
                tips.push(FooterTip::new("tab or esc to clear notes"));
            }
        }

        let question_count = self.question_count();
        let is_last_question = self.current_index().saturating_add(1) >= question_count;
        let submit_key = if self.focus_is_notes() || !self.has_options() {
            self.composer_submit_keys
                .first()
                .map(KeyBinding::display_label)
        } else {
            Some("enter".to_string())
        };
        if let Some(submit_key) = submit_key {
            let submit_tip = if question_count == 1 {
                FooterTip::highlighted(format!("{submit_key} to submit answer"))
            } else if is_last_question {
                FooterTip::highlighted(format!("{submit_key} to submit all"))
            } else {
                FooterTip::new(format!("{submit_key} to submit answer"))
            };
            tips.push(submit_tip);
        }
        if question_count > 1 {
            if self.has_options() && !self.focus_is_notes() {
                tips.push(FooterTip::new("←/→ to navigate questions"));
            } else if !self.has_options() {
                tips.push(FooterTip::new("ctrl + p / ctrl + n change question"));
            }
        }
        if let Some(interrupt_key) = self.interrupt_turn_keys.first()
            && !(self.has_options()
                && notes_visible
                && *interrupt_key == crate::key_hint::plain(KeyCode::Esc))
        {
            tips.push(FooterTip::new(format!(
                "{} to interrupt",
                interrupt_key.display_label()
            )));
        }
        tips
    }