Ghostling: minimalny terminal na libghostty do demonstracji C API
Zespół Ghostty wydał otwarty projekt demonstracyjny Ghostling — jednowątkowy terminal w jednym pliku C, wykorzystujący libghostty-vt do emulacji VT i Raylib do renderowania. Projekt demonstruje integrację biblioteki bez przyspieszenia GPU, skupiając się na parsowaniu sekwencji, zarządzaniu stanem i podstawowym wejściu-wyjściu.
Architektura i kluczowe komponenty
Ghostling jest zbudowany na libghostty-vt — bibliotece bez zewnętrznych zależności, w tym libc. Odpowiada ona za parsowanie sekwencji VT, pozycjonowanie kursora, stosowanie stylów, reflow tekstu, przewijanie i zarządzanie rendererem. Renderowanie i pętla okienna są zaimplementowane za pomocą Raylib z rendererem 2D, co upraszcza demonstrację i podkreśla przenośność libghostty.
Projekt dziedziczy optymalizacje z Ghostty: parsowanie SIMD, obsługę Unicode, efektywne wykorzystanie pamięci. Libghostty dostarcza C- i Zig-API do osadzania w dowolnych aplikacjach, oddzielając emulację od UI.
Ważne ostrzeżenie: Ghostling to nie terminal produkcyjny. To minimalny działający przykład bez dokładnego audytu kodu, przeznaczony do nauki API.
Obsługiwane funkcje
Projekt realizuje podstawowy funkcjonalność emulatora terminala:
- Zmiana rozmiaru okna z reflow tekstu;
- 24-bitowy kolor i paleta 256 kolorów;
- Style tekstu (pogrubienie, kursywa, podkreślenie);
- Unicode i klastry graphemów multi-codepoint bez artefaktów;
- Wprowadzanie klawiaturowe z modyfikatorami (Shift, Ctrl, Alt, Super);
- Kitty keyboard protocol;
- Śledzenie myszy (tryby X10, normal, button, any event);
- Formaty raportów myszy (SGR, URxvt, UTF8, X10);
- Koło myszy do przewijania lub przekazywania do app;
- Pasek przewijania z drag-to-scroll.
Te funkcje pokrywają typowe scenariusze aplikacji shell, demonstrując niezawodność libghostty-vt w trybie decoupled.
Różnice w stosunku do głównego Ghostty
Ghostty wykorzystuje renderowanie GPU i wielowątkowość dla wysokiej wydajności. Ghostling jest uproszczony: jednowątkowy, renderowanie CPU-2D. Umożliwia to testowanie libghostty w scenariuszach embedded, gdzie GPU jest niedostępne lub overhead niepożądany. Raylib zapewnia przenośność międzyplatformową bez skomplikowanych bibliotek okienkowych.
Dla programistów middle/senior projekt jest przydatny jako punkt wyjścia dla niestandardowych terminali: dodaj swój renderer (Vulkan, SDL, custom canvas) na bazie libghostty-vt.
Co ważne
- Libghostty-vt — samodzielny silnik VT bez renderowania, idealny do osadzania;
- Ghostling pokazuje integrację single-file C API z Raylib;
- Pełna kompatybilność VT: kolory, Unicode, mysz, protokoły klawiatury;
- Brak zależności, optymalizacje SIMD, niski memory footprint;
- Demo do prototypowania, nie do codziennego użytku.
Plany rozwoju
Rozwijający ogłosili roadmapę:
- Kitty graphics protocol dla obrazów;
- Obsługa schowka OSC;
- Konfiguracja tytułu okna OSC.
To rozszerzy użyteczność dla aplikacji GUI z wyjściem terminalowym, takich jak wtyczki IDE czy klienci zdalnego pulpitu.
— Editorial Team
Brak komentarzy.