v0.4.3 : persistance du theme actif choisi
release / linux (push) Successful in 13m24s
release / windows (push) Canceled after 0s
release / macos (push) Canceled after 0s

- le REPL 'theme <name>' applique ET sauvegarde le theme (settings.theme dans le fichier de config actif, cree s'il manque) via persist_setting
- correction racine : config::merge ignorait settings.theme - la valeur persistee n etait jamais relue au chargement, le theme par defaut etait toujours reapplique apres un redemarrage
- 'am --theme <name>' reste un one-shot ; config set settings.theme <nom> fonctionne egalement
- aides mises a jour (banniere, help theme)
- tests de persistance + relecture au demarrage, man pages regenerees, version 0.4.3
This commit is contained in:
2026-08-17 15:23:28 -04:00
parent 91253b79c5
commit 53893f2967
10 changed files with 166 additions and 25 deletions
+27
View File
@@ -533,6 +533,9 @@ pub fn merge(base: &mut Config, overlay: Config) {
if o.self_update_base_url.is_some() {
s.self_update_base_url = o.self_update_base_url;
}
if o.theme.is_some() {
s.theme = o.theme;
}
for (k, v) in o.hooks {
s.hooks.insert(k, v);
}
@@ -764,6 +767,30 @@ agents:
assert!(problems.iter().any(|p| p.contains("'run' is required")));
}
#[test]
fn merge_keeps_the_user_theme_setting() {
let mut base: Config = serde_yaml::from_str(DEFAULT_CONFIG).unwrap();
let overlay: Config = serde_yaml::from_str(
r#"
version: "1.0"
settings:
theme: ocean
agents: []
"#,
)
.unwrap();
merge(&mut base, overlay);
assert_eq!(base.settings.theme.as_deref(), Some("ocean"));
// The embedded default catalog defines no theme: an overlay without
// one leaves the merged setting untouched.
let mut base: Config = serde_yaml::from_str(DEFAULT_CONFIG).unwrap();
let overlay: Config = serde_yaml::from_str("version: \"1.0\"
agents: []
").unwrap();
merge(&mut base, overlay);
assert_eq!(base.settings.theme, None);
}
#[test]
fn one_or_many_parses_both() {
let a: OneOrMany = serde_yaml::from_str("\"make build\"").unwrap();