367 Commits

Author SHA1 Message Date
Mitchell Hashimoto
994514981f terminal: handle case grow allocates but cursor is multiple pages back 2024-08-18 10:20:23 -07:00
Mitchell Hashimoto
602fea52ec terminal: cursorScrollAbove handles case of no new page, prev page 2024-08-18 10:14:35 -07:00
Mitchell Hashimoto
9898489e25 terminal: add Screen.cursorScrollAbove and tests 2024-08-17 21:57:07 -07:00
Qwerasd
c37ee6c428 fix(terminal): proper style cleanup in cursorCopy
Old implementation sometimes resulted in an attempt to free the style
from a different page than it originates. This way is also generally
cleaner.
2024-08-15 19:08:12 -04:00
Qwerasd
16284dbb3f test(terminal/Screen): add failing unit test for cursorCopy
Detects issue with style reference counting when the cursor is moved
across pages during the copy.
2024-08-15 19:06:41 -04:00
Łukasz Niemier
f9be02a20f chore: clean up typos 2024-08-05 13:56:57 +02:00
Mitchell Hashimoto
09e367fe09 Merge pull request #2015 from ghostty-org/kitty-unicode
Kitty Graphics Unicode Placeholders
2024-07-31 09:56:12 -07:00
Mitchell Hashimoto
6d2e97a2f1 terminal: cursorChangePin needs to migrate hyperlink state
Fixes #2007
2024-07-28 14:17:38 -07:00
Mitchell Hashimoto
3549619a64 terminal: introduce row bit for kitty virtual placeholders 2024-07-25 21:32:45 -07:00
Jon Parise
9369a1a34b terminal: test clearPrompt with a continuation 2024-07-17 20:41:46 -04:00
Qwerasd
6f1a2d1e8e terminal/Screen: fix trailing blank cell handling for wrapped rows in dumpString 2024-07-08 22:26:36 -04:00
Mitchell Hashimoto
4a861a8c8f terminal: hyperlink capacity adjustment needs to call safe variant 2024-07-06 08:47:22 -07:00
Mitchell Hashimoto
d79bbaac68 terminal: adjustCapacity handles hyperlink state 2024-07-05 21:44:30 -07:00
Mitchell Hashimoto
251ec0c9f3 terminal: on print, adjust page size if we need to grow for hyperlinks 2024-07-05 21:40:40 -07:00
Mitchell Hashimoto
925ad5b45c renderer: match multiple lines for osc8 2024-07-05 21:40:39 -07:00
Mitchell Hashimoto
961a4b6b31 terminal: support page oom with hyperlinks 2024-07-05 21:40:39 -07:00
Mitchell Hashimoto
57c5522a6b terminal: handle moving/swapping/clearing cells with hyperlinks 2024-07-05 21:40:38 -07:00
Mitchell Hashimoto
c880bb6f45 terminal: test hyperlink reuse shares ID 2024-07-05 21:40:37 -07:00
Mitchell Hashimoto
d1f41e2035 terminal: hyperlink start/end on screen 2024-07-05 21:39:55 -07:00
Mitchell Hashimoto
a71b487d58 terminal: add strings table to page 2024-07-05 21:39:07 -07:00
Mitchell Hashimoto
92ffa9af13 terminal: when adjusting page capacity, account for cursor ref counts
This fixes an issue where when we adjusted the capacity of the page, the
style ref count would be off by one (short by one).

The issue is that when adjusting the capacity of a page, it happens on
PageList which is unware of cursor state and therefore can't ensure to
reference the active style.

This creates an `adjustCapacity` call on `Screen` which can properly
handle this scenario.
2024-07-05 21:33:05 -07:00
Mitchell Hashimoto
1a22bc7f3b terminal: if cloned screen is subset of selection, select full screen
Fixes #1859
2024-06-25 09:45:36 -07:00
Qwerasd
93b038f490 fix(RefCountedSet): add NeedsRehash error and fix PSL counting bug
Prevent bad input from causing repeated OutOfMemory errors by erroring
with NeedsRehash instead when there are unused dead IDs available.

