82 lines
4.9 KiB
Markdown
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.
|