Powrót do strony głównej

Ghostling: terminal na libghostty C API

Ghostling — projekt demo minimalnego terminala na bazie libghostty-vt i Raylib. Obsługuje emulację VT, Unicode, protokoły mouse/keyboard bez zależności. Przydatny do nauki C API wbudowywanych terminali.

Minimalny terminal Ghostling na libghostty
Advertisement 728x90

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.

Google AdInline article slot

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.

Google AdInline article slot

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ę:

Google AdInline article slot
  • 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

Advertisement 728x90

Czytaj dalej