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.

update speed of GMAIL is so SLOW!!

sspaeti 03dc0ccf 0950d22b

+1 -14
+1 -1
README.md
··· 15 15 16 16 With the additional **Feed** and **Papertrail**, two additional features from HEY, you can read newsletters (just hit F) on them automatically in their separate tab, or move all your receipts into the Papertrail. Once you mark them as feed or papertrail, they will moved there automatically going forward. So you decide whether to read emails or news by jumping to different tabs. 17 17 18 - >**Note on Speed**: Startup: fetches headers via IMAP (fetchFolderCmd) — this takes a network round-trip (maybe 0.5-2s depending on server/connection), after that everything is in-memory and the navigation is instant. Applying IMAP calls such as switching folders and opening emails are typically around 100-500ms on a good connection. 18 + >**Note on Speed**: Startup fetches headers via IMAP — this takes a network round-trip (0.5-2s depending on server), after that everything is in-memory and navigation is instant. IMAP calls (switching folders, opening emails) are typically ~50-150ms on dedicated providers like Hostpoint, Fastmail, or HEY. **Gmail's IMAP is significantly slower** (~200-500ms per command) due to its label-to-folder translation layer — expect 1-2s for folder switches. This is a Gmail limitation, not neomd. For the fastest experience, use a dedicated email provider. 19 19 20 20 ## Screenshots 21 21
-13
internal/imap/client.go
··· 126 126 _ = c.conn.Close() 127 127 c.conn = nil 128 128 c.selectedMailbox = "" 129 - // Retry once after reconnect for transient network failures. 130 - if reconnErr := c.connect(ctx); reconnErr != nil { 131 - return err // return original error 132 - } 133 - if retryErr := fn(c.conn); retryErr != nil { 134 - if isNetErr(retryErr) { 135 - _ = c.conn.Close() 136 - c.conn = nil 137 - c.selectedMailbox = "" 138 - } 139 - return retryErr 140 - } 141 - return nil // retry succeeded 142 129 } 143 130 return err 144 131 }