Architecture

Vue d’ensemble des modules

leaf est ecrit en Rust (Edition 2021) et organise en ces modules :

ModuleResponsabilite
main.rsPoint d’entree, options CLI, document initial ou picker
cli.rsDefinitions des arguments en ligne de commande
config.rsChargement 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.rsDetection, classification (terminal vs graphique) et lancement de l’editeur
completions.rsInstallation des completions shell pour Bash, Zsh, Fish, PowerShell
clipboard.rsOuverture d’URL multi-plateforme et copie clipboard via OSC 52
inline.rsRendu non-interactif sur stdout (--inline)
terminal.rsCycle de vie du mode terminal brut / ecran alternatif
update.rsMise 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) :

  1. Traiter la file d’attente des pickers et lancer les threads de chargement
  2. Interroger le chargement asynchrone du file picker (try_recv non-bloquant)
  3. Verifier les modifications de fichier (mode watch)
  4. Gerer les entrees clavier/souris selon le mode (help → pickers → goto line → recherche → normal)
  5. Redessiner l’interface TUI
  6. Gerer le redimensionnement du terminal (recalcul largeur, reparse Markdown)

Compilation

cargo build --release
cargo test