Longrange Forecast #4054
Replies: 8 comments
-
View SeparationThis is the big one. The goal is to separate the GUI from the data. Shared Email Arrays
When asked to check for new mail, the Maildir backend scans the A good solution is to create two separate arrays of The The When new mail arrives, the backend sends a notification with the exact details, The GUI can then update itself, inserting the new There's a WIP for this in [flatcap/views] See also: Index Stability, Maildir Refactor View Objects
The other factor is to ensure that the pointers go in the right direction: from View to Data. |
Beta Was this translation helpful? Give feedback.
-
Filesystem MonitoringAdd system-agnostic filesystem monitoring. Currently, NeoMutt has some inotify support. The code in /// Set to true when a monitored file has changed
bool MonitorFilesChanged = false;
/// Set to true when the current mailbox has changed
bool MonitorContextChanged = false; When There's a WIP for When a Maildir |
Beta Was this translation helpful? Give feedback.
-
Maildir RefactorRefactor Maildir so that it can send fine-grained notifications. When asked to check for new mail, Maildir needs to do quite a lot of work. It needs to check for:
The current code doesn't keep track of which The ideal situation would be a single notification containing three lists of { NT_MAILBOX, { NewEmails[], ChangedEmails[], DeletedEmails[] } } See also: Filesystem Monitoring The IMAP backend will also need changes, but they should be simpler |
Beta Was this translation helpful? Give feedback.
-
External Event LoopCurrently, every Dialog has its own event loop, usually a small Some Dialogs, like the Index and Pager, are much more complicated. See also: Pager Repainting, Index Stability The ideal state would be to have one event loop, outside of the Dialogs. Moving the event loop would make other things possible. Reorganise the Function DispatchersCurrently, the Pager supports four function dispatchers: Pager, Index, Sidebar, Global. An external event loop, however would try to find a provider for a keystroke. Keystrokes for Pager functions would be handled by the Pager Window. The Pager would no longer need to know about the Index or Sidebar. See also: Key Handling Refactor Moving the Focus Between WindowsIf the Window handles the functions, then we could now allow the focus to move. Current state: Index displayed with the Sidebar visible. User hits: The first function moves the focus to the Sidebar, meaning that |
Beta Was this translation helpful? Give feedback.
-
Pager RepaintingAll Windows should implement:
The Pager doesn't implement them yet. This is a task that I've been putting off for years! |
Beta Was this translation helpful? Give feedback.
-
Index StabilityThe Index is the heart of NeoMutt. At various times, we've had trouble with:
The solution is to add some more state info to the See also: Maildir Refactor |
Beta Was this translation helpful? Give feedback.
-
New Mail SimplificationChecking for new mail is too complicated. The user simply wants to be notified when there's new mail. Maildir's slow and thorough check is expensive. If we can get Filesystem Monitoring working correctly, then the user would almost never have to wait. See also: Filesystem Monitoring, Maildir Refactor |
Beta Was this translation helpful? Give feedback.
-
Key Handling RefactorWhen the user presses a key,
The function has several issues:
A simple solution for the global problems, might be for a Dialog to pass in all the keybindings that it supports. The latter two problems need a more creative solution. Some sample keybinding workflows: See also: External Event Loop |
Beta Was this translation helpful? Give feedback.
-
These are the long-term large refactorings that I'd like to see.
Separate the GUI from the Data
Inotify, Kqueue, libuv
Fine-grained notifications
Dialog is a Window+Data, acted on
Split calculation from painting
Visually stable
One slow check function, one config variable
Factor out global key-function lookups
Beta Was this translation helpful? Give feedback.
All reactions