9140 Commits

Author SHA1 Message Date
Mitchell Hashimoto
c377e19bd0 pkg/harfbuzz: shape 2022-08-28 12:12:41 -07:00
Mitchell Hashimoto
1f2d2e926c pkg/harfbuzz: buffer get glyph positions and info 2022-08-28 12:05:00 -07:00
Mitchell Hashimoto
0b4344693a pkg/harfbuzz: buffer set direction, script, and language 2022-08-28 11:54:38 -07:00
Mitchell Hashimoto
3c077ee19b pkg/harfbuzz: buffer init, add 2022-08-28 11:42:57 -07:00
Mitchell Hashimoto
5d42e2711f pkg/harfbuzz: face, font, freetype 2022-08-28 11:21:35 -07:00
Mitchell Hashimoto
3d68c72912 pkg/harfbuzz: some blob APIs 2022-08-28 10:54:42 -07:00
Mitchell Hashimoto
44dfe54fe8 output harfbuzz version on startup 2022-08-28 10:26:49 -07:00
Mitchell Hashimoto
755760a79e pkg/harfbuzz: some functions and tests 2022-08-28 10:24:07 -07:00
Mitchell Hashimoto
367aba62c4 Add harfbuzz build (not used yet) 2022-08-28 10:09:39 -07:00
Mitchell Hashimoto
8ff98446a9 sgr parsing bright colors now sets color properly 2022-08-27 10:55:10 -07:00
Mitchell Hashimoto
1609c8e775 hook up scroll down and up CSI codes (SD/SU) 2022-08-27 10:46:11 -07:00
Mitchell Hashimoto
cd74902f89 Charsets
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.
2022-08-27 10:33:38 -07:00
Mitchell Hashimoto
1be4626726 update TODO 2022-08-27 10:29:52 -07:00
Mitchell Hashimoto
312d589a2e implement locking shift 2022-08-27 10:20:54 -07:00
Mitchell Hashimoto
4a247e3bb8 single shift 2/3 2022-08-27 10:16:21 -07:00
Mitchell Hashimoto
bee82d58dc Shift Out/Shift In (invoke charset into GL) 2022-08-27 10:08:01 -07:00
Mitchell Hashimoto
7626f194e9 basic charset mapping, support configuration, print tests 2022-08-27 09:42:05 -07:00
Mitchell Hashimoto
75b63f3df3 british charset 2022-08-27 08:41:06 -07:00
Mitchell Hashimoto
40ca2a69fb starting charset tables 2022-08-26 20:00:25 -07:00
Mitchell Hashimoto
1f4572b3d2 update TODO 2022-08-26 15:20:28 -07:00
Mitchell Hashimoto
50409271a3 Mouse Reporting #8
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
2022-08-26 15:10:14 -07:00
Mitchell Hashimoto
ff460887b5 fix miscompilation around sgr mode 2022-08-26 15:07:22 -07:00
Mitchell Hashimoto
fe6ba02709 sgr pixels mouse report format 2022-08-26 14:59:44 -07:00
Mitchell Hashimoto
1039ad76bf urxvt reporting format 2022-08-26 14:57:35 -07:00
Mitchell Hashimoto
f551c0ef66 SGR reporting 2022-08-26 14:55:18 -07:00
Mitchell Hashimoto
b46fe522d5 UTF-8 mouse reporting 2022-08-26 14:42:20 -07:00
Mitchell Hashimoto
ab305add6c any event mouse tracking 2022-08-26 14:26:42 -07:00
Mitchell Hashimoto
bd5dd69538 normal event (motion) mouse tracking 2022-08-26 14:17:42 -07:00
Mitchell Hashimoto
9aa5378ffa Track/cache button state and mods state 2022-08-26 13:55:24 -07:00
Mitchell Hashimoto
a4bab6592d normal events can now track scroll 2022-08-26 12:25:33 -07:00
Mitchell Hashimoto
3096b32f13 mouse normal events in x10 format 2022-08-26 12:17:58 -07:00
Mitchell Hashimoto
93f45af41b X10 click-only mouse reporting 2022-08-26 12:04:54 -07:00
Mitchell Hashimoto
43b7727cf8 change u1 in mode to bool 2022-08-26 11:27:44 -07:00
Mitchell Hashimoto
f9274bdafc define mouse events, all TODO 2022-08-26 11:14:34 -07:00
Mitchell Hashimoto
dc6fc5c1c3 implement faint colors (SGR 2) 2022-08-26 11:13:34 -07:00
Mitchell Hashimoto
65df657b4e make cell attrs bools instead of u1s 2022-08-26 11:09:48 -07:00
Mitchell Hashimoto
469515c02b bind function keys (F1 to F12) 2022-08-26 10:27:41 -07:00
Mitchell Hashimoto
4ffd5cd994 SGR 39/49 (reset fg/bg, respectively) 2022-08-26 09:56:17 -07:00
Mitchell Hashimoto
a1130095f8 note charsets are TODO 2022-08-26 09:27:51 -07:00
Mitchell Hashimoto
551de6eda4 update TODO 2022-08-25 16:45:39 -07:00
Mitchell Hashimoto
c7a5045bd4 missed comment 2022-08-25 16:24:20 -07:00
Mitchell Hashimoto
84b75967a2 scale the cursor position from screen coords to pixels 2022-08-25 16:09:54 -07:00
Mitchell Hashimoto
a9b34b43c5 code for getting physical DPI
we don't need it but I want to put it in Git history
2022-08-25 15:53:29 -07:00
Mitchell Hashimoto
9601920b4d font size is now in font points, determine size based on window DPI 2022-08-25 12:29:28 -07:00
Mitchell Hashimoto
46bbab5d10 ignore zero-width characters for now 2022-08-24 13:48:22 -07:00
Mitchell Hashimoto
d0f888daae update TODO, we fixed atlas resizing 2022-08-24 12:41:51 -07:00
Mitchell Hashimoto
f4b1783c1f atlas tracks modified/resize state, reallocate on GPU if resized 2022-08-24 12:41:31 -07:00
Mitchell Hashimoto
d8248ef0ae fix data corruption on growing the Atlas 2022-08-24 12:14:02 -07:00
Mitchell Hashimoto
4751e3185d update TODO 2022-08-24 11:32:47 -07:00
Mitchell Hashimoto
76bce8893c Keybindings, support arrow keys, home/end, page up/down
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`.
2022-08-24 11:24:30 -07:00