1390 Commits

Author SHA1 Message Date
Mitchell Hashimoto
18a8d2b01d Minor changes, mainly commenting to clarify some behaviors 2024-08-18 15:05:31 -07:00
Eduardo Dominguez
2e70ad20df Config: cursor-style can bet set to block_hollow
`cursor-style` can now also be set to `block_hollow`, no other changes
in behaviour are added.
2024-08-16 15:25:44 -06:00
Qwerasd
37872afbce kitty graphics: support loading 1 channel grayscale images 2024-08-15 21:38:46 -04: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
Qwerasd
0c11d256c8 RefCountedSet: use usize for living count to avoid overflow 2024-08-15 16:28:27 -04:00
Qwerasd
10b8ca3c69 spelling: normalize grey -> gray 2024-08-11 18:31:01 -04:00
cryptocode
2e88ff1d05 Improve resize performance by switching to AutoArrayHashMapUnmanaged
I noticed that the HashMap iterator showed up prominently in Instruments when quickly
resizing Ghostty.

I think this is related to the [tombstone issue](https://github.com/ziglang/zig/issues/17851),
where the `next()` function has to skip unused meta-nodes.

In that same issue, Andrew is suggesting that the non-array hashmap might get deleted from the
standard library.

After switching to `AutoArrayHashMapUnmanaged`, iteration barely shows up anymore.

Deletion from the pin list should also be fast as swapRemove is used (order does not need to be preserved).

Question is if insertion performance is negatively affected, though I'm not seeing anything obvious.
Still, checking this PR for any perf regressions might be a good idea.

If this pans out, there are more places where this switch might be beneficial.
2024-08-10 23:54:04 +02:00
Mitchell Hashimoto
edea928117 Merge pull request #2057 from jcollie/xtwinops
[DRAFT] Implement the XTWINOPS (CSI t) control sequences that "make sense".
2024-08-10 11:21:49 -07:00
Mitchell Hashimoto
ccf62a4960 stylistic nitpicks 2024-08-10 11:03:56 -07:00
Mitchell Hashimoto
aeb3b64110 do not extend background for window-padding-color if powerline 2024-08-10 10:20:08 -07:00
Mitchell Hashimoto
b368702a9d terminal/kitty: shared memory size may be larger than expected for pages
The shared memory segment size must be a multiple of page size. This
means that it may be larger than our expected image size. In this case,
we trim the padding at the end.
2024-08-09 20:33:39 -07:00
Mitchell Hashimoto
c114979ee3 terminal/kitty: minor stylistic changes to shm 2024-08-08 14:35:30 -07:00
Jeffrey C. Ollie
e2fe6bf74b kitty graphics: add support for shared memory transfer medium
Adds support for using shared memory to transfer images between
the CLI and Ghostty using the Kitty image protocol. This should be
the fastest way to transfer images if the CLI program and Ghostty are
running on the same system.

Works for single image transfer using `kitten icat`:

```
kitten icat --transfer-mode=memory images/icons/icon_256x256.png
```

However trying to play a movie with `mpv` fails in Ghostty (although it
works in Kitty):

```
mpv --vo=kitty --vo-kitty-use-shm=yes --profile=sw-fast --really-quiet video.mp4
```

`mpv` appears to be sending frames using the normal image transfer
commands but always setting `more_chunks` to `true` which results in an
image never being shown by Ghostty.

Shared memory transfer on Windows remains to be implemented.
2024-08-08 15:38:54 -05:00
Jeffrey C. Ollie
ce5e55d4aa Implement the XTWINOPS (CSI t) control sequences that "make sense".
These sequences were implemented:

CSI 14 t - report the text area size in pixels
CSI 16 t - report the cell size in pixels
CSI 18 t - report the text area size in cells
CSI 21 t - report the window title

These sequences were not implemented because they manuipulate the window
state in ways that we do not want.

CSI 1 t
CSI 2 t
CSI 3 ; x ; y t
CSI 4 ; height ; width ; t
CSI 5 t
CSI 6 t
CSI 7 t
CSI 8 ; height ; width ; t
CSI 9 ; 0 t
CSI 9 ; 1 t
CSI 9 ; 2 t
CSI 9 ; 3 t
CSI 10 ; 0 t
CSI 10 ; 1 t
CSI 10 ; 2 t
CSI 24 t

These sequences were not implemented because they do not make sense in
a Wayland context:

CSI 11 t
CSI 13 t
CSI 14 ; 2 t

These sequences were not implemented because they provide information
about the screen that is unnecessary.

CSI 15 t
CSI 19 t

These sequences were not implemeted because Ghostty does not maintain an
icon title for windows.

CSI 20 t
CSI 22 ; 0 t
CSI 22 ; 1 t
CSI 23 ; 0 t
CSI 23 ; 1 t

These sequences were not implemented because of the additional
complexity of maintaining a stack of window titles.

CSI 22 ; 2 t
CSI 23 ; 2 t
2024-08-07 00:12:20 -05:00
Łukasz Niemier
f9be02a20f chore: clean up typos 2024-08-05 13:56:57 +02:00
Mitchell Hashimoto
ea551990eb renderer: disable window-padding-color=extend in certain scenarios
There are scenarios where this configuration looks bad. This commit
introduces some heuristics to prevent it. Here are the heuristics:

  * Extension is always enabled on alt screen.
  * Extension is disabled if a row contains any default bg color. The
    thinking is that in this scenario, using the default bg color looks
    just fine.
  * Extension is disabled if a row is marked as a prompt (using semantic
    prompt sequences). The thinking here is that prompts often contain
    perfect fit glyphs such as Powerline glyphs and those look bad when
    extended.

This introduces some CPU cost to the extension feature but it should be
minimal and respects dirty tracking. This is unfortunate but the feature
makes many terminal scenarios look much better and the performance cost
is minimal so I believe it is worth it.

Further heuristics are likely warranted but this should be a good
starting set.
2024-08-03 21:56:19 -07:00
Mitchell Hashimoto
c554b607b7 terminal: eraseDisplay should allow kitty erase through
Fixes #1994
2024-08-03 14:05:28 -07: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
d40101fea0 terminal: more tests 2024-07-31 09:51:32 -07:00
Mitchell Hashimoto
2c4ddc594e terminal: reflow tests for kitty virtual placeholder flag 2024-07-31 09:48:00 -07:00
Mitchell Hashimoto
a1276b3cc3 terminal/kitty: delete all images ignores virtual placements 2024-07-29 19:37:47 -07:00
Mitchell Hashimoto
bf30753657 terminal/kitty: handle case where both offsets are in one grid cell 2024-07-29 18:57:31 -07:00
Mitchell Hashimoto
d510bb4497 terminal/kitty: adjust middle rows for image offsets 2024-07-29 17:26:57 -07:00
Mitchell Hashimoto
0c81ca44b8 terminal/kitty: do not render blank virtual placement cells 2024-07-29 14:52:09 -07:00
Mitchell Hashimoto
39b915ac25 terminal/kitty: handle width-stretched 2024-07-29 14:42:27 -07:00
Mitchell Hashimoto
77ee2f413c terminal: hasText no longer special cases kitty placeholders 2024-07-29 14:36:49 -07:00
Mitchell Hashimoto
5e9b871028 terminal/kitty: unit tests for unicode placements 2024-07-29 14:15:51 -07:00
Mitchell Hashimoto
359458b96a terminal/kitty: switch to new placement math 2024-07-29 10:52:10 -07:00
Mitchell Hashimoto
0ebf14fd44 terminal/kitty: working on moving placement math here for testing 2024-07-29 10:39:18 -07:00
Mitchell Hashimoto
6d2e97a2f1 terminal: cursorChangePin needs to migrate hyperlink state
Fixes #2007
2024-07-28 14:17:38 -07:00
Mitchell Hashimoto
6668930b96 terminal: appendGrapheme should text for codepoint, not text 2024-07-26 12:24:35 -07:00
Mitchell Hashimoto
266033670d terminal/kitty: support cells with no diacritics 2024-07-25 21:32:45 -07:00
Mitchell Hashimoto
3549619a64 terminal: introduce row bit for kitty virtual placeholders 2024-07-25 21:32:45 -07:00
Mitchell Hashimoto
91a6e70d1b terminal/kitty: extra placement tests 2024-07-25 21:32:45 -07:00
Mitchell Hashimoto
1786502f15 terminal/kitty: working runs 2024-07-25 21:32:45 -07:00
Mitchell Hashimoto
cf6463fec0 terminal/kitty: preparing to build runs of placements 2024-07-25 21:32:44 -07:00
Mitchell Hashimoto
7c6ae90300 terminal/kitty: implement high bit image id parsing 2024-07-25 21:32:44 -07:00
Mitchell Hashimoto
578bfc8d23 terminal/kitty: parse image/placement id from style 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
e656fe3b79 terminal/kitty: starting virtual placement iterator 2024-07-25 21:32:44 -07:00
Mitchell Hashimoto
deacb10fb1 terminal: print must use codepoint() now to work with placeholders 2024-07-25 21:32:44 -07:00
Mitchell Hashimoto
bb1a9bf532 terminal/kitty: rename diacritics to unicode 2024-07-25 21:32:44 -07:00
Mitchell Hashimoto
f71afcab95 terminal/kitty: diacritic small tests 2024-07-25 21:32:44 -07:00
Mitchell Hashimoto
358b4ca896 terminal/kitty: parse relative placement fields 2024-07-25 21:32:44 -07:00
Mitchell Hashimoto
2c0f9bfc28 terminal: cell returns empty for Kitty placeholder
So we don't render the replacement char
2024-07-25 21:32:44 -07:00
Mitchell Hashimoto
7d9e50353b terminal/kitty: add virtual placeholders placements 2024-07-25 21:32:44 -07:00
Mitchell Hashimoto
a5c382633f terminal/kitty: placements support location enum (only pin for now) 2024-07-25 21:32:43 -07:00
Mitchell Hashimoto
d29073d999 terminal/kitty: add graphics diacritics file 2024-07-25 21:32:43 -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