| 04-bbs-polish-and-live-content |
02 |
ui |
| walkdir |
| ratatui |
| rust |
| directory-listing |
| virtual-page |
| tab-cycling |
| navigation-history |
|
| phase |
provides |
| 04-01 |
walkdir = 2.5 in Cargo.toml, navigation history (navigate_back/forward), link_records + Tab-cycling, splash prepend pattern |
|
|
| resolve_wiki_link() returns PathBuf::from('__directory__') for case-insensitive 'Directory' wiki-link |
| DirEntry struct and list_vault_files() in vault.rs using WalkDir::new().sort_by_file_name() |
| navigate_to_directory() method builds tree view via build_directory_lines() and pushes history entry |
| build_directory_lines() emits yellow-bold directory entries and cyan bracketed file links with LinkRecord |
| navigate_back/forward handle __directory__ sentinel — regenerate listing fresh each visit |
| handle_resize() skips re-render for __directory__ pages (fixed-width text, no markdown) |
|
|
| added |
patterns |
|
|
| Virtual page pattern: current_path == '__directory__' sentinel distinguishes virtual pages from real vault documents |
| Directory builder pattern: build_directory_lines() returns (Vec<Line<'static>>, Vec<LinkRecord>) — same shape as render_markdown output |
| Always-fresh pattern: navigate_back/forward call list_vault_files() again on __directory__ — never stale cache |
| Resize guard pattern: early return in handle_resize() for virtual pages avoids crash on None raw_content |
|
|
| created |
modified |
|
|
| src/vault.rs — resolve_wiki_link() Directory sentinel, DirEntry struct, list_vault_files() with WalkDir |
| src/app.rs — navigate_to_directory(), build_directory_lines(), follow_selected_link() sentinel routing, navigate_back/forward __directory__ branches, handle_resize() guard |
|
|
| resolve_wiki_link() sentinel check placed BEFORE rfind('/') split — prevents 'directory' being misinterpreted as a filename |
| build_directory_lines() computes line_index as lines.len() before push — matches renderer pattern for Tab-cycling correctness |
| navigate_back/forward use if/else-if chain (not load_document for __directory__) — avoids spurious Missing document state |
| handle_resize() returns early for __directory__ (raw_content is None for virtual pages) — prevents stale-content confusion |
| link_records for directory entries use is_wiki: false with direct vault_path strings — navigate_to() handles them without resolve step |
|
| Virtual page sentinel: __directory__ string as current_path distinguishes virtual page from real file throughout app |
| Tab-cycling for directory entries: same LinkRecord model as rendered markdown — no special-case in key handling |
| Directory listing always regenerated: list_vault_files() called on every visit (forward/back/direct) — always reflects current vault state |
|
|
8min |
2026-03-01 |