···7171## Usage
72727373```bash
7474-# Preview a file
7474+# Open a Markdown file
7575leaf TESTING.md
76767777# Watch mode — reloads automatically on save
7878leaf --watch TESTING.md
7979leaf -w TESTING.md
80808181+# Open the fuzzy Markdown picker
8282+leaf
8383+8484+# Open the classic directory browser picker
8585+leaf --picker
8686+8787+# Open the fuzzy Markdown picker, then watch the selected file
8888+leaf -w
8989+9090+# Open the classic directory browser picker, then watch the selected file
9191+leaf -w --picker
9292+8193# Open a dash-prefixed filename
8294leaf -- -notes.md
83958484-# Pipe from stdin
9696+# Stream Markdown from another CLI tool
8597claude "explain Rust lifetimes" | leaf
9898+9999+# Preview a local file through stdin
86100cat TESTING.md | leaf
8787-8888-# Open the fuzzy Markdown picker in the current directory and subdirectories
8989-leaf
9090-9191-# Open the classic directory browser picker
9292-leaf --picker
9310194102```
95103···115123## Features
116124117125- ✅ **Watch mode** `--watch` / `-w` — reloads every 250ms, with `⟳ reloaded` flash feedback
126126+- ✅ `leaf --watch` can start from the picker and begin watching after file selection
118127- ✅ Syntax highlighting with common language aliases like `py`, `cpp`, `json`, `toml`, `ps1`, and `dockerfile`
119128- ✅ Unicode box-drawing tables with left / center / right alignment
120129- ✅ TOC sidebar with active section tracking and two-level navigation
+3-3
src/cli.rs
···1515}
16161717pub(crate) fn usage_text() -> &'static str {
1818- "Usage: leaf [--watch] [--theme arctic|forest|ocean|solarized-dark] [file.md]\n leaf --picker\n leaf --update\n echo '# Hello' | leaf"
1818+ "Usage: leaf [--watch] [--theme arctic|forest|ocean|solarized-dark] [file.md]\n leaf [--watch] --picker\n leaf --update\n echo '# Hello' | leaf"
1919}
20202121pub(crate) fn version_text() -> &'static str {
···8383 }
84848585 if options.picker {
8686- let has_non_picker_flags = options.watch || options.file_arg.is_some();
8686+ let has_non_picker_flags = options.file_arg.is_some();
8787 if has_non_picker_flags {
8888- anyhow::bail!("--picker cannot be combined with --watch or a file path");
8888+ anyhow::bail!("--picker cannot be combined with a file path");
8989 }
9090 }
9191
+2-2
src/render.rs
···272272 &["enter confirm", "esc cancel"]
273273 } else if app.is_file_picker_open() {
274274 if app.is_fuzzy_file_picker() {
275275- &["j/k move", "enter open", "backspace delete", "ctrl+c quit"]
275275+ &["↑/↓ move", "enter open", "backspace delete", "ctrl+c quit"]
276276 } else {
277277 &["j/k move", "enter open", "backspace up", "ctrl+c quit"]
278278 }
···590590 lines.push(Line::from(""));
591591 lines.push(Line::from(vec![Span::styled(
592592 if app.is_fuzzy_file_picker() {
593593- "enter open • type filter • esc clear • ctrl+c quit"
593593+ "↑/↓ move • enter open • type filter • esc clear • ctrl+c quit"
594594 } else {
595595 "enter open • backspace up • ctrl+c quit"
596596 },