When launching cove, the euph_rooms hash map would be empty until
interacting with a room for the first time. This led to the unseen
message count only being displayed after interacting with a room. Now,
missing rooms are inserted into euph_rooms during stabilization.
In order to avoid collisions with ctrl+e, we need a new binding. In
bash/readline, ctrl+x is used as a sort of leader key to initiate
multi-key bindings. I don't think I'll implement multi-key combinations
any time soon, so now ctrl+x stands for 'edit in eXternal editor'.
When composing a new thread and writing more than one line, the chat
wouldn't scroll to make the editor cursor visible again. My original
guess for when the scrolling code should run was a bit too restrictive.
As long as the modifier doesn't get swallowed by the terminal, the
editor will insert a newline at the current cursor location. My own
terminal emulator swallows ctrl and shift but not alt, so alt+enter
works for me.
When pressing ctrl+y while cursor = Cursor::Bottom, the screen would
not scroll. Instead, the cursor would only jump to the lowest message on
the screen. This was caused because the blocks were re-layouted after
scrolling, starting from the Cursor::Bottom, thus resetting the scroll
to the bottom of the screen.
When sitting at the bottom of a room with cursor = Cursor::Bottom, a
rerender would make the cursor jump to the lowest visible message. This
of course should only happen when the screen is scrolled, not on almost
every rerender.