1 puan yazan GN⁺ 4 시간 전 | 3 yorum | WhatsApp'ta paylaş
  • Ghostel, Ghostty ile aynı libghostty-vt motorunu 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 cat iş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-windows için sunulur
    • Diğer platformlar veya kaynak koddan derleme için Zig 0.15.2 gerekir
  • MELPA, Emacs 30 ve üzerindeki use-package :vc, :load-path ve elle require yöntemleriyle kurulabilir; terminal M-x ghostel ile açılır
  • Yerel modül yoksa ghostel-module-auto-install ayarına göre indirme veya kaynaktan derleme önerilir
    • M-x ghostel-download-module en düşük desteklenen ikiliyi indirir; önek argümanı verilirse sürüm etiketi seçilebilir
    • M-x ghostel-module-compile, modülü zig build ile derler
    • Paket dizini yeniden kurulabiliyorsa ghostel-module-directory ayrı bir konuma ayarlanabilir
  • Kaynaktan derleme, üretilmiş vendor/emacs-module.h dosyasını içerdiğinden genelde yerel Emacs başlıklarına ihtiyaç duymaz; başlık konumu EMACS_INCLUDE_DIR veya EMACS_BIN_DIR ile değiştirilebilir
    • Derlenmiş xterm-ghostty terminfo’su etc/terminfo/ içinde yer alır ve BSD ile ncurses arasında taşınabilir biçimdedir

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.dll ve OpenConsole.exe destek 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-h gibi kısayolları kendisi kullanan TUI’ler için uygundur ve yalnızca M-RET kaçış 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-y yapıştırması bracketed paste olarak gönderilir
  • 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=t ayarı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 RET ile 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-regexp ile 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 isearch veya consult-line ile çı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-mode ile 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-ghostty ve 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 isearch ve consult-line ile aranabilir
  • OSC 8 köprülerinin yanı sıra normal HTTP/HTTPS URL’leri ve /path/file.el:42 biç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-default ile 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_cmd otomatik olarak yapılandırılır
    • nushell’in kendi kabuk entegrasyonu OSC 7·133·2 sağlar ve ghostel.nu, ghostel_cmd ile 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 da ghostel.bash dosyasını elle yüklemek gerekir
  • Kabuktan Elisp çağıran ghostel_cmd, özel bir OSC 52;e uzantısı kullanır ve yalnızca ghostel-eval-cmds izin 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
  • 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, passwd gibi parola istemleri algılandığında read-passwd açı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 tcgetattr ile 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-string ile temizlenir
    • ghostel-password-prompt-functions içine auth-source, KeePass, pass gibi kaynaklar eklenebilir
  • 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-function işlevine iletilir
    • Varsayılan işleyici kuruluysa alert kullanır, değilse echo alanındaki message ile yerine geçer
  • OSC 9;4 ilerleme durumu remove, set, error, indeterminate, pause durumları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, yazi gibi 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 t boyut sorgularına yanıt verir ve ghostel-cell-pixel-scale ile 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-directory bir TRAMP yoluysa kabuk ilgili POSIX ana bilgisayarda çalıştırılır; SSH türü TRAMP yöntemleri ile docker gibi kabuklar ghostel-tramp-shells ile belirtilebilir
    • login-shell, uzak kullanıcının giriş kabuğunu getent passwd ile 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=t ile 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-ghostty terminfo yoksa terminal açılışı başarısız olabilir; bu durumda ghostel-ssh-install-terminfo kurulumu 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 -G ile hedefi normalize eder, önbelleği denetler ve gerekirse tek bir ek bağlantıyla tic -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 yerelde infocmp bulunmaması durumunda kurulum atlanır
  • Uzak ana bilgisayarı değiştirmek istemiyorsanız otomatik kurulumu kapatıp terminfo’yu elle kurabilirsiniz; ghostel-term değerini xterm-256color yaparsanı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ırken compilation-mode benzeri başlık·altbilgi·hata vurgulama ve next-error gezinmesi 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-j ve C-c C-e veya C-c C-t ile etkileşimli giriş ve derleme gezinmesi arasında geçiş yapılabilir
    • ghostel-compile-global-mode, compile, recompile, project-compile ve compilation-start çağrılarını Ghostel’e yönlendirir
    • grep-mode varsayılan olarak mevcut uygulamayı korur
  • ghostel-eshell-visual-command-mode, Eshell’deki vim·htop·less gibi görsel komutları (visual command) term-mode yerine özel Ghostel tamponlarında çalıştırır
  • ghostel-comint-mode, comint çıktı akışını libghostty-vt ile 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 htop veya less için uygun değildir
  • 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 cat ile 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-filter işler
    • Büyük hacimli çıktı Emacs process filter içinden bayt bayt geçmez
  • 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.zig tarafı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, native etiketli 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-info ile tanılama event'leri toplanabilir
  • Ghostel, GNU GPL v3 veya üzeri ile dağıtılan özgür bir yazılımdır

