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 2026-04-15 01:10:36 -07:00 committed by GitHub
parent 1cd3249ca9
commit bc84d80ea7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 38 additions and 28 deletions

1
Cargo.lock generated
View file

@ -15896,6 +15896,7 @@ dependencies = [
"edit_prediction",
"edit_prediction_ui",
"editor",
"feature_flags",
"fs",
"futures 0.3.32",
"fuzzy",

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

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(),
}
}