93 Commits

Author SHA1 Message Date
Mitchell Hashimoto
cf6463fec0 terminal/kitty: preparing to build runs of placements 2024-07-25 21:32:44 -07:00
Mitchell Hashimoto
13df93a1d0 temrinal/kitty: really basic row/col diacritic decoding 2024-07-25 21:32:44 -07:00
Mitchell Hashimoto
b103e31727 terminal: isBetween needs to fall through for matching y on top page
Regressed in 9198adcba3477ab521cf215f1f652813e32e1951

This was causing Kitty image intersection to break.
2024-07-25 21:32:28 -07:00
Mitchell Hashimoto
9198adcba3 terminal: Pin.isBetween broken logic
Two bugs:

1. If our pin is the top page, and self.y == top.y, then x will tell us
   the answer. Before, we'd fall through.

2. If our pin is not the top or bottom, but the top == bottom, then we
   can't possibly be between. Before, we'd incorrectly check the linked
   list starting AFTER top.
2024-07-20 14:50:31 -07:00
Qwerasd
8589f2c0fb terminal/PageList: rework reflow logic to fix issues
Reflow logic now lives inside of ReflowCursor. This fixes multiple
issues with the previous implementation, and is more straightforward
in how it works. The old impl resulted in fragmentation of pages,
leading to unbounded memory growth when resizing repeatedly.

Also improves the preserved_cursor logic in `resizeCols`.
2024-07-08 22:35:15 -04:00
Qwerasd
10dbca9464 terminal/PageList: fix some incorrect test expectations 2024-07-08 22:29:55 -04:00
Qwerasd
be99e50c50 terminal/PageList: add method for logging debug diagrams 2024-07-08 22:28:16 -04:00
Qwerasd
730185b212 terminal: spacer heads and tails should be codepoint 0, not ' ' 2024-07-08 22:25:39 -04:00
Mitchell Hashimoto
cdb838ea85 terminal: pause integrity checks on resize for hyperlink set 2024-07-05 21:40:40 -07:00
Mitchell Hashimoto
8b02d3430c terminal: copy hyperlinks on reflow 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
dea8859e2c Merge pull request #1925 from ghostty-org/styleref
terminal: when adjusting page capacity, account for cursor ref counts
2024-07-05 21:38:54 -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
c02481530a terminal: Pin.isBetween incorrect if same y and same page 2024-07-05 19:06:57 -07:00
Mitchell Hashimoto
b62806360b terminal: add test for pagelist to clear styles 2024-06-24 20:58:11 -07:00
Qwerasd
6f732cca55 RefCountedSet: use usize for cap to allow up to max Id+1 2024-06-24 20:32:22 -07:00
Qwerasd
a7e6f1a070 fix(terminal/PageList): clear cells in truncated rows during clone
Previously this was a memory leak, styles and graphemes in these rows
were never reclaimed.
2024-06-24 20:32:21 -07:00
Qwerasd
9741b3a18c perf: introduce RefCountedSet structure, use it for Style.Set 2024-06-13 22:59:03 -04:00
Mitchell Hashimoto
cd42888182 terminal: eraseRows sets dirty bits 2024-05-07 10:38:27 -07:00
Mitchell Hashimoto
f975861891 terminal: maintain dirty bits when rotating rows on clone 2024-05-07 10:36:54 -07:00
Mitchell Hashimoto
3cfce658c3 terminal: dirty tracking in more places, tests coverage 2024-05-07 09:52:03 -07:00
Mitchell Hashimoto
7e52f94278 terminal: on clone, only mark rows dirty that were previously dirty 2024-05-01 20:31:49 -07:00
Mitchell Hashimoto
d47f14f86a terminal: dirty tracking on screen clone 2024-05-01 20:31:49 -07:00
Mitchell Hashimoto
f867fabf8e terminal: new coordinate type 2024-05-01 20:31:49 -07:00
Mitchell Hashimoto
19ddbbc7d6 terminal: eraseRowBounded dirty tracking 2024-05-01 20:31:48 -07:00
Mitchell Hashimoto
f7a57bd2c8 terminal: dirty tests on t/b/l/r margins 2024-05-01 20:31:48 -07:00
Mitchell Hashimoto
981f031951 terminal: remove unused debug log 2024-05-01 20:31:48 -07:00
Mitchell Hashimoto
11c195e493 terminal: dirty tracking on print with tests 2024-05-01 20:31:48 -07:00
Mitchell Hashimoto
7b750b7ed9 terminal: add dirty bits to the page structure 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
733ce19654 terminal: handle case where eraseRowBounded happens at top of page
Fixes #1677

If eraseRowBounded is called at the top of a page AND there is a tracked
pin at the top of the page, then we'd have an integer overflow. The test
case covers this and this adds a fix.
2024-04-13 20:45:39 -07:00
Mitchell Hashimoto
dce96847a9 terminal: test eraseRowBounded, fix off by ones 2024-03-27 20:23:45 -07:00
Mitchell Hashimoto
050e6e4daa terminal: when growing rows, need to set rows before grow()
grow() will not prune pages that are needed for the active but that
requires an accurate self.rows. We were setting this too late.
2024-03-27 10:38:31 -07:00
Qwerasd
492e147e26 terminal: clean up some code and comments 2024-03-26 12:07:35 -06:00
Qwerasd
23d32e248e perf(terminal): fast-paths for scrolling regions 2024-03-26 12:07:35 -06:00
Qwerasd
d74ea89056 fastmem: rotateOnce 2024-03-26 12:07:35 -06:00
Qwerasd
ddd7f3e706 comments 2024-03-26 12:07:35 -06:00
Qwerasd
9df9c999a7 fix(terminal): clear erased rows
Clearing these rows is necessary to avoid memory corruption, but the
calls to `clearCells` in the first loop were redundant, since the rows
in question are included in the second loop as well.
2024-03-26 12:07:35 -06:00
Qwerasd
0a6ef3fda4 wip(terminal): Fast path for scroll regions 2024-03-26 12:07:35 -06:00
Mitchell Hashimoto
41720b3c8d terminal: PageList support initialization of multi-page viewports 2024-03-25 11:06:21 -07:00
Mitchell Hashimoto
705bd21055 terminal: PageList trim blanks erases empty pages
Fixes #1605
2024-03-25 10:18:31 -07:00
Mitchell Hashimoto
9ee0b23ef7 terminal: clear spacer heads on growing cols w/o reflow 2024-03-25 09:42:05 -07:00
Mitchell Hashimoto
1b8dc0c0c1 terminal: add a test for resize less cols across pages with cursor 2024-03-24 19:19:23 -07:00
Mitchell Hashimoto
3d6ae29dc3 terminal: when reflowing, set style to default to prevent integrity fail 2024-03-24 15:22:01 -07:00
Mitchell Hashimoto
f719999950 terminal: add assertion to page integrity that row/col count > 0 2024-03-24 14:46:43 -07:00
Mitchell Hashimoto
225cc642b9 terminal: allow growing beyond max size for active area to fit 2024-03-24 09:45:35 -07:00
Mitchell Hashimoto
6cbe699533 terminal: remove problematic test on 4k pages, still working on it 2024-03-23 21:43:16 -07:00
Mitchell Hashimoto
e4332891ee terminal: avoid memory fragmentation if possible on col grow 2024-03-23 21:37:34 -07:00
Mitchell Hashimoto
f848ed2a63 terminal: handle row wrap integrity issues on reflow 2024-03-22 20:28:22 -07:00
Mitchell Hashimoto
2e9cc75206 terminal: add integrity checks throughout PageList 2024-03-22 20:28:22 -07:00