Skip to content

Commit 135ce88

Browse files
committed
libghostty(formatter): enable kitty gfx for vt
This adds support for printing kitty graphics using the `terminal.Formatter` through a new `terminal.ScreenFormatter.Extra` option `kitty_graphics`. This only implements kitty gfx for the `vt` format option. References: https://discord.com/channels/1005603569187160125/1420009803173859449/1446588699952287849
1 parent 0043e66 commit 135ce88

File tree

4 files changed

+341
-10
lines changed

4 files changed

+341
-10
lines changed

src/terminal/c/formatter.zig

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ pub const ScreenOptions = extern struct {
3737
hyperlink: bool,
3838
protection: bool,
3939
kitty_keyboard: bool,
40+
kitty_graphics: bool,
4041
charsets: bool,
4142

4243
comptime {
@@ -53,6 +54,7 @@ pub const ScreenOptions = extern struct {
5354
.hyperlink = self.hyperlink,
5455
.protection = self.protection,
5556
.kitty_keyboard = self.kitty_keyboard,
57+
.kitty_graphics = self.kitty_graphics,
5658
.charsets = self.charsets,
5759
};
5860
}
@@ -232,7 +234,7 @@ test "terminal_new/free" {
232234
&lib.alloc.test_allocator,
233235
&f,
234236
t,
235-
.{ .emit = .plain, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .charsets = false } } },
237+
.{ .emit = .plain, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .kitty_graphics = false, .charsets = false } } },
236238
));
237239
try testing.expect(f != null);
238240
free(f);
@@ -244,7 +246,7 @@ test "terminal_new invalid_value on null terminal" {
244246
&lib.alloc.test_allocator,
245247
&f,
246248
null,
247-
.{ .emit = .plain, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .charsets = false } } },
249+
.{ .emit = .plain, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .kitty_graphics = false, .charsets = false } } },
248250
));
249251
try testing.expect(f == null);
250252
}
@@ -269,7 +271,7 @@ test "format plain" {
269271
&lib.alloc.test_allocator,
270272
&f,
271273
t,
272-
.{ .emit = .plain, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .charsets = false } } },
274+
.{ .emit = .plain, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .kitty_graphics = false, .charsets = false } } },
273275
));
274276
defer free(f);
275277

@@ -295,7 +297,7 @@ test "format reflects terminal changes" {
295297
&lib.alloc.test_allocator,
296298
&f,
297299
t,
298-
.{ .emit = .plain, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .charsets = false } } },
300+
.{ .emit = .plain, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .kitty_graphics = false, .charsets = false } } },
299301
));
300302
defer free(f);
301303

@@ -327,7 +329,7 @@ test "format null returns required size" {
327329
&lib.alloc.test_allocator,
328330
&f,
329331
t,
330-
.{ .emit = .plain, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .charsets = false } } },
332+
.{ .emit = .plain, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .kitty_graphics = false, .charsets = false } } },
331333
));
332334
defer free(f);
333335

@@ -359,7 +361,7 @@ test "format buffer too small" {
359361
&lib.alloc.test_allocator,
360362
&f,
361363
t,
362-
.{ .emit = .plain, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .charsets = false } } },
364+
.{ .emit = .plain, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .kitty_graphics = false, .charsets = false } } },
363365
));
364366
defer free(f);
365367

@@ -392,7 +394,7 @@ test "format vt" {
392394
&lib.alloc.test_allocator,
393395
&f,
394396
t,
395-
.{ .emit = .vt, .unwrap = false, .trim = true, .extra = .{ .palette = true, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = true, .hyperlink = true, .protection = false, .kitty_keyboard = false, .charsets = false } } },
397+
.{ .emit = .vt, .unwrap = false, .trim = true, .extra = .{ .palette = true, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = true, .hyperlink = true, .protection = false, .kitty_keyboard = false, .kitty_graphics = false, .charsets = false } } },
396398
));
397399
defer free(f);
398400

@@ -437,7 +439,7 @@ test "format plain with selection" {
437439
&lib.alloc.test_allocator,
438440
&f,
439441
t,
440-
.{ .emit = .plain, .unwrap = false, .trim = true, .selection = &sel, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .charsets = false } } },
442+
.{ .emit = .plain, .unwrap = false, .trim = true, .selection = &sel, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .kitty_graphics = false, .charsets = false } } },
441443
));
442444
defer free(f);
443445

@@ -463,7 +465,7 @@ test "format html" {
463465
&lib.alloc.test_allocator,
464466
&f,
465467
t,
466-
.{ .emit = .html, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .charsets = false } } },
468+
.{ .emit = .html, .unwrap = false, .trim = true, .extra = .{ .palette = false, .modes = false, .scrolling_region = false, .tabstops = false, .pwd = false, .keyboard = false, .screen = .{ .cursor = false, .style = false, .hyperlink = false, .protection = false, .kitty_keyboard = false, .kitty_graphics = false, .charsets = false } } },
467469
));
468470
defer free(f);
469471

0 commit comments

Comments
 (0)