A minimal email TUI where you read with Markdown and write in Neovim. neomd.ssp.sh/docs
email markdown neovim tui
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

use d/u for navigation up/down and change others accordingly

sspaeti 37b22c2b ce9c703b

+6 -6
+2 -2
docs/keybindings.md
··· 73 73 | Key | Action | 74 74 |-----|--------| 75 75 | `m` | mark / unmark email + advance cursor | 76 - | `U` | clear all marks | 77 - | `u` | undo last move or delete (reverses x, A, M* — not screener actions) | 76 + | `ctrl+u` | clear all marks | 77 + | `U` | undo last move or delete (reverses x, A, M* — not screener actions) | 78 78 | `X (Trash only)` | permanently delete marked or cursor email(s) — no undo | 79 79 80 80
+2 -2
internal/ui/keys.go
··· 57 57 }}, 58 58 {"Multi-select", [][2]string{ 59 59 {"m", "mark / unmark email + advance cursor"}, 60 - {"U", "clear all marks"}, 61 - {"u", "undo last move or delete (reverses x, A, M* — not screener actions)"}, 60 + {"ctrl+u", "clear all marks"}, 61 + {"U", "undo last move or delete (reverses x, A, M* — not screener actions)"}, 62 62 {"X (Trash only)", "permanently delete marked or cursor email(s) — no undo"}, 63 63 }}, 64 64 {"Leader Key Mappings (space prefix)", [][2]string{
+2 -2
internal/ui/model.go
··· 1412 1412 m.loading = true 1413 1413 return m, tea.Batch(m.spinner.Tick, m.deleteAllExecCmd(m.cfg.Folders.Trash, uids)) 1414 1414 1415 - case "U": // clear all marks 1415 + case "ctrl+u": // clear all marks 1416 1416 m.markedUIDs = make(map[uint32]bool) 1417 1417 return m, m.applyFilter() 1418 1418 1419 - case "u": // undo last move/delete 1419 + case "U": // undo last move/delete 1420 1420 if len(m.undoStack) == 0 { 1421 1421 m.status = "Nothing to undo." 1422 1422 return m, nil