3 yorum

 
lum7671 1 시간 전

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ığı.

 
GN⁺ 2 시간 전
Lobste.rs görüşleri
  • Emacs terminal emülasyonu için nihai çözümün Ghostel olduğunu düşünüyorum. Basit, tek seferlik terminal pencereleri için gerçek Ghostty kullanıyorum; proje çalışmaları içinse ghostel-project komutuyla o projeye bağlı Ghostel’i kullanıyorum
    Proje için bir instance zaten varsa doğrudan ona geçtiği için terminaller arasında gidip gelmek çok hızlı oluyor
  • Doom Emacs’ı yeniden denemek ve entegrasyonun ne kadar iyi olduğunu görmek istiyorum. En son vazgeçme nedenlerimden biri Emacs terminalinin kararsızlığıydı
    • Ben de denemek isterim. vterm’de eksik bulduğum noktalar var ama terminalde bile editör komutlarını aynen kullanabilmek gerçekten çok iyi
      Emacs’ta terminal emülatörlerinden söz edilince sık sık cd/mv/ls/cp/rm/mkdr/... yerine dired, build komutları yerine compile kullanmak 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
    • Emacs terminal emülasyonu neredeyse tamamen kullanılabilir bir seviyeye gelmiş olsa da bazı nesil terminal araçları vterm gibi ortamlarda bozuluyor ve satır boyutu hesaplama sorunları yüzünden jj ekranı bazen tamamen dağılıyor; bu da sinir bozucu
      Sonunda 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
  • eat-eshell’e karşılık gelen bir özellik görünmediği için benim için tercih etmesi zor. Daha hızlı terminal emülasyonuna ilgim var ama eshell’i çok kullanıyorum
    eat-eshell kullanınca build araçları, Podman CLI gibi terminal emülasyonu gerektiren programlar ve TUI uygulamaları da doğrudan eshell buffer’ında çalışabildiği için, eshelli sık kullananlar açısından oyunun kurallarını değiştiren bir özellik
    • Bunu terminalle de yapabilirsin ama eshelli 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 hissediyorum
 
GN⁺ 4 시간 전
Hacker 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

    • Şu ana kadar Ghostel gayet iyi çalışıyor. f1 tuş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ıyorum
    • Magit gibi araçlar büyük diff’leri ayrıştırırken Emacs’ın tamamı donabildiği için, sonunda ayrı bir terminali kullanmaya devam ediyorum
    • eshell’de metni diğer Emacs buffer’larıyla tamamen aynı şekilde işleyebilirsiniz. Bir kelimeyi tırnak içine alan bir fonksiyonu bir tuşa bağlarsanız eshell’de de aynen çalışır; evil-mode, xah-fly-keys ve ispell’in hepsini kullanabilmek de belirleyici avantaj
      Ghostel 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
    • WezTerm’deki desen tabanlı Quick-select modu olsa iyi olurdu. Bu özelliği öğrendiğimden beri başka terminal kullanmak istemeyecek kadar vazgeçilmez oldu
    • Doom Emacs’te bir süredir sorunsuz kullanıyorum. Lazygit veya Reasonix gibi ekranı kaydıran programlar başka emülatörlerde başarısız olurken Ghostel’de neden çalışıyor merak ediyorum. Uygulamada ya da kütüphanede özel bir işlem mi var, bilmek isterim
  • Başlıkta Emacs geçmeli. Genel terminal emülatörü ile Emacs için terminal emülatörü farklı şeyler

  • Yakı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

    • Ghostel’in ortak bakımcısıyım. Yeniden üretme adımları olmasa bile işe yarar bilgi oluşursa lütfen issue açın ya da başka bir yolla iletin
      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ğil

  • vterm kullanırken zorlandığım sırada Ghostel’i denedim; harika, ana terminalim bile olabilir

    • vterm’den eat üzerinden Ghostel’e geçtim ve en azından şu ana kadar Ghostel’in en iyisi olduğunu düşünüyorum
  • 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

    • Yalnızca fareyle değil, ghostel-previous-hyperlink veya ghostel-next-hyperlink ile yakın zamanda gösterilen hyperlink’ler arasında hızla gezinebilirsiniz
      repeat-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 RET ile ilk bağlantıyı açabiliyorum; sık kullanıyorum
  • Ghostel ve Claude Code entegrasyonu sayesinde Emacs kullanımım epey arttı; artık Emacs iş akışımın merkezi hub’ı oldu

    • Buradaki entegrasyonla, modelin bir sunucu üzerinden Emacs’ı doğrudan kontrol etmesi mi kastediliyor, merak ediyorum
  • 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

    • Gentoo Linux’ta Ghostty 1.1.3 kullanıyorum; şu anda yaklaşık 12 pencerenin her birinde 20 kadar sekme açıp 100’den fazla shell instance’ı çalıştırıyorum
      Milyonlarca dosyası olan bir dosya sisteminde mümkün olduğunca çok shell’de ls -lR de ç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örmedim
      Belirli 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

    • MELPA ve ELPA’da platforma özel dosya eklemenin bir yolu yok ve her şey Git checkout olarak dağıtılıyor. Dağıtıma dahil etmek için tüm platformların modül binary’lerini depoya koymak gerekir; toplamda 10 MB’ı aşıyor
      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