Additionally, properly decrement PSL stats when reviving dead IDs.
2024-06-24 20:32:22 -07:00
Qwerasd
9741b3a18c perf: introduce RefCountedSet structure, use it for Style.Set 2024-06-13 22:59:03 -04:00
Mitchell Hashimoto
0d94fb61c9 terminal: all cursor movement needs to mark the old and new page dirty 2024-06-07 15:03:02 -07:00
Mitchell Hashimoto
c2b0bb6395 terminal: mark old/new rows as dirty when moving the cursor absolute 2024-06-07 14:55:02 -07:00
Mitchell Hashimoto
a1372a0efd terminal: more dirty tracking 2024-05-07 09:55:32 -07:00
Mitchell Hashimoto
3cfce658c3 terminal: dirty tracking in more places, tests coverage 2024-05-07 09:52:03 -07:00
Mitchell Hashimoto
d3abe65ad6 terminal: only set selection dirty to true on clear if previously set 2024-05-06 18:35:51 -07:00
Mitchell Hashimoto
7c9ce0af73 terminal: Screen selection marks dirty 2024-05-01 20:41:53 -07:00
Mitchell Hashimoto
fb25f5cea1 terminal: more dirty tests 2024-05-01 20:31:49 -07:00
Mitchell Hashimoto
11c195e493 terminal: dirty tracking on print with tests 2024-05-01 20:31:48 -07:00
Mitchell Hashimoto
3f16234f72 terminal: Coordinate uses CellCountInt 2024-04-26 20:52:08 -07:00
Mitchell Hashimoto
9ea78f981e terminal: index (LF) that scrolls scroll region preserves SGR
Fixes #1676

The comment in the diff explains. This is a regression that was not unit
tested properly in the old implementation prior to the paged-terminal
merge.
2024-04-13 21:31:41 -07:00
Qwerasd
be07856647 fix(terminal/Screen): selectionString multi-page
Corrected logic for detecting if the current row is the end of the
selection. Previous logic was faulty because when I calculated the
current page y incorrectly, not realizing that it was already
available as `y`.
2024-04-04 17:59:42 -04:00
Qwerasd
b03f80cadd terminal/Screen: improve selectionString page test
More readable (smaller) output when failing, catches more edge cases.
At the time of this commit, this test is failing. Changed primarily to
address the edge case that was missed before.
2024-04-04 17:44:06 -04:00
Qwerasd
8be145ec1f fix(terminal/Sreen): selectionString across pages
Newlines after rows should only be omitted on the final row of the
entire SELECTION, not on the final row of each page/chunk.
2024-04-03 20:03:25 -04:00
Qwerasd
fa5646e762 test(terminal/Screen): selectionString across page boundaries 2024-04-03 19:28:02 -04:00
Qwerasd
51d3c2cf35 fix(kitty_graphics): set dirty state on various scroll operations 2024-03-31 21:49:28 -04:00
Qwerasd
5b509f9295 test(terminal/Screen): clearRows with protected cells 2024-03-29 16:47:53 -04:00
Qwerasd
925c7e86a2 fix(terminal): insert/deleteLines boundary cond.s
Introduced a helper function for correctly handling boundary conditions
in insertLines and deleteLines. Also adds a whole host of tests for said
conditions in deleteLines, tests not duplicated for insertLines because
they both use the same helper function.
2024-03-29 16:29:27 -04:00
Qwerasd
e55f2daf90 perf(terminal): clear unprotected cells in spans
Previous behavior of clearing one at a time hit a page integrity assertion after clearing a wide character but not its tail. This fixes that and should also be - in theory - significantly more performant as well by identifying spans of unprotected cells and clearing them in bulk.
2024-03-29 13:08:38 -04:00
Mitchell Hashimoto
dce96847a9 terminal: test eraseRowBounded, fix off by ones 2024-03-27 20:23:45 -07:00
Mitchell Hashimoto
8d4f454e30 terminal: add integrity assertion that cursor pin matches x/y 2024-03-27 13:42:11 -07:00
Qwerasd
0a6ef3fda4 wip(terminal): Fast path for scroll regions 2024-03-26 12:07:35 -06:00
Mitchell Hashimoto
36240b897c terminal: many more assertions around spacer state 2024-03-24 20:27:47 -07:00
Mitchell Hashimoto
9685a56941 terminal: clear unprotected row should preserve row attrs 2024-03-22 20:28:23 -07:00
Mitchell Hashimoto
cd30534808 terminal: no scrollback eraseRows needs to fix style 2024-03-22 20:28:23 -07:00
Mitchell Hashimoto
65696c9900 terminal: clearcells only decs cursor ref if same page 2024-03-22 20:28:22 -07:00
Mitchell Hashimoto
3b6ae6807c terminal: add more integrity assertions 2024-03-22 20:28:22 -07:00