Architecture
Vue d’ensemble des modules
leaf est ecrit en Rust (Edition 2021) et organise en ces modules :
| Module | Responsabilite |
|---|---|
main.rs | Point d’entree, options CLI, document initial ou picker |
cli.rs | Definitions des arguments en ligne de commande |
config.rs | Chargement du fichier de configuration et defauts |
app/ | Etat de l’application (document, TOC, recherche, pickers, blocs de code, liens, goto line) |
markdown/ | Parsing, rendu, LaTeX, Mermaid, tableaux, extraction TOC, frontmatter |
render/ | Mise en page TUI avec ratatui (contenu, popups, barre de statut, TOC) |
runtime/ | Boucle d’evenements avec keyboard.rs et mouse.rs selon le mode |
theme/ | Types de themes, presets, resolution et deserialisation TOML |
editor.rs | Detection, classification (terminal vs graphique) et lancement de l’editeur |
completions.rs | Installation des completions shell pour Bash, Zsh, Fish, PowerShell |
clipboard.rs | Ouverture d’URL multi-plateforme et copie clipboard via OSC 52 |
inline.rs | Rendu non-interactif sur stdout (--inline) |
terminal.rs | Cycle de vie du mode terminal brut / ecran alternatif |
update.rs | Mise a jour automatique avec verification SHA256 |
Dependances principales
- ratatui : framework d’interface terminal
- crossterm : gestion multi-plateforme du terminal
- pulldown-cmark : parsing Markdown
- syntect : coloration syntaxique
- mmdflux : rendu de diagrammes Mermaid
- unicodeit : conversion LaTeX vers Unicode
Boucle d’evenements
La boucle d’evenements principale dans runtime/ tourne a environ 20 FPS (ticks de 50ms) :
- Traiter la file d’attente des pickers et lancer les threads de chargement
- Interroger le chargement asynchrone du file picker (
try_recvnon-bloquant) - Verifier les modifications de fichier (mode watch)
- Gerer les entrees clavier/souris selon le mode (help → pickers → goto line → recherche → normal)
- Redessiner l’interface TUI
- Gerer le redimensionnement du terminal (recalcul largeur, reparse Markdown)
Compilation
cargo build --release
cargo test