feat(config): P3 config batch — group 1 (clean config + plumbing)
Config plumbing for the whole config batch (HtmlConfig + WikiConfig fields, RawWiki deserialization, From/defaults) plus these behaviors: - rss_name / rss_max_items: HtmlConfig fields (wired into write_rss in the RSS group). - toc_link_format: build_toc_text emits [[#anchor]] (no description) for 1, [[#anchor|title]] for 0. - generated_links_caption: build_links_text emits [[page|FirstHeading]] from a page->heading map (ops::page_captions) when enabled. - table_reduce_last_col: column_widths clamps the last column to width 1 when set; threaded through table_align_edit/table_move_column_edit + commands. - color_dic now ships a populated default palette (red/green/blue/...). - commentstring aligned to upstream's no-space `%%%s`. - auto_chdir (default off): :lcd into the owning wiki root on buffer enter; both clients (ftplugin.lua setup_auto_chdir + Vim NuwikiAutoChdir augroup), with config.wiki_root_for / nuwiki#commands#wiki_root_for resolvers. Also seeded HtmlConfig fields for later groups (valid_html_tags, list/text_ignore_newline, emoji_enable, user_htmls, color_tag_template) and WikiConfig (create_link, dir_link, bullet_types, cycle_bullets). Tests: toc_link_format, generated_links_caption, table_reduce_last_col, config defaults + JSON round-trip for every new key. Full rust suite + both keymap harnesses green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -295,6 +295,63 @@ fn defaults_carry_vimwiki_per_wiki_keys() {
|
||||
// HTML section numbering is off by default (vimwiki's `0`).
|
||||
assert_eq!(cfg.html.html_header_numbering, 0);
|
||||
assert_eq!(cfg.html.html_header_numbering_sym, "");
|
||||
// New config defaults match upstream.
|
||||
assert!(cfg.create_link);
|
||||
assert_eq!(cfg.dir_link, "");
|
||||
assert_eq!(cfg.bullet_types, vec!["-", "*", "#"]);
|
||||
assert!(!cfg.cycle_bullets);
|
||||
assert!(!cfg.generated_links_caption);
|
||||
assert_eq!(cfg.toc_link_format, 0);
|
||||
assert!(!cfg.table_reduce_last_col);
|
||||
assert_eq!(cfg.html.rss_name, "rss.xml");
|
||||
assert_eq!(cfg.html.rss_max_items, 10);
|
||||
assert!(cfg.html.list_ignore_newline);
|
||||
assert!(cfg.html.text_ignore_newline);
|
||||
assert!(cfg.html.emoji_enable);
|
||||
assert!(cfg.html.user_htmls.is_empty());
|
||||
assert!(cfg.html.valid_html_tags.contains(&"sub".to_string()));
|
||||
// color_dic ships a populated palette (vimwiki seeds one).
|
||||
assert!(cfg.html.color_dic.contains_key("red"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn raw_wiki_parses_config_batch_keys() {
|
||||
let cfg = config_from_json(serde_json::json!({
|
||||
"wikis": [{
|
||||
"root": "/tmp/w",
|
||||
"create_link": false,
|
||||
"dir_link": "index",
|
||||
"bullet_types": ["+", "-"],
|
||||
"cycle_bullets": true,
|
||||
"generated_links_caption": 1,
|
||||
"toc_link_format": 1,
|
||||
"table_reduce_last_col": true,
|
||||
"rss_name": "feed.xml",
|
||||
"rss_max_items": 5,
|
||||
"valid_html_tags": "b,mark",
|
||||
"list_ignore_newline": 0,
|
||||
"text_ignore_newline": false,
|
||||
"emoji_enable": 0,
|
||||
"user_htmls": ["404.html"],
|
||||
"color_tag_template": "<u>__CONTENT__</u>",
|
||||
}],
|
||||
}));
|
||||
let w = &cfg.wikis[0];
|
||||
assert!(!w.create_link);
|
||||
assert_eq!(w.dir_link, "index");
|
||||
assert_eq!(w.bullet_types, vec!["+", "-"]);
|
||||
assert!(w.cycle_bullets);
|
||||
assert!(w.generated_links_caption);
|
||||
assert_eq!(w.toc_link_format, 1);
|
||||
assert!(w.table_reduce_last_col);
|
||||
assert_eq!(w.html.rss_name, "feed.xml");
|
||||
assert_eq!(w.html.rss_max_items, 5);
|
||||
assert_eq!(w.html.valid_html_tags, vec!["b", "mark"]);
|
||||
assert!(!w.html.list_ignore_newline);
|
||||
assert!(!w.html.text_ignore_newline);
|
||||
assert!(!w.html.emoji_enable);
|
||||
assert_eq!(w.html.user_htmls, vec!["404.html"]);
|
||||
assert_eq!(w.html.color_tag_template, "<u>__CONTENT__</u>");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user