From 84a33587730a5bfc5ed5a4d2a40ed89ffd57c963 Mon Sep 17 00:00:00 2001 From: canvrno-oai Date: Tue, 24 Mar 2026 10:22:54 -0700 Subject: [PATCH 1/2] Remove numeric prefixes for disabled rows in shared list rendering. --- codex-rs/tui/src/bottom_pane/list_selection_view.rs | 4 +++- ...chatwidget__tests__apps_popup_loading_state.snap | 2 +- ...get__tests__plugin_detail_popup_installable.snap | 6 +++--- ...twidget__tests__plugins_popup_loading_state.snap | 2 +- ...et__tests__realtime_microphone_picker_popup.snap | 13 ++++++------- .../src/bottom_pane/list_selection_view.rs | 4 +++- ...chatwidget__tests__apps_popup_loading_state.snap | 2 +- ...get__tests__plugin_detail_popup_installable.snap | 6 +++--- ...twidget__tests__plugins_popup_loading_state.snap | 2 +- ...et__tests__realtime_microphone_picker_popup.snap | 13 ++++++------- 10 files changed, 28 insertions(+), 26 deletions(-) diff --git a/codex-rs/tui/src/bottom_pane/list_selection_view.rs b/codex-rs/tui/src/bottom_pane/list_selection_view.rs index e3b3287131c..674cbcad4c1 100644 --- a/codex-rs/tui/src/bottom_pane/list_selection_view.rs +++ b/codex-rs/tui/src/bottom_pane/list_selection_view.rs @@ -371,11 +371,14 @@ impl ListSelectionView { "" }; let name_with_marker = format!("{name}{marker}"); + let is_disabled = item.is_disabled || item.disabled_reason.is_some(); let n = visible_idx + 1; let wrap_prefix = if self.is_searchable { // The number keys don't work when search is enabled (since we let the // numbers be used for the search query). format!("{prefix} ") + } else if is_disabled { + format!("{prefix} ") } else { format!("{prefix} {n}. ") }; @@ -388,7 +391,6 @@ impl ListSelectionView { .flatten() .or_else(|| item.description.clone()); let wrap_indent = description.is_none().then_some(wrap_prefix_width); - let is_disabled = item.is_disabled || item.disabled_reason.is_some(); GenericDisplayRow { name: name_with_marker, name_prefix_spans, diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__apps_popup_loading_state.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__apps_popup_loading_state.snap index e75302e5c2f..4b4da933de5 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__apps_popup_loading_state.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__apps_popup_loading_state.snap @@ -5,4 +5,4 @@ expression: before Apps Loading installed and available apps... -› 1. Loading apps... This updates when the full list is ready. +› Loading apps... This updates when the full list is ready. diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugin_detail_popup_installable.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugin_detail_popup_installable.snap index d2461ec72f3..7645c912d19 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugin_detail_popup_installable.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugin_detail_popup_installable.snap @@ -9,8 +9,8 @@ expression: popup › 1. Back to plugins Return to the plugin list. 2. Install plugin Install this plugin now. - 3. Skills design-review, extract-copy - 4. Apps Figma, Slack - 5. MCP Servers figma-mcp, docs-mcp + Skills design-review, extract-copy + Apps Figma, Slack + MCP Servers figma-mcp, docs-mcp Press esc to close. diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugins_popup_loading_state.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugins_popup_loading_state.snap index eddb869168f..1cd49c9372e 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugins_popup_loading_state.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugins_popup_loading_state.snap @@ -6,4 +6,4 @@ expression: popup Loading available plugins... This first pass shows the ChatGPT marketplace only. -› 1. Loading plugins... This updates when the marketplace list is ready. +› Loading plugins... This updates when the marketplace list is ready. diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__realtime_microphone_picker_popup.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__realtime_microphone_picker_popup.snap index 3095e6da976..e4196ab061e 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__realtime_microphone_picker_popup.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__realtime_microphone_picker_popup.snap @@ -5,13 +5,12 @@ expression: popup Select Microphone Saved devices apply to realtime voice only. - 1. System default Use your operating system - default device. -› 2. Unavailable: Studio Mic (current) (disabled) Configured device is not - currently available. - (disabled: Reconnect the - device or choose another - one.) + 1. System default Use your operating system + default device. +› Unavailable: Studio Mic (current) (disabled) Configured device is not + currently available. + (disabled: Reconnect the + device or choose another one.) 3. Built-in Mic 4. USB Mic diff --git a/codex-rs/tui_app_server/src/bottom_pane/list_selection_view.rs b/codex-rs/tui_app_server/src/bottom_pane/list_selection_view.rs index e3b3287131c..674cbcad4c1 100644 --- a/codex-rs/tui_app_server/src/bottom_pane/list_selection_view.rs +++ b/codex-rs/tui_app_server/src/bottom_pane/list_selection_view.rs @@ -371,11 +371,14 @@ impl ListSelectionView { "" }; let name_with_marker = format!("{name}{marker}"); + let is_disabled = item.is_disabled || item.disabled_reason.is_some(); let n = visible_idx + 1; let wrap_prefix = if self.is_searchable { // The number keys don't work when search is enabled (since we let the // numbers be used for the search query). format!("{prefix} ") + } else if is_disabled { + format!("{prefix} ") } else { format!("{prefix} {n}. ") }; @@ -388,7 +391,6 @@ impl ListSelectionView { .flatten() .or_else(|| item.description.clone()); let wrap_indent = description.is_none().then_some(wrap_prefix_width); - let is_disabled = item.is_disabled || item.disabled_reason.is_some(); GenericDisplayRow { name: name_with_marker, name_prefix_spans, diff --git a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__apps_popup_loading_state.snap b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__apps_popup_loading_state.snap index 9bc30a7220c..282b8657747 100644 --- a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__apps_popup_loading_state.snap +++ b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__apps_popup_loading_state.snap @@ -5,4 +5,4 @@ expression: before Apps Loading installed and available apps... -› 1. Loading apps... This updates when the full list is ready. +› Loading apps... This updates when the full list is ready. diff --git a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugin_detail_popup_installable.snap b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugin_detail_popup_installable.snap index fe88135b86a..147f3e80b0f 100644 --- a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugin_detail_popup_installable.snap +++ b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugin_detail_popup_installable.snap @@ -9,8 +9,8 @@ expression: popup › 1. Back to plugins Return to the plugin list. 2. Install plugin Install this plugin now. - 3. Skills design-review, extract-copy - 4. Apps Figma, Slack - 5. MCP Servers figma-mcp, docs-mcp + Skills design-review, extract-copy + Apps Figma, Slack + MCP Servers figma-mcp, docs-mcp Press esc to close. diff --git a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugins_popup_loading_state.snap b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugins_popup_loading_state.snap index 741c813fb16..3fbe8728052 100644 --- a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugins_popup_loading_state.snap +++ b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugins_popup_loading_state.snap @@ -6,4 +6,4 @@ expression: popup Loading available plugins... This first pass shows the ChatGPT marketplace only. -› 1. Loading plugins... This updates when the marketplace list is ready. +› Loading plugins... This updates when the marketplace list is ready. diff --git a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__realtime_microphone_picker_popup.snap b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__realtime_microphone_picker_popup.snap index 8eadefc63a1..d9cffae9b1a 100644 --- a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__realtime_microphone_picker_popup.snap +++ b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__realtime_microphone_picker_popup.snap @@ -5,13 +5,12 @@ expression: popup Select Microphone Saved devices apply to realtime voice only. - 1. System default Use your operating system - default device. -› 2. Unavailable: Studio Mic (current) (disabled) Configured device is not - currently available. - (disabled: Reconnect the - device or choose another - one.) + 1. System default Use your operating system + default device. +› Unavailable: Studio Mic (current) (disabled) Configured device is not + currently available. + (disabled: Reconnect the + device or choose another one.) 3. Built-in Mic 4. USB Mic From 27ad3ac241542b7d9153c6d9f70e88d1e16a1eb4 Mon Sep 17 00:00:00 2001 From: canvrno-oai Date: Tue, 24 Mar 2026 10:48:01 -0700 Subject: [PATCH 2/2] Indent list items when numbers are omitted --- codex-rs/tui/src/bottom_pane/list_selection_view.rs | 2 +- ...chatwidget__tests__apps_popup_loading_state.snap | 2 +- ...get__tests__plugin_detail_popup_installable.snap | 6 +++--- ...twidget__tests__plugins_popup_loading_state.snap | 2 +- ...et__tests__realtime_microphone_picker_popup.snap | 13 +++++++------ .../src/bottom_pane/list_selection_view.rs | 2 +- ...chatwidget__tests__apps_popup_loading_state.snap | 2 +- ...get__tests__plugin_detail_popup_installable.snap | 6 +++--- ...twidget__tests__plugins_popup_loading_state.snap | 2 +- ...et__tests__realtime_microphone_picker_popup.snap | 13 +++++++------ 10 files changed, 26 insertions(+), 24 deletions(-) diff --git a/codex-rs/tui/src/bottom_pane/list_selection_view.rs b/codex-rs/tui/src/bottom_pane/list_selection_view.rs index 674cbcad4c1..10e641655b3 100644 --- a/codex-rs/tui/src/bottom_pane/list_selection_view.rs +++ b/codex-rs/tui/src/bottom_pane/list_selection_view.rs @@ -378,7 +378,7 @@ impl ListSelectionView { // numbers be used for the search query). format!("{prefix} ") } else if is_disabled { - format!("{prefix} ") + format!("{prefix} {}", " ".repeat(n.to_string().len() + 2)) } else { format!("{prefix} {n}. ") }; diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__apps_popup_loading_state.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__apps_popup_loading_state.snap index 4b4da933de5..94d7aab6da7 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__apps_popup_loading_state.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__apps_popup_loading_state.snap @@ -5,4 +5,4 @@ expression: before Apps Loading installed and available apps... -› Loading apps... This updates when the full list is ready. +› Loading apps... This updates when the full list is ready. diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugin_detail_popup_installable.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugin_detail_popup_installable.snap index 7645c912d19..671cf4a3c53 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugin_detail_popup_installable.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugin_detail_popup_installable.snap @@ -9,8 +9,8 @@ expression: popup › 1. Back to plugins Return to the plugin list. 2. Install plugin Install this plugin now. - Skills design-review, extract-copy - Apps Figma, Slack - MCP Servers figma-mcp, docs-mcp + Skills design-review, extract-copy + Apps Figma, Slack + MCP Servers figma-mcp, docs-mcp Press esc to close. diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugins_popup_loading_state.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugins_popup_loading_state.snap index 1cd49c9372e..2b0f6837eb6 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugins_popup_loading_state.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__plugins_popup_loading_state.snap @@ -6,4 +6,4 @@ expression: popup Loading available plugins... This first pass shows the ChatGPT marketplace only. -› Loading plugins... This updates when the marketplace list is ready. +› Loading plugins... This updates when the marketplace list is ready. diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__realtime_microphone_picker_popup.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__realtime_microphone_picker_popup.snap index e4196ab061e..00392bc9d1f 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__realtime_microphone_picker_popup.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__realtime_microphone_picker_popup.snap @@ -5,12 +5,13 @@ expression: popup Select Microphone Saved devices apply to realtime voice only. - 1. System default Use your operating system - default device. -› Unavailable: Studio Mic (current) (disabled) Configured device is not - currently available. - (disabled: Reconnect the - device or choose another one.) + 1. System default Use your operating system + default device. +› Unavailable: Studio Mic (current) (disabled) Configured device is not + currently available. + (disabled: Reconnect the + device or choose another + one.) 3. Built-in Mic 4. USB Mic diff --git a/codex-rs/tui_app_server/src/bottom_pane/list_selection_view.rs b/codex-rs/tui_app_server/src/bottom_pane/list_selection_view.rs index 674cbcad4c1..10e641655b3 100644 --- a/codex-rs/tui_app_server/src/bottom_pane/list_selection_view.rs +++ b/codex-rs/tui_app_server/src/bottom_pane/list_selection_view.rs @@ -378,7 +378,7 @@ impl ListSelectionView { // numbers be used for the search query). format!("{prefix} ") } else if is_disabled { - format!("{prefix} ") + format!("{prefix} {}", " ".repeat(n.to_string().len() + 2)) } else { format!("{prefix} {n}. ") }; diff --git a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__apps_popup_loading_state.snap b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__apps_popup_loading_state.snap index 282b8657747..b7a3be88842 100644 --- a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__apps_popup_loading_state.snap +++ b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__apps_popup_loading_state.snap @@ -5,4 +5,4 @@ expression: before Apps Loading installed and available apps... -› Loading apps... This updates when the full list is ready. +› Loading apps... This updates when the full list is ready. diff --git a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugin_detail_popup_installable.snap b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugin_detail_popup_installable.snap index 147f3e80b0f..0d534d85cc0 100644 --- a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugin_detail_popup_installable.snap +++ b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugin_detail_popup_installable.snap @@ -9,8 +9,8 @@ expression: popup › 1. Back to plugins Return to the plugin list. 2. Install plugin Install this plugin now. - Skills design-review, extract-copy - Apps Figma, Slack - MCP Servers figma-mcp, docs-mcp + Skills design-review, extract-copy + Apps Figma, Slack + MCP Servers figma-mcp, docs-mcp Press esc to close. diff --git a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugins_popup_loading_state.snap b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugins_popup_loading_state.snap index 3fbe8728052..f1f18c1eafd 100644 --- a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugins_popup_loading_state.snap +++ b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__plugins_popup_loading_state.snap @@ -6,4 +6,4 @@ expression: popup Loading available plugins... This first pass shows the ChatGPT marketplace only. -› Loading plugins... This updates when the marketplace list is ready. +› Loading plugins... This updates when the marketplace list is ready. diff --git a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__realtime_microphone_picker_popup.snap b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__realtime_microphone_picker_popup.snap index d9cffae9b1a..93f64ad3167 100644 --- a/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__realtime_microphone_picker_popup.snap +++ b/codex-rs/tui_app_server/src/chatwidget/snapshots/codex_tui_app_server__chatwidget__tests__realtime_microphone_picker_popup.snap @@ -5,12 +5,13 @@ expression: popup Select Microphone Saved devices apply to realtime voice only. - 1. System default Use your operating system - default device. -› Unavailable: Studio Mic (current) (disabled) Configured device is not - currently available. - (disabled: Reconnect the - device or choose another one.) + 1. System default Use your operating system + default device. +› Unavailable: Studio Mic (current) (disabled) Configured device is not + currently available. + (disabled: Reconnect the + device or choose another + one.) 3. Built-in Mic 4. USB Mic