- libghostty C API tabanlı, tek bir C dosyası ve Raylib render kullanarak çalışan minimum özellikli bir terminal demosu
- libghostty-vt işlevlerini doğrulamak için tasarlanmış bir yapıyla, GPU render yerine 2D grafik tabanlı terminal uygulamasını gösteriyor
- Metin reflow’u, 24-bit renk, Unicode işleme, fare ve klavye protokolleri gibi gerçek terminal düzeyinde özellikleri destekliyor
- Kitty Graphics Protocol ile OSC clipboard ve başlık ayarı gibi bazı özellikler henüz uygulanmış değil; Windows desteği de dahil değil
- libghostty çekirdeğini kullanarak, farklı uygulamaların kendi GUI veya render bileşenlerini birleştirebilmesine olanak tanıyan genişletilebilirlik sunuyor
Ghostling genel bakış
- Ghostling, libghostty C API tabanlı minimum özellikli bir terminal demo projesidir; tek bir C dosyasından oluşan bir örnektir
- Pencere yönetimi ve render için Raylib kullanır ve tek iş parçacıklı bir yapıda çalışır
- libghostty-vt esnekliğini göstermek için doğrudan GPU render yerine 2D grafik render kullanır
- Tam teşekküllü günlük kullanım terminali değil, minimum çalışabilir terminal uygulaması örneğidir; kodun doğruluğu kapsamlı biçimde doğrulanmış değildir
Libghostty tanıtımı
- Libghostty, Ghostty çekirdeğinden çıkarılmış bir gömülü terminal emülasyon kütüphanesidir ve C ile Zig API’leri sunar
- libghostty-vt, bağımlılıksız bir kütüphanedir; VT sequence parsing, imleç konumu, stiller, scrollback gibi terminal durum yönetimini üstlenir
- Render veya pencere yönetimi kodu içermez; bunlar kütüphaneyi kullanan uygulama tarafından doğrudan uygulanmalıdır
- Ghostty GUI içinde doğrulanmış kod tabanına dayanarak, doğru ve eksiksiz terminal emülasyonu, SIMD optimize parsing, gelişmiş Unicode desteği, verimli bellek kullanımı ve geniş test tabanlı kararlılık sağlar
Başlıca özellikler
- Metin reflow dâhil pencere boyutlandırma desteği
- 24-bit renk ve 256 renk paleti, bold, italik ve ters video stilleri desteği
- Unicode ve çoklu codepoint grapheme işleme (ancak shaping ve layout yok)
- Shift, Ctrl, Alt, Super gibi değiştirici tuş girişlerinin işlenmesi
- Kitty keyboard protocol, fare izleme (X10, normal, button, any-event) ve birden çok fare raporlama biçimi (SGR, URxvt, UTF8, X10) desteği
- Kaydırma tekerleği ve sürüklenebilir kaydırma çubuğu, odak raporlama (CSI I / CSI O) desteği
- Ghostty GUI ile aynı düzeydeki terminal emülasyonu özelliklerinin büyük kısmını içerir
Planlanan özellikler
- Henüz libghostty-vt içinde tamamen dışa açılmamış özellikler
-
Kitty Graphics Protocol
-
OSC clipboard desteği
- OSC başlık ayarı
- Windows desteği, libghostty-vt tarafında mümkün olsa da Ghostling’de henüz uygulanmamıştır
- Gelecekte yeni ek özellikler keşfedildikçe liste genişletilecektir
Sunulmayan özellikler
- libghostty, terminal emülasyonu çekirdeğine odaklandığı için GUI katmanı özelliklerini içermez
- Sekmeler, çoklu pencere, bölünmüş ekran, oturum yönetimi, yapılandırma dosyası, GUI, arama arayüzü vb. dahil değildir
- Bu özellikler libghostty kullanan uygulama tarafından doğrudan uygulanmalıdır
- Ghostling, minimum örnek yapısını korumak için bu özellikleri kasıtlı olarak dışarıda bırakır
Derleme yöntemi
SSS
-
Zig yerine neden C kullanıldı
-
libghostty-vt** tam bir Zig API sunsa da,** C API daha yaygın kullanılır ve daha erişilebilirdir
- Ghostling, minimum C API kullanım örneğini göstermek için hazırlanmış bir demodur
-
Rust gibi diğer dil destekleri
- libghostty-vt, C API üzerinden sıfır bağımlılıkla çalışabilir
- Çoğu dilde ince binding’lerle kullanılabilir; resmî binding’ler C ve Zig odaklıdır
- Topluluğun farklı diller için binding’ler geliştirip sürdürmesi beklenmektedir
-
Raylib zorunlu mu
- Zorunlu değil. libghostty, render veya GUI framework’ü konusunda herhangi bir kısıtlama getirmez
- WASM ortamında da bağımsız olarak çalışabilir
- Render state API sağlayarak Metal, OpenGL, Raylib gibi her türlü render ile birleştirilebilir
-
Neden CMake ve Raylib seçildi
- Belirli bir teknolojiye bağımlı değildir; CMake genel amaçlı ve geniş destekli bir build sistemidir
-
Raylib** basit ve kurulumu kolay bir** 2D pencere ve render kütüphanesidir
- Projenin amacı teknik seçimlerden çok libghostty kullanım örneği göstermektir
1 yorum
Hacker News görüşleri
Ben libghostty'yi Trolley'de kullanıyorum
Bu proje, bir web uygulamasını Electron ile sarmaya benzer şekilde TUI'leri masaüstü uygulamaları olarak paketliyor
Sadece GUI ve CLI bundle'layıcıları ekledim ama Windows'ta da kusursuz çalışıyor
Ghostty geliştiricilerinden gerçekten etkilendim
Uygulamanın TUI'nin etrafına nasıl bir chrome (arayüz çerçevesi) eklediğini hemen anlamayı sağlardı
C dosyası o kadar küçük ki birkaç dakikada tamamını okuyabildim
5. satır civarında fontu otomatik üretilmiş bir header içine gömmenin alışılmadık yolunu görünce şaşırdım
Windows kaynak yöntemine alışığım ama burada CMake koduyla bir byte dizisi üretiliyor
Biraz sarsıcı ama etkileyiciydi — sonunda çapraz platform ikili kaynak gömme için bir çözüm bulmuşum gibi hissettirdi
cmake -DINPUT=pixel.gif -DOUTPUT=pixel.h -DARRAY_NAME=pixel_gif -P bin2header.cmakekomutuyla1x1 piksellik bir GIF'i C dizisine dönüştürebildim
Otomatik oluşturulan header içinde görsel doğrudan byte dizisi olarak yer alıyor
#includeedilebilsin diye tasarlanmıştıX PixMap wiki bunun yapısını iyi açıklıyor
vimpaketindekixxdkomutuyla da bu tür diziler oluşturulabilirAma büyük kaynaklar için verimsiz — gcc/clang bellek patlaması yaşatıyor
Bu yüzden ben LIEF projesini kullanıyorum
Bu araç Windows PE, macOS Mach-O, Linux ELF ikililerine kaynak eklemeyi ve sonra tekrar okumayı sağlıyor
Bu sayede boyut sınırı olmayan çapraz platform kaynak bundle sistemi kurabildim
DrawTextExçağrısını görmek ilgimi çektiBu, Ghostty kütüphanesinin ifade gücünü iyi gösteren bir örnekti
Diğer kütüphane seçimleri de harikaydı ve bana da kendi terminal uygulamamı yapma ilhamı verdi
İkili veriyi kaynak koduna dahil etmek eski bir teknik
70'ler ve 80'lerdeki BASIC
DATAsatırlarında ya da Atari ST ve Amiga oyunlarında bu yaklaşım yaygındıJava'da da piksel tabanlı fontları doğrudan
.javadosyalarına koyduğum olmuştuLinux çekirdeğindeki bazı fontların da bu şekilde işlendiğini duymuştum
Bu proje ilginç görünüyor
Benim bir terminal emülatöründe sekme ya da oturum yönetimi özelliklerine ihtiyacım yok
WM pencereleri ve sekmeleri yönetiyor, tmux ise oturum, scrollback ve arama gibi işleri hallediyor
Bu yüzden urxvt, st, foot gibi basit terminaller bana yetiyordu
Ghostty benim zevkime pek uymamıştı ama buna bir şans verilir
OSC desteği planlanıyor ve st'ye göre daha az uğraştıran bir eklenti sistemi eklenirse güzel olur