~taiite/senpai

Finish registration when not using SASL

We wait until after AUTHENTICATE to send CAP END like a good client,
but it needs to be sent when SASL isn't used, too.
Merge MODE messages

Also, fix an issue where mode strings only displayed the first
parameter.
Add support for draft/event-playback

- Refactor formatting lines into a function
- Store event times in the event
- Refactor merging lines into a function
- Always merge lines from the history, now that we will add mergeable
  lines with CHATHISTORY

Successfully tested locally.
Show the current channel topic at the top of the timeline
Only use first line of `password-cmd` output
Tidy things
config: replace YAML with scfg config format

This patch replaces the YAML configuration format with scfg
(https://git.sr.ht/~emersion/scfg).

Additionally, a few things about configuration are cleaned up:
* abbreviated names are expanded (addr -> address, nick -> nickname)
* negative bools switched to positive (no-tls -> tls)
* independent column widths are grouped under the "pane-width"
  directive
* implementation of default configuration values is improved
* password-cmd is executed directly (with scfg field parsing)
  instead of with "sh -c".
* on-highlight is now a file, $XDG_CONFIG_HOME/senpai/highlight by
  default, which can be changed with the on-highlight-path directive
Add support for CHATHISTORY TARGETS
7f70f101 — Duc Nguyen 22 days ago
Also write the last buffer on SIGTERM, SIGINT and SIGHUP
Fix link value, removing debug query string
Fix crash when lone slash is entered

See ticket #79 for more information
Handle tcell error events by closing

This is namely useful when the terminal is closing: these events are
sent, and we should close when that happens (instead of panicking).
OK GitHub: update README.MD
Add support for the /QUERY command

This lets open a buffer to a user without sending a message.
Add support for user buffers
Fix part-ing a channel with duplicate name in other networks

If there are multiple channels with the same name in several networks,
we should part from the one from the correct network.
Authenticate on CAP NEW sasl
Also retrieve username on registration
Eagerly request capabilities

It simplifies the code and make registration use one less roundtrip
Allow App.Close() and App.Run() to be run concurrently
Next