Files
lazymail/README.md
T
2026-09-12 21:15:42 -04:00

82 lines
4.9 KiB
Markdown

# lazymail
A TUI for the git mailing list.
## Status
Early scaffold: a Lazygit-style TUI over in-memory mock data, with a real
on-disk file picker for patch attachments.
- **Browse** — three panes: threads, messages, preview.
- **Participants** — filter threads and messages by participant (`f`), or
narrow to the selected thread's author with one key (`F`).
- **Preview** — shows the message body with any inline diff hidden; press `p`
to open the patch in a wide overlay.
- **Live** — threads and messages auto-refresh on a 2s tick while live (`t`).
- **Sender** — a separate screen for composing and sending a patch series
(`s`), with a yazi-like file picker rooted at `$HOME`.
- **Help** — `?` separates global keybinds from context-local ones.
The real backend will fetch each list's public-inbox archive (e.g.
[`lore.kernel.org/git`](https://lore.kernel.org/git/)) or shell out to
`b4`/`lei`. Sending is not implemented yet.
## Layout
Browse:
```
┌ lazymail · git.vger.kernel.org ● LIVE · ⌕ [email protected] 8 threads ┐
├─ Threads (25%) ────┬─ Messages (35%) ──────────┬─ Preview ─────────────────────┤
│ ▍[PATCH v4 0/5]... │ ▍[PATCH v4 0/5] cover ... │ From: Victoria Dye <vdye@...> │
│ author · date │ From ... · to git@... │ Date: ... │
│ [PATCH v2 0/2]... │ [PATCH v4 1/5] ... │ Subject: [PATCH v4 0/5] ... │
│ ... │ ... │ body (diff hidden) │
│ │ │ patch hidden · press p │
├────────────────────┴───────────────────────────┴───────────────────────────────┤
│ 1-3 focus · Tab cycle · j/k move · / filter · f participants · p patch ... │
└─────────────────────────────────────────────────────────────────────────────────┘
```
Sender (the right column is the file picker, active while the `Patches` field is
focused):
```
┌ lazymail · sender · git.vger.kernel.org ───────────────────────────────────────┐
├─ Compose ──────────────────────────────────┬─ ~/patches/v4 ─────────────────────┤
│ ▸ To: [email protected] │ ../ │
│ Cc: (none) │ ▍0001-refs-reftable.patch 3.2 KB │
│ Subject: [PATCH 0/2] ... │ 0002-tests.patch 1.1 KB │
│ Body: │ README.md │
│ Cover letter stub. │ │
├────────────────────────────────────────────┴────────────────────────────────────┤
│ tab field · ←/→ cursor · j/k picker · enter attach · . hidden · ^S send ... │
└─────────────────────────────────────────────────────────────────────────────────┘
```
## Run
```sh
cargo run
```
Keys:
- **Browse**: `1`/`2`/`3` or `Tab`/`h`/`l` focus panes · `j`/`k` or arrows move ·
`enter` drill into the next pane (threads → messages → preview) · `PgUp`/`PgDn`
scroll the preview · `/` text filter · `f` participant filter · `F` filter by the
selected thread's author · `c` clear participant filter · `p` open the patch
overlay (Preview focused) · `t` toggle live refresh · `r` refresh ·
`L` mailing lists · `s` sender · `?` help · `q` quit.
- **Participants**: type to search · `j`/`k` move · `enter` apply · `esc` close.
- **Patch overlay**: `j`/`k` scroll · `esc`/`p`/`enter` close.
- **Lists**: `j`/`k` move · `enter` switch list · `esc` close.
- **Sender**: `Tab` cycle fields · arrows/`Home`/`End` move the cursor ·
`Backspace`/`Delete` edit · in the `Patches` field `j`/`k` move the picker,
`l`/`Right`/`enter` open a directory or attach a file, `h`/`Left`/`Backspace`
go up, `.` toggle hidden files, `J`/`K` move the attached-patch selection,
`a` add a stub patch, `d` remove ·
`Ctrl+S` send (stub) · `esc` back.
- **Help**: `?` shows global bindings first, then the bindings local to the
current screen, mode, and focused pane.