628 Commits

Author SHA1 Message Date
Tim Culverhouse
66875206bb terminal: move charset to screen
Each screen (primary and alternate) retains the state of the current
charset when DECSC (save cursor) is called. Move the CharsetState into
the screen to enable saving the state with each screen.

Add a test for charset state on screen change
2023-09-25 10:43:39 -05:00
Tim Culverhouse
3d35ae1869 terminal: save charset state and DECOM mode when saving cursor
The charset state and DECOM mode should be saved along with the cursor
state.

Reference: https://vt100.net/docs/vt510-rm/DECSC.html
Fixes: alacritty/saved_cursor
2023-09-24 21:56:48 -05:00
Tim Culverhouse
17ee5c7fd5 terminal: insert a blank cell in insertBlanks
The name sounds obvious, but nothing ever is with ANSI escapes. ICH
(Insert Blank Characters) should insert a cell with no attributes or
colors set.

Remove comment about inserting a space for tests: the tests pass with a
blank cell inserted.

Remove comment about inserted cells having current SGR.

Update tests to check for attribute of inserted cell.
2023-09-24 21:56:48 -05:00
Tim Culverhouse
5f87e09d61 terminal: make deleteChars insert blank cells
When DCH (deleteChars) deletes cells from a line, cells are inserted
from the right. The new cells should not have the current pen style, and
should instead be an empty cell.

Add check for this in the existing test.

Fixes: alacritty/deccolm_reset
2023-09-24 19:12:38 -05:00
Mitchell Hashimoto
056de47b76 terminal: make switch true/false more idiomatic zig 2023-09-22 23:12:46 -07:00
Tim Culverhouse
2051e6bb3a terminal: ensure 'has_bg' is set in eraseDisplay
Add a check for 'has_bg', and if it is set retain the background color.
If it isn't set, we are safe to set the pen to it's default.

Fixes: alacritty/colored_reset
2023-09-23 00:37:59 -05:00
Tim Culverhouse
c5df73b1da terminal: erase pen, except bg, in eraseDisplay
When erasing the display, all attributes of the pen must be cleared
_except_ for the background. Add unit tests for erasing the display in
all scenarios.

Fixes: alacritty/clear_underline
2023-09-22 21:14:36 -05:00
Tim Culverhouse
2784f25b5b terminal: reset cursor state before eraseDisplay in fullReset
fullReset resets the state of the terminal. This method calls
eraseDisplay, which depends on the state of the cursor pen for setting
the cell styles when it erases. Reset the state of the cursor prior to
calling eraseDisplay to ensure a clean reset.

Fixes: alacritty/alt_reset test
2023-09-22 20:11:04 -05:00
Mitchell Hashimoto
2889271ee0 Merge pull request #507 from rockorager/osc_utf8
osc: allow 0x20-0xFF in osc_put
2023-09-21 09:58:51 -07:00
Mitchell Hashimoto
92e98d34b5 terminal: CSI E and F 2023-09-21 08:21:32 -07:00
Tim Culverhouse
5e800df277 osc: allow 0x20-0xFF in osc_put
The osc_string state of the parser limited accepted bytes to 0x7F. When
parsing a utf-8 encoded string as part of an OSC string, the parser
would encounter an error and abort the OSC parsing, allowing any
remaining bytes to be leaked (possibly) as printable characters to the
terminal window.

Allow any byte in the range 0x20 - 0xFF to be accepted by osc_put. Add
test cases which conflict with the 'anywhere' transitions (IE the utf8
sequence includes C1 control codes which might transition to another
state).
2023-09-21 03:08:41 -05:00
Tim Culverhouse
fbe030d85a terminal: respond to XTVERSION query
XTVERSION (CSI > 0 q) is used by some libraries to identify the terminal
+ version. Respond to this query with `ghostty {version_string}`. There
is no formal format for this response. A roundup of a few tested
terminals show two primary formats. This patch opts to save one byte and
use the `name SP version` semantics.

foot: foot(version)
xterm: XTerm(version)
contour: contour version
wezterm: wezterm version

Reference: https://github.com/dankamongmen/notcurses/blob/master/TERMINALS.md#notes-for-terminal-authors
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
2023-09-20 19:06:28 -05:00
Mitchell Hashimoto
eeba3057f9 terminal: CSI G must reset pending wrap state
Fixes #479
2023-09-18 22:14:04 -07:00
Mitchell Hashimoto
063a66ea6c terminal: allow mixed semicolon/colon CSI m commands
Fixes #487
2023-09-18 21:45:19 -07:00
Mitchell Hashimoto
36c9d607b2 core: do not send repeat mouse events if cell didn't change 2023-09-17 11:49:25 -07:00
Mitchell Hashimoto
ab4acf0d00 core: send mouse motion events if motion tracking and button pressed 2023-09-17 11:45:53 -07:00
Mitchell Hashimoto
8694d29bd0 terminal: ignore CSI S with intermediates 2023-09-17 09:39:03 -07:00
Mitchell Hashimoto
ad23a7a2c9 terminal/kitty-gfx: erase all should preserve storage limit size 2023-09-17 09:27:01 -07:00
Mitchell Hashimoto
19ef4a22a9 terminal: stylistic changes for OSC terminators, 10/11 params 2023-09-14 13:12:41 -07:00
cryptocode
dc14ca86ca Review updates:
* Change state names to more human readable query_default_fg/bg
* Single-line state prongs
* String terminator is not an enum
* Removed `endWithStringTerminator` and added nullabe arg to `end`
* Fixed a color reporting bug, fg/bg wasn't correctly picked
2023-09-14 21:46:23 +02:00
cryptocode
a3696a9185 Implement OSC 10 and OSC 11 default color queries
These OSC commands report the default foreground and background colors.

