Ghostel.el - libghostty tabanlı Emacs terminal emülatörü
(dakra.github.io)- Ghostel, Ghostty ile aynı
libghostty-vtmotorunu kullanan bir Emacs terminal emülatörüdür; Zig yerel modülü terminal durumu, render alma ve yerel PTY G/Ç işlerini üstlenirken Elisp tuş eşlemeleri, tamponlar, komutlar ve uzak süreçleri yönetir - Kitty klavye ve grafik protokollerini, OSC 8 köprülerini, OSC 4/10/11 renk sorgularını, DEC 2026 senkronize çıktıyı ve 5 giriş modunu destekler; ayrıca yerel bash, zsh, fish ve nushell için kabuk entegrasyonunu otomatik uygular
- Emacs 28.1 ve üzeri ile macOS, Linux, FreeBSD ve yerel Windows’u destekler; ilk kullanımda platforma özel önceden derlenmiş modülleri otomatik indirebildiği için tipik kurulumlarda Zig araç zinciri gerekmez
- Apple M4 Max ve Emacs 32.0.50 üzerinde 1MB çıktı işleyen kıyaslamada sıradan ASCII için Ghostel 75MB/s, vterm 18MB/s, eat 6.2MB/s değerlerine ulaştı; yerel PTY ise 10MB
catişini yaklaşık 110 ms’de yutar - TRAMP uzak terminali, parola girişi koruması, Kitty satır içi görselleri, derleme, Eshell, Comint, Evil ve giriş yöntemi entegrasyonları da sunar; ancak uzak hedefler ve görsel işleme için platform ve protokol kısıtlamaları vardır
Yapı ve kurulum
- Ghostel, emacs-libvterm’in iki katmanlı tasarımından ilham alır, ancak libvterm yerine Ghostty’nin modern VT motorunu kullanır
- Zig modülü terminal durumu, render alma, tuş kodlama, yerel PTY ve arka plan okumasını işler
- Elisp ise tuş eşlemeleri, tamponlar, komutlar, proje entegrasyonu ve TRAMP uzak süreçlerinden sorumludur
- Gereksinimler, dinamik modülleri destekleyen Emacs 28.1 veya üzeri ile macOS, Linux, FreeBSD ya da yerel Windows’tur
- Önceden derlenmiş ikililer
aarch64-macos,x86_64-macos,x86_64-linux,aarch64-linux,x86_64-freebsd,x86_64-windows,aarch64-windowsiçin sunulur - Diğer platformlar veya kaynak koddan derleme için Zig 0.15.2 gerekir
- Önceden derlenmiş ikililer
- MELPA, Emacs 30 ve üzerindeki
use-package :vc,:load-pathve ellerequireyöntemleriyle kurulabilir; terminalM-x ghostelile açılır - Yerel modül yoksa
ghostel-module-auto-installayarına göre indirme veya kaynaktan derleme önerilirM-x ghostel-download-moduleen düşük desteklenen ikiliyi indirir; önek argümanı verilirse sürüm etiketi seçilebilirM-x ghostel-module-compile, modülüzig buildile derler- Paket dizini yeniden kurulabiliyorsa
ghostel-module-directoryayrı bir konuma ayarlanabilir
- Kaynaktan derleme, üretilmiş
vendor/emacs-module.hdosyasını içerdiğinden genelde yerel Emacs başlıklarına ihtiyaç duymaz; başlık konumuEMACS_INCLUDE_DIRveyaEMACS_BIN_DIRile değiştirilebilir- Derlenmiş
xterm-ghosttyterminfo’suetc/terminfo/içinde yer alır ve BSD ile ncurses arasında taşınabilir biçimdedir
- Derlenmiş
Windows desteği
- Yerel Windows Emacs üzerinde yerel terminaller ConPTY ile çalıştırılır ve modül DLL’inin mimarisi Windows ile değil, Emacs mimarisiyle eşleşmelidir
- Önceden derlenmiş modüllerle birlikte
conpty.dllveOpenConsole.exedestek dosyaları indirilir; bu dosyalar yoksa Windows’un yerleşik ConPTY API’sine geri düşülür - Statik CRT gibi özel amaçlı özelleştirilmiş Emacs derlemeleri yalnızca best-effort yaklaşımıyla desteklenir
- Windows’ta TRAMP terminali yalnızca POSIX uzak hedeflerini destekler, PTY uzak ana makinede bulunur ve dinamik pencere boyutu değiştirme şu anda desteklenmez
5 giriş modu
- Varsayılan semi-char modu, çoğu tuşu terminale gönderirken
C-c,C-x,C-u,C-h,M-x,M-:,C-\\gibi istisnaları Emacs’ta bırakır- Kesme, askıya alma, EOF gönderimi, bracketed paste, scrollback temizleme ve istem ile köprüler arasında gezinme için tuşlar sağlar
- char modu, tüm tuşları terminale gönderir; bu yüzden
C-x,M-x,C-hgibi kısayolları kendisi kullanan TUI’ler için uygundur ve yalnızcaM-RETkaçış tuşu olarak kalır - Emacs modu, terminal çıktısını almaya devam ederken tamponu salt okunur yapar ve
isearch,occur, işaretleme ve kopyalama gibi standart Emacs gezinmelerine izin verir- Normal giriş kabuğa iletilmez; yalnızca kasıtlı
C-yyapıştırması bracketed paste olarak gönderilir
- Normal giriş kabuğa iletilmez; yalnızca kasıtlı
- copy modu, kararlı seçim, gezinme ve kopyalama için terminal güncellemelerini durdurur
- Kopyalanan metinde yumuşak kaydırmadan kaynaklanan satır sonları kaldırılır
- Varsayılan
ghostel-readonly-fast-exit=tayarında karakter girişi ya da kopyalama sonrası otomatik olarak normal terminal oturumuna dönülür
- line modu, tuşları kabuğa anında göndermek yerine bir satırın Emacs tamponunda düzenlenmesini sağlar ve
RETile tek seferde gönderir- Eşzamansız çıktı veya yeni istem gelse bile yazılmakta olan girişi anlık görüntü olarak korur ve yeniden ekler
- OSC 133 varsa istem sınırlarını kullanır; yoksa sınırları
ghostel-prompt-regexpile bulur - Tam ekran TUI başladığında semi-char moduna geçer, TUI kapandıktan sonra yeniden line moduna döner
TAB, comint tamamlama ve isteğe bağlı bash programlanabilir tamamlamayı kullanır
- Fare sürükleme, çoklu tıklama, işaret etkinleştirme ve canlı giriş konumundan
isearchveyaconsult-lineile çıkma durumlarında seçim ve konumu korumak için varsayılan olarak copy moduna geçilir- TUI, DEC fare takibini etkinleştirmişse giriş modunda fare olayları ilgili programa iletilir
- Geçiş davranışı
ghostel-mouse-drag-input-mode,ghostel-mark-activation-input-mode,ghostel-point-leave-input-modeile değiştirilebilir
Terminal özellikleri ve render alma
- libghostty-vt aracılığıyla tam VT emülasyonu, 256 renk ve 24 bit renk, alternate screen, birden fazla alt çizgi stili ve rengi, kalın, italik, soluk, üstü çizili ve ters görüntü ile dört imleç şekli ve yanıp sönme desteği sunar
- Varsayılan
TERM=xterm-ghosttyve paketle gelen terminfo, DEC 2026 senkronize çıktı, Kitty klavyesi, true color, renkli alt çizgi ve odak bildirimi gibi özellikleri uygulamalara bildirir- OSC 4/10/11 sorguları sayesinde TUI’ler, Emacs yüz renklerinden palet ile ön plan/arka plan renklerini alabilir
- OSC 52 pano desteği vardır, ancak varsayılan olarak kapalı olduğu için paketle gelen terminfo
Msözelliğini ilan etmez
- Varsayılan scrollback 5MB, yani yaklaşık 5.000 satırdır ve Emacs tamponunda somutlaştırıldığı için
isearchveconsult-lineile aranabilir - OSC 8 köprülerinin yanı sıra normal HTTP/HTTPS URL’leri ve
/path/file.el:42biçimindeki dosya yollarını algılayarak tıklanabilir bağlantılara dönüştürür - Ghostty tuş kodlayıcısı ile Kitty klavye protokolünü, SGR fare olaylarını, DEC 1004 odak olaylarını ve dosya yolu ile metin sürükle-bırak işlemlerini destekler
- Render alıcı, değişmemiş satırları atlar, güncellemeleri zamanlayıcıyla toplu işler ve kare hızını uyarlamalı biçimde ayarlar
- Tuş girişinden hemen sonra gelen PTY yankısı, varsayılan 33 ms zamanlayıcıyı atlayarak anında render edilir
ghostel-sync-theme, paleti Emacs temasına uyacak şekilde yeniden senkronize eder
- 16 ANSI rengi,
term-color-*öğelerini devralan Emacs yüzleridir;ghostel-defaultile terminale özel yazı tipi, boyut, ön plan ve arka plan ayarlanabilir
Kabuk entegrasyonu ve Emacs çağrısı
- bash·zsh·fish·nushell için OSC 7 dizin takibi, OSC 133 istem geçişi, OSC 2 başlık takibi ve
ghostel_cmdotomatik olarak yapılandırılır- nushell’in kendi kabuk entegrasyonu OSC 7·133·2 sağlar ve
ghostel.nu,ghostel_cmdile giden SSH terminfo sarmalayıcısını ekler - macOS’in yerleşik bash 3.2 sürümü otomatik ekleme için kullanılan
ENV’yi yok saydığı için güncel bash kullanmak ya daghostel.bashdosyasını elle yüklemek gerekir
- nushell’in kendi kabuk entegrasyonu OSC 7·133·2 sağlar ve
- Kabuktan Elisp çağıran
ghostel_cmd, özel bir OSC 52;e uzantısı kullanır ve yalnızcaghostel-eval-cmdsizin listesindeki işlevleri çalıştırır- Varsayılan izinli işlevler
find-file,find-file-other-window,dired,dired-other-window,message’dır
- Varsayılan izinli işlevler
- Emacs yer imleri terminal çalışma dizinini ve tampon adını kaydeder
- Mevcut bir tampon varsa yeniden kullanır, yoksa kaydedilmiş dizinde yeni bir kabuk başlatır
- Scrollback ve oturum içeriğini kaydetmez
Parola·pano·bildirimler
sudo,ssh,gpg,passwdgibi parola istemleri algılandığındaread-passwdaçılır ve yanıt doğrudan PTY’ye gönderilir; böylece girişview-lossage, son tuş halkası veya klavye makrolarında kalmaz- Yerelde canonical mod ve echo devre dışı bırakma durumu
tcgetattrile doğrulanır - Yalnızca uzak kabuklarda regex tabanlı yedek algılama kullanılarak yerel raw-mode TUI’lerde yanlış pozitifler azaltılır
- Gönderimden sonra parola dizgesi hemen
clear-stringile temizlenir ghostel-password-prompt-functionsiçine auth-source, KeePass, pass gibi kaynaklar eklenebilir
- Yerelde canonical mod ve echo devre dışı bırakma durumu
- OSC 52 açıkça etkinleştirilirse uzak programlar Emacs kill ring’ini ve sistem panosunu ayarlayabilir; yapıştırma ise bracketed paste olarak gönderilir
- OSC 9 ve OSC 777 bildirimleri
ghostel-notification-functionişlevine iletilir- Varsayılan işleyici kuruluysa alert kullanır, değilse echo alanındaki
messageile yerine geçer
- Varsayılan işleyici kuruluysa alert kullanır, değilse echo alanındaki
- OSC 9;4 ilerleme durumu
remove,set,error,indeterminate,pausedurumlarını ve 0~100 değerini iletir- Varsayılan metin göstergesi ve spinner.el tabanlı animasyonlu gösterge sunulur
Kitty satır içi görseller
- Kitty graphics protocol için doğrudan yerleştirme ve U+10EEEE Unicode-placeholder yerleştirmesi desteklenir; böylece
timg,kitty +kitten icat,yazigibi araçların görselleri render edilir - PNG, gömülü stb kod çözücü ile işlenir ve RGB·RGBA·Gray·GrayAlpha verileri yerel modülde PPM’e dönüştürülür; bu yüzden ImageMagick gerekmez
- CSI 14·16·18
tboyut sorgularına yanıt verir veghostel-cell-pixel-scaleile fiziksel piksel oranı ayarlanabilir - Görsel işlemede şu kısıtlamalar vardır
- Alfa kanalı birleştirilmeden kaldırılır; bu nedenle yarı saydam kenarlar için uygun değildir
- Kitty source-rect kısmi kırpma desteklenmez ve açık hata döndürür
- Aynı tampondaki birden çok sanal yerleşim tek bir render’ı paylaşır ve en son gönderim önceliklidir
- Varsayılan olarak yalnızca satır içi base64’e izin verilir; dosya·geçici dosya·paylaşımlı bellek ortamları güvenlik için açıkça etkinleştirilmelidir
- Terminal başına varsayılan grafik depolama sınırı 320MiB’dir
TRAMP ve uzak terminfo
default-directorybir TRAMP yoluysa kabuk ilgili POSIX ana bilgisayarda çalıştırılır; SSH türü TRAMP yöntemleri iledockergibi kabuklarghostel-tramp-shellsile belirtilebilirlogin-shell, uzak kullanıcının giriş kabuğunugetent passwdile algılar- OSC 7 dizin takibi, mevcut TRAMP yöntemi·kullanıcısı·çok atlamalı önekini korur
- Windows uzak hedefleri bu POSIX kabuk·tty yolunda desteklenmez
- Uzak kabuk entegrasyonu varsayılan olarak enjekte edilmez ve iki yöntem sunulur
ghostel-tramp-shell-integration=tile geçici betik gönderilir ve çıkışta temizlenir- Kalıcı ana bilgisayarlar için
etc/shell/betikleri ve isteğe bağlı olarak terminfo doğrudan kurulabilir
- Uzakta
xterm-ghosttyterminfo yoksa terminal açılışı başarısız olabilir; bu durumdaghostel-ssh-install-terminfokurulumu yönetir- TRAMP çalıştırmaları, mevcut bağlantı üzerinden terminfo’yu geçici dizine gönderir ve çıkışta siler
- Yerel Ghostel’den çalıştırılan
ssh,ssh -Gile hedefi normalize eder, önbelleği denetler ve gerekirse tek bir ek bağlantıylatic -x -çalıştırır - Yerel terminfo hash’i önbellek anahtarına dahil edildiği için libghostty güncellendiğinde otomatik geçersiz kılınır; ancak uzakta ayrıca değiştirilmiş terminfo algılanamaz
ssh HOST cmd, ana bilgisayarsız seçenek çağrıları veya yereldeinfocmpbulunmaması durumunda kurulum atlanır
- Uzak ana bilgisayarı değiştirmek istemiyorsanız otomatik kurulumu kapatıp terminfo’yu elle kurabilirsiniz;
ghostel-termdeğerinixterm-256coloryaparsanız ilgili ayarlara gerek kalmaz, ancak Ghostty’ye özgü senkronize çıktı hızlı yolu da kaybolur
Emacs genişletmeleri
- evil-ghostel, Evil’in insert·normal durumlarını terminal imleciyle senkronize eder
- Hareket, ekleme, silme, değiştirme, replace, bracketed paste, readline undo ve duruma göre imleç şekillerini destekler
- alternate screen üzerindeki vim·less·htop’u etkilemez
ghostel-compile, komutları gerçek PTY üzerinde çalıştırırkencompilation-modebenzeri başlık·altbilgi·hata vurgulama venext-errorgezinmesi sunar- Varsayılan olarak salt okunur gezinme sağlar; prefix argümanı verilirse etkileşimli girişi iletir
- Çalışma sırasında bile
C-c C-jveC-c C-eveyaC-c C-tile etkileşimli giriş ve derleme gezinmesi arasında geçiş yapılabilir ghostel-compile-global-mode,compile,recompile,project-compilevecompilation-startçağrılarını Ghostel’e yönlendirirgrep-modevarsayılan olarak mevcut uygulamayı korur
ghostel-eshell-visual-command-mode, Eshell’deki vim·htop·less gibi görsel komutları (visual command)term-modeyerine özel Ghostel tamponlarında çalıştırırghostel-comint-mode, comint çıktı akışınılibghostty-vtile işleyerek true color, çeşitli alt çizgiler, OSC 8 bağlantıları ve OSC 7 dizin güncellemeleri sağlar- Tam bir terminal olmadığı için imleç yerleştirme, alternate screen ve tam ekran yeniden çizimi atılır; bu yüzden
htopveyalessiçin uygun değildir
- Tam bir terminal olmadığı için imleç yerleştirme, alternate screen ve tam ekran yeniden çizimi atılır; bu yüzden
ghostel-ime-mode, Hangul gibi tampona doğrudan karakter ekleyen Elisp giriş yöntemlerinin çıktısını sildikten sonra UTF-8 olarak PTY’ye iletir- Quail birleştirmesi sırasında render ertelenir; böylece tampon birleştirme dizgesinin üzerine yazmaz
Performans
- Apple M4 Max ve Emacs 32.0.50 üzerinde gerçek process pipe üzerinden 1MB gönderilip yaklaşık 1.000 satırlık scrollback korunurken elde edilen sonuçlar şöyle:
- Normal ASCII: Ghostel 75MB/s, bağlantı algılama devre dışı Ghostel 76MB/s, vterm 18MB/s, eat 6.2MB/s, yerleşik term 7.2MB/s
- URL yoğun çıktılar: Ghostel 36MB/s, bağlantı algılama devre dışı Ghostel 78MB/s, vterm 15MB/s, eat 4.5MB/s, term 5.9MB/s
- URL ve dosya yolu algılama, yeniden çizim yolunun dışındaki birleşik bir zamanlayıcıda çalıştığı için normal çıktıda neredeyse hiç maliyet yaratmıyor; ancak bağlantı yoğun çıktılarda aktarım hızı yaklaşık yarıya düşüyor
- Adil karşılaştırma için yukarıdaki değerler Emacs process yolunu kullandı; varsayılan yerel native PTY ise Zig arka plan iş parçacığının çıktıyı okuması sayesinde sürekli büyük hacimli dökümlerde yaklaşık 2 kat daha hızlı
- 10MB dosyanın
catile okunmasında 5 çalışmanın medyanı: native Ghostel yaklaşık 110ms, Emacs PTY Ghostel yaklaşık 220ms, vterm yaklaşık 550ms, eat yaklaşık 1,8 saniye- vterm ve eat aktarım sırasında Emacs ana iş parçacığını senkron olarak meşgul ederken Ghostel native PTY çıktıyı arka planda ayrıştırdığı için arayüz yanıt vermeye devam ediyor
M-x ghostel-debug-typing-latency, tuş başına PTY, render ve toplam gecikmenin minimum, medyan, p99 ve maksimum değerlerini ölçüyor
vterm ve eat'ten farkları
- vterm, C tabanlı libvterm native modülünü kullanır; eat ise saf Elisp ile yazılmıştır, bu da derleme gerektirmeden taşınabilir olmasını sağlar ama aktarım hızını düşürür
- Yalnızca Ghostel; Kitty klavye ve grafiklerini, beş tür alt çizgiyi, OSC 8'i, OSC 4/10/11'i, OSC 9 ve 777 bildirimlerini, OSC 9;4 ilerleme durumunu ve DEC 2026'nın tamamını destekler
- eat, Sixel görsellerini destekler ancak Kitty görsellerini desteklemez; vterm ise iki görsel protokolünü de desteklemez
- Ghostel ve eat, SGR fare olaylarını TUI'ye iletir; vterm ise tıklamaları Emacs point konumunu taşımak için kullanır
- Ghostel ve eat line mode sunar, vterm sunmaz
- Ghostel, çıktının durduğu copy mode ile çıktının akmaya devam ettiği Emacs mode'u birlikte sunar
- vterm durdurulmuş bir copy mode sunar ve eat'in salt okunur Emacs mode'u güncellenmeye devam eder
- Ghostel shell integration'ı otomatik olarak enjekte eder; vterm ve eat'te ise script'lerin elle yüklenmesi gerekir
- Parola istemleri Ghostel tarafından otomatik algılanır; eat yalnızca manuel gönderim komutları sunar, vterm ise girdiyi ayrıca yakalamaz
İç mimari
- Yerel buffer'larda Zig varsayılan olarak PTY'yi açar, child process'i oluşturur ve çıktıyı arka plan iş parçacığında
libghostty-vt'ye iletir- OSC callback'leri veya yeniden çizim gerektiğinde Lisp event'leri Emacs pipe'ına gönderilir ve bunları
ghostel--events-filterişler - Büyük hacimli çıktı Emacs process filter içinden bayt bayt geçmez
- OSC callback'leri veya yeniden çizim gerektiğinde Lisp event'leri Emacs pipe'ına gönderilir ve bunları
- TRAMP buffer'larında uzak oluşturma ve file handler'ları korumak için Emacs process'i çıktıyı alır ve bunu aynı terminal modeline senkron biçimde iletir
- Tuş girdileri libghostty encoder'dan geçirilip anında PTY'ye yazılır; çıktı ise VT parser ve invalidation aşamalarından sonra etkileşimli echo ise hemen, değilse birleşik zamanlayıcıda
Renderer.zigtarafından değişen satırlar güncellenir - Terminal render işlemi; satır değiştirme, tam yeniden çizim, boyut değiştirme ve reflow, scrollback ekleme/silme gibi işlemlerle Emacs buffer'ını değiştirdiğinden renderer, point, mark ve pencere konumunu korumaktan sorumludur
- Elisp; girdiden sonra canlı viewport'a geçilip geçilmeyeceği veya her modda gezinme durumunun korunup korunmayacağı gibi politika ve kullanıcı niyetini belirler
- Renderer değişikliklerini Elisp'in redraw öncesi/sonrası sezgileriyle düzeltmeye çalışmak; kullanıcı kaydırması, redisplay düzeltmesi, boyut değişimi ve içeriğin yeniden yazılması nedenlerini ayırt etmeyi zorlaştırdığı için kaçınılmalıdır
Testler ve lisans
- Testler ERT tabanlıdır; Elisp testleri Zig modülü olmadan çalıştırılabilir,
nativeetiketli testler içinse derlenmiş modül gerekir- Zig birim testleri, tam testler, Evil genişletme testleri ve hızlı benchmark'lar için Makefile hedefleri sunulur
- Hata ve özellik talepleri ile pull request'ler GitHub deposunda kabul edilir; render sorunlarında yeniden üretim komutu, escape sequence, Emacs sürümü ve platform bilgileri gerekir
M-x ghostel-debug-infoile tanılama event'leri toplanabilir- Ghostel, GNU GPL v3 veya üzeri ile dağıtılan özgür bir yazılımdır
3 yorum
Korece giriş çalışmıyor gibi görünüyor.
Ctrl-\yapsam da giriş yöntemi Koreceye geçiyormuş gibi oluyor ama asıl yazarken yalnızca İngilizce giriş çalışıyor gibi görünüyor.Biraz hayal kırıklığı.
Lobste.rs görüşleri
ghostel-projectkomutuyla o projeye bağlı Ghostel’i kullanıyorumProje için bir instance zaten varsa doğrudan ona geçtiği için terminaller arasında gidip gelmek çok hızlı oluyor
vterm’de eksik bulduğum noktalar var ama terminalde bile editör komutlarını aynen kullanabilmek gerçekten çok iyiEmacs’ta terminal emülatörlerinden söz edilince sık sık
cd/mv/ls/cp/rm/mkdr/...yerinedired, build komutları yerinecompilekullanmak varken neden gerekli olduğu soruluyor. Ama karmaşık işler yapmasam bile terminal bana daha tanıdık ve esnek geliyorÖzellikle Doom Emacs içinde terminale bağımlılığı azaltmanın yollarını anlatan bir rehber varsa takip etmek isterim. Gelişmiş ayarlarla projeler arasında hızla gezinebilmek her zaman etkileyici geliyor
vtermgibi ortamlarda bozuluyor ve satır boyutu hesaplama sorunları yüzündenjjekranı bazen tamamen dağılıyor; bu da sinir bozucuSonunda yan tarafta Ghostty açık tutuyorum ama bir gün tüm araçların Emacs içinde düzgün çalışmasını umuyorum
eshell’i çok kullanıyorumeat-eshellkullanınca build araçları, Podman CLI gibi terminal emülasyonu gerektiren programlar ve TUI uygulamaları da doğrudaneshellbuffer’ında çalışabildiği için,eshelli sık kullananlar açısından oyunun kurallarını değiştiren bir özellikeshelli ayrıca hangi amaçla kullandığını merak ediyorum.eshelli çok kullanmadığım için amacını kaçırıyormuşum gibi sık sık hissediyorumHacker News yorumları
Ghostel’in bakımcısıyım. baokaola ile gelecek hafta Show HN paylaşmayı planlıyorduk ama biri bağlantıyı bizden önce göndermiş
Hızlıca göz atmak için GitHub deposu daha kullanışlı: https://github.com/dakra/ghostel
Ghostel, libghostty-vt tabanlı bir Emacs terminal emülatörü; vterm ve eat ile özellik karşılaştırmasını https://dakra.github.io/ghostel/#ghostel-vs-vterm adresinde görebilirsiniz. Performans ve doğruluğu görsellerle karşılaştıran bir materyal de var: https://gist.github.com/dakra/4a0b76ebcf5d52338e134864378465...
Kişisel olarak yalnızca vterm/eat’i değil, kitty ve Ghostty gibi harici terminalleri de bununla değiştirdim. Terminal metnini sıradan bir Emacs buffer’ı gibi ele almak, başka terminallerde olmayan sayısız genişletme olanağı açıyor. Scrollback içinde arama yaptıktan sonra yalnızca klavyeyle gezinmek ve bir paragrafı seçip kopyalamak gibi basit işler bile Emacs kullanıcıları için çok daha doğal ve hızlı
Ghostel’i denedikten sonra hâlâ harici terminal kullanıyorsanız, bunun eksik özelliklerden mi yoksa bazı süreçleri Emacs dışında çalıştırmak istemenizden mi kaynaklandığını merak ediyorum. GitHub’da da aktif olarak ilgileniyoruz; sorun varsa lütfen issue açın
f1tuşunu yarı karakter modu ile kopyalama modu arasında geçişe atadım ve bir komut çalıştırmadan önce “Emacs ölürse ya da zorla kapatılırsa sorun olur mu?” diye düşünüyorum. Sorun olacaksa normal terminalde çalıştırıyorumGhostel aynı düzeyde entegre değil ve evil-ghostel-mode gibi eklentilerin de sınırları var. Bunu iyileştirme planı var mı, yoksa mimari olarak kabul edilmesi gereken bir kısıt mı merak ediyorum; eat-eshell-mode’a karşılık gelen bir özellik gelirse harika olur
Başlıkta Emacs geçmeli. Genel terminal emülatörü ile Emacs için terminal emülatörü farklı şeyler
.el, Emacs Lisp dosya uzantısıdırYakın zamanda vterm’den Ghostel’e geçtim; genel olarak çok daha iyi. Her karede tüm terminali güncelleyen gösterişli TUI uygulamalarını bile düzgün çalıştıracak kadar belirgin biçimde hızlı, giriş işleme daha kararlı ve ELisp API’si de iyi
Yine de terminali düzgün temizleyemeyip mevcut prompt’un üstünde artıklar bıraktığı ya da tamamen kilitlenip buffer’ı kapatıp yeniden başlatmam gerektiği oldu. Günlük kullanım için yeterli ve geleceği parlak, ancak olgun bir ürün olması için hata düzeltmeleri ve son rötuşlara daha ihtiyaç var
Ekranın üst tarafında artık kalması https://github.com/dakra/ghostel/issues/495 olabilir; son sürümde düzeltildi ama başka bir hata da olabilir. Zor kısım, libghostty-vt’nin iç verilerini Emacs buffer’ına kopyalarken yalnızca gerekli kısımları değiştirmek. Bunu geniş kapsamda doğrulayan özellik tabanlı testler var ama bazen sorunlar kaçabiliyor
Mevcut son sürümde yaşam döngüsü yönetimi iyileştirildi, bu yüzden bazı sorunlar birlikte çözülmüş olabilir. Henüz erken aşamada olduğumuz için yavaş yavaş cilalamayı hedefliyoruz
Farklı giriş modlarını verimli kullanmaya dair gerçek örnekler olsa iyi olurdu. Terminal tüm tuş girişlerini ister, editör de kendi komutları için tuşları kullanmak ister; bu yüzden editör içine gömülü terminalde klavyenin sahipliğini değiştiren modlar mutlaka gerekir
Neovim’in
:termözelliğinde yalnızca iki mod varken Ghostel’de neden beş mod olduğunu anlamazsanız aşırı tasarlanmış sanmak kolay. Aslında daha fazla sorunu çözdüğü için karmaşık; ek modlar nvim’in ele almadığı işler için isteğe bağlı araçlar. Ancak bu avantajın pratikte nasıl verimli kullanılacağı yeterince net değilvterm kullanırken zorlandığım sırada Ghostel’i denedim; harika, ana terminalim bile olabilir
Bir aydan uzun süredir kullanıyorum; Codex özetinde geçen kod referanslarına tıklayıp doğrudan Emacs buffer’ında açma özelliği özellikle hoşuma gidiyor
ghostel-previous-hyperlinkveyaghostel-next-hyperlinkile yakın zamanda gösterilen hyperlink’ler arasında hızla gezinebilirsinizrepeat-mode map’i de kurulduğu için çıktıda üç URL ya da dosya bağlantısı varsa yalnızca
C-c C-p p p RETile ilk bağlantıyı açabiliyorum; sık kullanıyorumGhostel ve Claude Code entegrasyonu sayesinde Emacs kullanımım epey arttı; artık Emacs iş akışımın merkezi hub’ı oldu
Birkaç pencerede yaklaşık 10 terminal açınca Ghostty neredeyse her gece çöküyordu. Bu yüzden Ghostty’yi doğru düzgün kullanamadım ve her gün kullandığım aracın içine gömmek de istemem
Milyonlarca dosyası olan bir dosya sisteminde mümkün olduğunca çok shell’de
ls -lRde çalıştırdım ama hiçbir sorun ya da çökme olmadı. Aylar boyunca her gün, tüm gün yoğun kullanmama rağmen çökme ya da şüpheli davranış görmedimBelirli bir Ghostty sürümündeki bir hata ya da GPU sürücüsü gibi başka yazılımlarla tuhaf bir etkileşim olma ihtimali yüksek görünüyor. Burada NVIDIA GPU kullanıyorum
“Yerel modül önceden derlenmiş bir binary ve ilk kullanımda otomatik olarak indiriliyor” deniyor; neden dağıtım paketine dahil edilmediğini merak ediyorum
Emacs yerel modülleri kullanan popüler paket jinx de vterm gibi ilk kullanımda derleme yöntemi sunuyor. Dolayısıyla Emacs paketlerinde kullanıcı dostu kurulum desteklemek için pratikte ilk çalıştırmada indirmek ya da derlemekten başka yol yok