Move disable_paste_burst under [tui] (#41976)

## What changed

- Add `tui.disable_paste_burst` as the preferred configuration key.
- Keep the top-level `disable_paste_burst` key as a legacy fallback.
- Give the `[tui]` setting precedence when both keys are present, while preserving configuration-layer precedence.

## Testing

Add configuration tests covering defaults, both key locations, precedence between the keys, and command-line overrides.

GitOrigin-RevId: e7fc9337d5b19d2fd9407e08b8301cee77a11779
This commit is contained in:
Eric Traut authored and copyberry committed 2026-09-01 04:53:57 +00:00
1 parent c7fced56eb
commit d038f3448f
5 files changed
+99 -5

No files matched your search

+81
View File
@@ -1210,6 +1210,7 @@ fn config_toml_deserializes_model_availability_nux() {
notification_settings: TuiNotificationSettings::default(),
animations: true,
show_tooltips: true,
disable_paste_burst: None,
vim_mode_default: false,
raw_output_mode: false,
alternate_screen: AltScreenMode::default(),
@@ -4289,6 +4290,7 @@ fn tui_config_missing_notifications_field_defaults_to_enabled() {
notification_settings: TuiNotificationSettings::default(),
animations: true,
show_tooltips: true,
disable_paste_burst: None,
vim_mode_default: false,
raw_output_mode: false,
alternate_screen: AltScreenMode::Auto,
@@ -4307,6 +4309,85 @@ fn tui_config_missing_notifications_field_defaults_to_enabled() {
);
}
#[tokio::test]
async fn runtime_config_resolves_disable_paste_burst() -> anyhow::Result<()> {
for (toml, expected) in [
("", false),
("disable_paste_burst = true", true),
("disable_paste_burst = true\n[tui]", true),
("[tui]\ndisable_paste_burst = true", true),
(
"disable_paste_burst = true\n[tui]\ndisable_paste_burst = false",
false,
),
(
"disable_paste_burst = false\n[tui]\ndisable_paste_burst = true",
true,
),
] {
let config = Config::load_from_base_config_with_overrides(
toml::from_str(toml)?,
ConfigOverrides::default(),
tempdir()?.abs(),
)
.await?;
assert_eq!(config.disable_paste_burst, expected, "config: {toml}");
}
Ok(())
}
#[tokio::test]
async fn disable_paste_burst_preserves_layering_and_new_key_precedence() -> anyhow::Result<()> {
for (toml, key, value, expected) in [
(
"disable_paste_burst = true",
"disable_paste_burst",
false,
false,
),
(
"disable_paste_burst = true",
"tui.disable_paste_burst",
false,
false,
),
(
"[tui]\ndisable_paste_burst = true",
"tui.disable_paste_burst",
false,
false,
),
(
"[tui]\ndisable_paste_burst = true",
"disable_paste_burst",
false,
true,
),
(
"[tui]\ndisable_paste_burst = false",
"disable_paste_burst",
true,
false,
),
] {
let codex_home = TempDir::new()?;
std::fs::write(codex_home.path().join(CONFIG_TOML_FILE), toml)?;
let config = ConfigBuilder::without_managed_config_for_tests()
.codex_home(codex_home.path().to_path_buf())
.fallback_cwd(Some(codex_home.path().to_path_buf()))
.cli_overrides(vec![(key.to_string(), TomlValue::Boolean(value))])
.build()
.await?;
assert_eq!(
config.disable_paste_burst, expected,
"config: {toml}, override: {key}={value}"
);
}
Ok(())
}
#[tokio::test]
async fn runtime_config_resolves_terminal_resize_reflow_defaults_and_overrides() {
let cfg = Config::load_from_base_config_with_overrides(
+6 -1
View File
@@ -4302,7 +4302,12 @@ impl Config {
active_project,
notices,
check_for_update_on_startup,
disable_paste_burst: cfg.disable_paste_burst.unwrap_or(false),
disable_paste_burst: cfg
.tui
.as_ref()
.and_then(|tui| tui.disable_paste_burst)
.or(cfg.disable_paste_burst)
.unwrap_or(false),
analytics_enabled: cfg.analytics.as_ref().and_then(|a| a.enabled),
feedback_enabled: cfg
.feedback