Initial charset support. This gets a lot of stuff working but still has some critical (but not very real world) limitations.
Implements:
* All charset slots G0 to G3
* All shifting commands to shift into GL and GR
* Single shift commands `ESC N` and `ESC O`
* UTF8, ASCII, British, and DEC Special Graphics character sets
Notably missing:
* A number of rarely used charsets
* NRC handling
* Disabling UTF-8 mode
All the missing stuff is very edge case... but necessary for correctness.
Implements all known formats and event types for mouse reporting. This makes vim, htop, etc. handle mouse events!
Mouse formats:
* X10
* UTF-8
* SGR
* urxvt
* SGR Pixels
Event types:
* X10
* "Normal" - mouse button press/release, including scroll wheel
* "Button" - "Normal" + mouse motion events while a button is pressed
* "Any" - "Normal" + mouse motion events at anytime (even if a button is not pressed)
See: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Mouse-Tracking
Introduces a more robust keybinding system. Previously, keybinds were hardcoded into literal `if key = this and modifier = that`. Now, we have a system for defining keybindings in a human friendly way i.e. `super+c=copy_from_clipboard` and a system internally for looking up and executing keybind actions.
There's still a lot more keybinds we can add support for but now that this system is in place it should be easy to do as we get there. Namely, we need to fully implement this: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-PC-Style-Function-Keys
You can now set custom keybinds by specifying the `--keybind` flag to the program. Example: `ghostty --keybind=super+c=copy_from_clipboard`. You can repeat this flag to specify more keybinds. The full set of actions available is in `src/input/Binding.zig` under `Action`.