settings_ui: Gate CLI open behavior setting on feature flag (#53964)

The `cli_default_open_behavior` setting controls how `zed <path>` opens
directories, but the underlying behavior is gated behind the
`AgentV2FeatureFlag` in `open_listener.rs`. Without the flag enabled,
the setting has no effect — Zed always falls back to `NewWindow`
behavior.

This change gates the settings UI entry behind the same feature flag so
it only appears when the feature is actually active.

**Changes:**
- Converted `general_settings_section()` from a fixed-size array to a
`Vec` so the CLI setting can be conditionally appended
- Added `feature_flags` as a dependency to `settings_ui`

Release Notes:

- N/A
This commit is contained in:
Eric Holk authored and GitHub committed 2026-04-15 01:10:36 -07:00
1 parent 1cd3249ca9
commit bc84d80ea7
3 files changed
+38 -28

No files matched your search

Generated
+1
View File
@@ -15896,6 +15896,7 @@ dependencies = [
"edit_prediction",
"edit_prediction_ui",
"editor",
"feature_flags",
"fs",
"futures 0.3.32",
"fuzzy",
+1
View File
@@ -29,6 +29,7 @@ edit_prediction.workspace = true
edit_prediction_ui.workspace = true
editor.workspace = true
fs.workspace = true
feature_flags.workspace = true
futures.workspace = true
fuzzy.workspace = true
gpui.workspace = true
+36 -28
View File
@@ -63,7 +63,7 @@ macro_rules! concat_sections {
pub(crate) fn settings_data(cx: &App) -> Vec<SettingsPage> {
vec![
general_page(),
general_page(cx),
appearance_page(),
keymap_page(),
editor_page(),
@@ -80,9 +80,9 @@ pub(crate) fn settings_data(cx: &App) -> Vec<SettingsPage> {
]
}
fn general_page() -> SettingsPage {
fn general_settings_section() -> [SettingsPageItem; 9] {
[
fn general_page(cx: &App) -> SettingsPage {
fn general_settings_section(cx: &App) -> Vec<SettingsPageItem> {
let mut items = vec![
SettingsPageItem::SectionHeader("General Settings"),
SettingsPageItem::SettingItem(SettingItem {
files: PROJECT,
@@ -141,27 +141,6 @@ fn general_page() -> SettingsPage {
metadata: None,
files: USER,
}),
SettingsPageItem::SettingItem(SettingItem {
title: "CLI Default Open Behavior",
description: "How `zed <path>` opens directories when no flag is specified.",
field: Box::new(SettingField {
json_path: Some("cli_default_open_behavior"),
pick: |settings_content| {
settings_content
.workspace
.cli_default_open_behavior
.as_ref()
},
write: |settings_content, value| {
settings_content.workspace.cli_default_open_behavior = value;
},
}),
metadata: Some(Box::new(SettingsFieldMetadata {
should_do_titlecase: Some(false),
..Default::default()
})),
files: USER,
}),
SettingsPageItem::SettingItem(SettingItem {
title: "Use System Path Prompts",
description: "Use native OS dialogs for 'Open' and 'Save As'.",
@@ -221,7 +200,34 @@ fn general_page() -> SettingsPage {
metadata: None,
files: USER,
}),
]
];
use feature_flags::FeatureFlagAppExt;
if cx.has_flag::<feature_flags::AgentV2FeatureFlag>() {
items.push(SettingsPageItem::SettingItem(SettingItem {
title: "CLI Default Open Behavior",
description: "How `zed <path>` opens directories when no flag is specified.",
field: Box::new(SettingField {
json_path: Some("cli_default_open_behavior"),
pick: |settings_content| {
settings_content
.workspace
.cli_default_open_behavior
.as_ref()
},
write: |settings_content, value| {
settings_content.workspace.cli_default_open_behavior = value;
},
}),
metadata: Some(Box::new(SettingsFieldMetadata {
should_do_titlecase: Some(false),
..Default::default()
})),
files: USER,
}));
}
items
}
fn security_section() -> [SettingsPageItem; 2] {
[
@@ -391,13 +397,15 @@ fn general_page() -> SettingsPage {
SettingsPage {
title: "General",
items: concat_sections!(
general_settings_section(),
@vec,
general_settings_section(cx),
security_section(),
workspace_restoration_section(),
scoped_settings_section(),
privacy_section(),
auto_update_section(),
),
)
.into(),
}
}