Most terminals return the RGB components scaled up to 16-bit components, because some
legacy software are unable to read 8-bit components. The PR follows this conventions.

iTerm2 allow 8-bit reporting through a config option, and a similar option is
added here. In addition to picking between scaled and unscaled reporting, the user
can also turn off OSC 10/11 replies altogether.

Scaling is essentially c / 1 * 65535, where c is the 8-bit component, and reporting
is left-padded with zeros if necessary. This format appears to stem from the XParseColor
format.
2023-09-14 21:41:40 +02:00
Mitchell Hashimoto
cb2931cb27 rename cursor shape to mouse shape for OSC 22 2023-09-14 11:12:17 -07:00
Mitchell Hashimoto
3356146bb4 macos: support cursor style 2023-09-14 10:40:40 -07:00
Mitchell Hashimoto
7734bab8c4 terminal: cursor shape parsing, hook up to apprt callback 2023-09-14 10:12:38 -07:00
Mitchell Hashimoto
ab8569b4bd terminal: parse OSC 22 2023-09-14 09:36:23 -07:00
Mitchell Hashimoto
24af24a086 terminal: CSI q requires a space intermediate 2023-09-10 22:01:17 -07:00
Mitchell Hashimoto
d9cfd00e9f Big Cursor State Refactor
This makes a few major changes:

  - cursor style on terminal is single source of stylistic truth
  - cursor style is split between style and style request
  - cursor blinking is handled by the renderer thread
  - cursor style/visibility is no longer stored as persistent state on
    renderers
  - cursor style computation is extracted to be shared by all renderers
  - mode 12 "cursor_blinking" is now source of truth on whether blinking
    is enabled or not
  - CSI q and mode 12 are synced like xterm
2023-09-09 20:19:37 -07:00
Mitchell Hashimoto
f8335c10d8 terminal: disable noisy logs 2023-09-03 14:02:55 -07:00
Mitchell Hashimoto
cdf81b610d terminal: mark prompt continuation lines, end prompt clear at first
prompt
2023-09-03 14:00:56 -07:00
Mitchell Hashimoto
de3d0b4243 terminal: parse semantic prompt "k" (kind) parameter 2023-09-03 13:47:06 -07:00
Mitchell Hashimoto
aa04c79586 terminal: CSI P must shift all remaining columns to right of cursor
Fixes #388
2023-09-02 11:28:37 -07:00
Mitchell Hashimoto
a6007cab7a terminal: fix unimplemented origin mode check 2023-09-01 08:46:53 -07:00
Mitchell Hashimoto
36756cc866 terminal: charset table should be len 256, not 255 2023-08-31 20:45:13 -07:00
Mitchell Hashimoto
f4fef559fb terminal: delete lines outside of scroll region should do nothing 2023-08-31 20:41:32 -07:00
Mitchell Hashimoto
65246327dd terminal: add more assertions 2023-08-31 19:45:22 -07:00
Mitchell Hashimoto
6c13627d51 terminal: delete chars (CSI P) tested, fixes many issues 2023-08-31 19:42:23 -07:00
Mitchell Hashimoto
0aebf1e406 terminal: CSI S allows for count greater than scroll region height 2023-08-31 17:52:22 -07:00
Mitchell Hashimoto
d05381db83 remove some unreachables, log errors to avoid crashes
These are still TODO but we don't want to crash on bad input.
2023-08-31 14:55:27 -07:00
Mitchell Hashimoto
3352cae3f7 terminal: resize more cols no longer preserves trailing stylized cells 2023-08-30 15:55:43 -07:00
Mitchell Hashimoto
c18527384e terminal: sgr parsing doesn't parse 4-form 48, allows unstyled underline
Fixes #362

We previously tried to parse 4-form 48, but as far as I can tell this is
never used anyways and in this real world scenario it expected us to
parse a 3-form followed by an underline. This fixes the real world
scenario as priority and adds a test.

This also fixes an issue where single form colon underline may actually
exist, again from a real world scenario.
2023-08-30 14:58:44 -07:00
Mitchell Hashimoto
fb2d4faa03 terminal: add contrast function based on w3c 2023-08-30 10:18:18 -07:00
Mitchell Hashimoto
0e8412ec19 terminal: add w3c luminance formula 2023-08-30 10:10:45 -07:00
Mitchell Hashimoto
3391908a82 terminal: get rid of duplicate RGB struct 2023-08-30 08:48:57 -07:00
Mitchell Hashimoto
7e846bd367 terminal: tabstops were off by one
Fixes #359

See #359 for a test script. The unit tests were also wrong. I used the
test script in #359 to verify the exact column that tabstops should be
set at.
2023-08-29 20:18:54 -07:00
Mitchell Hashimoto
ed5c001690 font/shaper: split ligature around cell style change 2023-08-29 14:09:21 -07:00
Mitchell Hashimoto
2cc1e43716 termio: handle all the synchronized output setting, timer 2023-08-28 11:35:40 -07:00
Mitchell Hashimoto
3b9d5d27ad terminal: implement DECRQM (request mode) 2023-08-28 08:50:11 -07:00
Mitchell Hashimoto
cbfa22555e terminal: test to ensure that DECRQM can parse 2023-08-28 08:36:00 -07:00
Mitchell Hashimoto
be27b825f3 terminal: resize with less cols preserves zero width codepoints 2023-08-28 08:18:03 -07:00
Mitchell Hashimoto
c243c9d72e terminal: screen test dumpString function should add graphemes 2023-08-28 08:07:40 -07:00