Deduplicate terminal settings and fix dropdown toggle bug

Anthony created

Change summary

crates/settings_ui/src/page_data.rs   | 187 -----------------------------
crates/settings_ui/src/settings_ui.rs |  10 +
2 files changed, 9 insertions(+), 188 deletions(-)

Detailed changes

crates/settings_ui/src/page_data.rs 🔗

@@ -2766,150 +2766,6 @@ pub(crate) fn settings_data() -> Vec<SettingsPage> {
                     files: USER,
                     metadata: None,
                 }),
-                SettingsPageItem::SettingItem(SettingItem {
-                    title: "Blinking",
-                    description: "Sets the cursor blinking behavior in the terminal",
-                    field: Box::new(SettingField {
-                        pick: |settings_content| {
-                            if let Some(terminal) = &settings_content.terminal {
-                                &terminal.blinking
-                            } else {
-                                &None
-                            }
-                        },
-                        pick_mut: |settings_content| {
-                            &mut settings_content.terminal.get_or_insert_default().blinking
-                        },
-                    }),
-                    files: USER,
-                    metadata: None,
-                }),
-                SettingsPageItem::SettingItem(SettingItem {
-                    title: "Cursor Shape",
-                    description: "Default cursor shape for the terminal",
-                    field: Box::new(SettingField {
-                        pick: |settings_content| {
-                            if let Some(terminal) = &settings_content.terminal {
-                                &terminal.cursor_shape
-                            } else {
-                                &None
-                            }
-                        },
-                        pick_mut: |settings_content| {
-                            &mut settings_content
-                                .terminal
-                                .get_or_insert_default()
-                                .cursor_shape
-                        },
-                    }),
-                    files: USER,
-                    metadata: None,
-                }),
-                SettingsPageItem::SettingItem(SettingItem {
-                    title: "Alternate Scroll",
-                    description: "Sets whether Alternate Scroll mode is active by default",
-                    field: Box::new(SettingField {
-                        pick: |settings_content| {
-                            if let Some(terminal) = &settings_content.terminal {
-                                &terminal.alternate_scroll
-                            } else {
-                                &None
-                            }
-                        },
-                        pick_mut: |settings_content| {
-                            &mut settings_content
-                                .terminal
-                                .get_or_insert_default()
-                                .alternate_scroll
-                        },
-                    }),
-                    files: USER,
-                    metadata: None,
-                }),
-                SettingsPageItem::SettingItem(SettingItem {
-                    title: "Option As Meta",
-                    description: "Sets whether the option key behaves as the meta key",
-                    field: Box::new(SettingField {
-                        pick: |settings_content| {
-                            if let Some(terminal) = &settings_content.terminal {
-                                &terminal.option_as_meta
-                            } else {
-                                &None
-                            }
-                        },
-                        pick_mut: |settings_content| {
-                            &mut settings_content
-                                .terminal
-                                .get_or_insert_default()
-                                .option_as_meta
-                        },
-                    }),
-                    files: USER,
-                    metadata: None,
-                }),
-                SettingsPageItem::SettingItem(SettingItem {
-                    title: "Copy On Select",
-                    description: "Whether selecting text in the terminal automatically copies to clipboard",
-                    field: Box::new(SettingField {
-                        pick: |settings_content| {
-                            if let Some(terminal) = &settings_content.terminal {
-                                &terminal.copy_on_select
-                            } else {
-                                &None
-                            }
-                        },
-                        pick_mut: |settings_content| {
-                            &mut settings_content
-                                .terminal
-                                .get_or_insert_default()
-                                .copy_on_select
-                        },
-                    }),
-                    files: USER,
-                    metadata: None,
-                }),
-                SettingsPageItem::SettingItem(SettingItem {
-                    title: "Keep Selection On Copy",
-                    description: "Whether to keep the text selection after copying it to the clipboard",
-                    field: Box::new(SettingField {
-                        pick: |settings_content| {
-                            if let Some(terminal) = &settings_content.terminal {
-                                &terminal.keep_selection_on_copy
-                            } else {
-                                &None
-                            }
-                        },
-                        pick_mut: |settings_content| {
-                            &mut settings_content
-                                .terminal
-                                .get_or_insert_default()
-                                .keep_selection_on_copy
-                        },
-                    }),
-                    metadata: None,
-                    files: USER,
-                }),
-                SettingsPageItem::SettingItem(SettingItem {
-                    title: "Max Scroll History Lines",
-                    description: "The maximum number of lines to keep in the scrollback history",
-                    field: Box::new(SettingField {
-                        pick: |settings_content| {
-                            if let Some(terminal) = &settings_content.terminal {
-                                &terminal.max_scroll_history_lines
-                            } else {
-                                &None
-                            }
-                        },
-                        pick_mut: |settings_content| {
-                            &mut settings_content
-                                .terminal
-                                .get_or_insert_default()
-                                .max_scroll_history_lines
-                        },
-                    }),
-                    metadata: None,
-                    files: USER,
-                }),
                 SettingsPageItem::SectionHeader("Outline Panel"),
                 SettingsPageItem::SettingItem(SettingItem {
                     title: "Outline Panel Button",
@@ -4491,49 +4347,6 @@ pub(crate) fn settings_data() -> Vec<SettingsPage> {
                     metadata: None,
                     files: USER,
                 }),
-                SettingsPageItem::SectionHeader("Layout Settings"),
-                SettingsPageItem::SettingItem(SettingItem {
-                    title: "Default Width",
-                    description: "Default width when the terminal is docked to the left or right (in pixels)",
-                    field: Box::new(SettingField {
-                        pick: |settings_content| {
-                            if let Some(terminal) = &settings_content.terminal {
-                                &terminal.default_width
-                            } else {
-                                &None
-                            }
-                        },
-                        pick_mut: |settings_content| {
-                            &mut settings_content
-                                .terminal
-                                .get_or_insert_default()
-                                .default_width
-                        },
-                    }),
-                    metadata: None,
-                    files: USER,
-                }),
-                SettingsPageItem::SettingItem(SettingItem {
-                    title: "Default Height",
-                    description: "Default height when the terminal is docked to the bottom (in pixels)",
-                    field: Box::new(SettingField {
-                        pick: |settings_content| {
-                            if let Some(terminal) = &settings_content.terminal {
-                                &terminal.default_height
-                            } else {
-                                &None
-                            }
-                        },
-                        pick_mut: |settings_content| {
-                            &mut settings_content
-                                .terminal
-                                .get_or_insert_default()
-                                .default_height
-                        },
-                    }),
-                    metadata: None,
-                    files: USER,
-                }),
                 SettingsPageItem::SectionHeader("Advanced Settings"),
                 SettingsPageItem::SettingItem(SettingItem {
                     title: "Max Scroll History Lines",

crates/settings_ui/src/settings_ui.rs 🔗

@@ -461,6 +461,14 @@ fn init_renderers(cx: &mut App) {
             render_dropdown(*settings_field, file, window, cx)
         })
         .add_renderer::<settings::ShowMinimap>(|settings_field, file, _, window, cx| {
+            let variants = || -> &'static [settings::ShowMinimap] {
+                <settings::ShowMinimap as strum::VariantArray>::VARIANTS
+            };
+            let labels = || -> &'static [&'static str] {
+                <settings::ShowMinimap as strum::VariantNames>::VARIANTS
+            };
+            dbg!(variants(), labels());
+
             render_dropdown(*settings_field, file, window, cx)
         })
         .add_renderer::<settings::DisplayIn>(|settings_field, file, _, window, cx| {
@@ -2269,7 +2277,7 @@ where
         labels()[variants().iter().position(|v| *v == current_value).unwrap()];
 
     DropdownMenu::new(
-        "dropdown",
+        SharedString::from(format!("dropdown-{}", field.type_name())),
         current_value_label.to_title_case(),
         ContextMenu::build(window, cx, move |mut menu, _, _| {
             for (&value, &label) in std::iter::zip(variants(), labels()) {