1 poin oleh GN⁺ 4 jam lalu | 3 komentar | Bagikan ke WhatsApp
  • Ghostel adalah emulator terminal Emacs yang menggunakan mesin libghostty-vt yang sama seperti Ghostty; modul native Zig menangani status terminal, rendering, serta I/O PTY lokal, sementara Elisp mengelola keymap, buffer, perintah, dan proses jarak jauh
  • Mendukung protokol keyboard dan grafis Kitty, hyperlink OSC 8, kueri warna OSC 4/10/11, keluaran sinkron DEC 2026, dan 5 mode input, serta otomatis menerapkan integrasi shell untuk bash, zsh, fish, dan nushell lokal
  • Mendukung Emacs 28.1 atau lebih baru serta macOS, Linux, FreeBSD, dan Windows native, dan saat pertama kali digunakan dapat otomatis mengunduh modul pra-bangun sesuai platform sehingga instalasi umum tidak memerlukan toolchain Zig
  • Benchmark yang memproses output 1MB pada Apple M4 Max dan Emacs 32.0.50 mencatat Ghostel 75MB/s, vterm 18MB/s, dan eat 6.2MB/s untuk ASCII biasa, sementara PTY native menyerap tugas cat 10MB dalam sekitar 110ms
  • Juga menyediakan terminal jarak jauh TRAMP, perlindungan input kata sandi, gambar inline Kitty, serta integrasi dengan compile, Eshell, Comint, Evil, dan input method, tetapi ada batasan platform dan protokol untuk target jarak jauh dan pemrosesan gambar

Arsitektur dan instalasi

  • Ghostel terinspirasi oleh desain dua lapis emacs-libvterm, tetapi menggunakan mesin VT modern milik Ghostty alih-alih libvterm
    • Modul Zig menangani status terminal, rendering, encoding tombol, PTY lokal, dan pembacaan latar belakang
    • Elisp bertanggung jawab atas keymap, buffer, perintah, integrasi proyek, dan proses jarak jauh TRAMP
  • Persyaratannya adalah Emacs 28.1 atau lebih baru yang mendukung modul dinamis serta macOS, Linux, FreeBSD, atau Windows native
    • Binary pra-bangun disediakan untuk aarch64-macos, x86_64-macos, x86_64-linux, aarch64-linux, x86_64-freebsd, x86_64-windows, dan aarch64-windows
    • Platform lain atau build dari source memerlukan Zig 0.15.2
  • Dapat diinstal melalui MELPA, use-package :vc pada Emacs 30 atau lebih baru, :load-path, atau require manual, lalu buka terminal dengan M-x ghostel
  • Jika modul native tidak ada, Ghostel akan menawarkan unduhan atau kompilasi dari source sesuai pengaturan ghostel-module-auto-install
    • M-x ghostel-download-module mengambil binary minimum yang didukung, dan dengan argumen prefiks dapat memilih tag rilis
    • M-x ghostel-module-compile membangun modul dengan zig build
    • Jika direktori paket mungkin diinstal ulang, ghostel-module-directory dapat diarahkan ke lokasi terpisah
  • Build dari source menyertakan vendor/emacs-module.h yang dihasilkan, sehingga umumnya tidak memerlukan header Emacs lokal, dan lokasi header dapat diubah dengan EMACS_INCLUDE_DIR atau EMACS_BIN_DIR
    • xterm-ghostty terminfo yang telah dikompilasi disertakan di etc/terminfo/ dan berformat portabel untuk BSD serta ncurses

Dukungan Windows

  • Pada Emacs Windows native, terminal lokal dijalankan dengan ConPTY, dan arsitektur DLL modul harus cocok dengan arsitektur Emacs, bukan Windows
  • Bersama modul pra-bangun, file pendukung conpty.dll dan OpenConsole.exe juga diunduh; jika file ini tidak ada, akan diganti dengan API ConPTY bawaan Windows
  • Build Emacs kustom khusus seperti CRT statis hanya didukung sebatas upaya terbaik
  • Terminal TRAMP di Windows hanya mendukung target jarak jauh POSIX dan PTY berada di host jarak jauh, sementara pengubahan ukuran jendela dinamis saat ini belum didukung

5 mode input

  • Mode semi-char bawaan mengirim sebagian besar tombol ke terminal, tetapi mempertahankan pengecualian seperti C-c, C-x, C-u, C-h, M-x, M-:, dan C-\ untuk Emacs
    • Menyediakan tombol untuk mengirim interrupt, suspend, EOF, bracketed paste, menghapus scrollback, serta berpindah antar prompt dan hyperlink
  • Mode char mengirim semua tombol ke terminal, sehingga cocok untuk TUI yang menggunakan C-x, M-x, dan C-h sendiri, dengan hanya M-RET yang tersisa sebagai tombol keluar
  • Mode Emacs tetap menerima output terminal sambil mengubah buffer menjadi read-only sehingga memungkinkan navigasi Emacs standar seperti isearch, occur, penandaan, dan penyalinan
    • Input biasa tidak diteruskan ke shell, dan hanya paste C-y yang disengaja yang dikirim sebagai bracketed paste
  • Mode copy menghentikan pembaruan terminal agar pemilihan, navigasi, dan penyalinan bisa dilakukan dengan stabil
    • Pada teks yang disalin, pemisah baris akibat soft wrap dihapus
    • Dengan nilai bawaan ghostel-readonly-fast-exit=t, input karakter atau selesai menyalin akan otomatis kembali ke sesi terminal biasa
  • Mode line tidak langsung mengirim tombol ke shell, melainkan mengedit satu baris di buffer Emacs lalu mengirimkannya sekaligus saat RET
    • Meski output asinkron atau prompt baru datang, input yang sedang diketik dipertahankan sebagai snapshot lalu disisipkan kembali
    • Jika ada OSC 133, batas prompt digunakan; jika tidak, batas dicari dengan ghostel-prompt-regexp
    • Saat TUI layar penuh dimulai, mode akan beralih ke semi-char lalu kembali ke mode line setelah TUI ditutup
    • TAB menggunakan pelengkapan comint dan pelengkapan programmable bash opsional
  • Drag mouse, multi-klik, aktivasi mark, atau ketika posisi input aktif ditinggalkan melalui isearch atau consult-line, secara bawaan akan beralih ke mode copy untuk melindungi seleksi dan posisi
    • Jika TUI mengaktifkan pelacakan mouse DEC, event mouse dalam mode input akan diteruskan ke program tersebut
    • Perilaku peralihan dapat diubah dengan ghostel-mouse-drag-input-mode, ghostel-mark-activation-input-mode, dan ghostel-point-leave-input-mode

Fitur terminal dan rendering

  • Melalui libghostty-vt, mendukung emulasi VT penuh, 256 warna dan warna 24-bit, alternate screen, berbagai gaya dan warna garis bawah, tebal, miring, redup, coret, inversi, serta empat bentuk kursor dan kedipan
  • TERM=xterm-ghostty bawaan dan terminfo yang dibundel memberi tahu aplikasi tentang fitur seperti keluaran sinkron DEC 2026, keyboard Kitty, true color, garis bawah berwarna, dan pelaporan fokus
    • Dengan kueri OSC 4/10/11, TUI dapat memperoleh palet serta warna foreground dan background dari face Emacs
    • Clipboard OSC 52 didukung, tetapi dinonaktifkan secara bawaan sehingga terminfo bawaan tidak mengiklankan kemampuan Ms
  • Scrollback bawaan adalah 5MB, sekitar 5.000 baris, dan diwujudkan ke dalam buffer Emacs sehingga dapat dicari dengan isearch dan consult-line
  • Selain hyperlink OSC 8, URL HTTP·HTTPS biasa dan path file berbentuk /path/file.el:42 juga dideteksi lalu dijadikan tautan yang bisa diklik
  • Mendukung encoder tombol Ghostty dan protokol keyboard Kitty, event mouse SGR, event fokus DEC 1004, serta drag-and-drop path file dan teks
  • Renderer melewati baris yang tidak berubah, mengelompokkan pembaruan dengan timer, dan menyesuaikan frame rate secara adaptif
    • Echo PTY yang datang tepat setelah input tombol akan melewati timer bawaan 33ms untuk langsung dirender
    • ghostel-sync-theme menyinkronkan ulang palet agar sesuai dengan tema Emacs
  • 16 warna ANSI adalah face Emacs yang mewarisi term-color-*, dan ghostel-default dapat digunakan untuk mengatur font, ukuran, foreground, dan background khusus terminal

Integrasi shell dan pemanggilan Emacs

  • Untuk bash, zsh, fish, dan nushell, pelacakan direktori OSC 7, perpindahan prompt OSC 133, pelacakan judul OSC 2, serta ghostel_cmd dikonfigurasi otomatis
    • Integrasi shell bawaan nushell menyediakan OSC 7, 133, dan 2, sementara ghostel.nu menambahkan ghostel_cmd dan wrapper terminfo SSH outbound
    • bash 3.2 bawaan macOS mengabaikan ENV yang dipakai untuk injeksi otomatis, jadi Anda perlu memakai bash yang lebih baru atau memuat ghostel.bash secara manual
  • ghostel_cmd, yang memanggil Elisp dari shell, memakai ekstensi OSC 52;e khusus dan hanya menjalankan fungsi yang ada dalam allowlist ghostel-eval-cmds
    • Fungsi yang diizinkan secara bawaan adalah find-file, find-file-other-window, dired, dired-other-window, dan message
  • Bookmark Emacs menyimpan direktori kerja terminal dan nama buffer
    • Jika buffer yang ada sudah tersedia, buffer itu akan dipakai ulang; jika tidak, shell baru dijalankan dari direktori yang tersimpan
    • Scrollback dan isi sesi tidak disimpan

Kata sandi, clipboard, dan notifikasi

  • Saat mendeteksi prompt kata sandi seperti sudo, ssh, gpg, dan passwd, Ghostel membuka read-passwd lalu mengirim jawabannya langsung ke PTY, sehingga input tidak tersisa di view-lossage, recent key ring, atau keyboard macro
    • Di lokal, mode canonical dan penonaktifan echo diperiksa lewat tcgetattr
    • Pada shell jarak jauh, deteksi cadangan berbasis regex hanya dipakai di sana untuk mengurangi false positive pada TUI raw-mode lokal
    • Setelah dikirim, string kata sandi segera diproses dengan clear-string
    • Sumber seperti auth-source, KeePass, dan pass dapat ditambahkan ke ghostel-password-prompt-functions
  • Jika OSC 52 diaktifkan secara eksplisit, program jarak jauh dapat mengatur kill ring Emacs dan clipboard sistem, sementara paste dikirim sebagai bracketed paste
  • Notifikasi OSC 9 dan OSC 777 diteruskan ke ghostel-notification-function
    • Handler bawaan memakai alert bila terpasang, dan jika tidak, akan diganti dengan message di area echo
  • Progres OSC 9;4 mengirim status remove, set, error, indeterminate, dan pause, beserta nilai 0–100
    • Disediakan indikator teks bawaan dan indikator animasi berbasis spinner.el

Gambar inline Kitty

  • Mendukung penempatan langsung dan penempatan placeholder Unicode U+10EEEE dari Kitty graphics protocol, sehingga dapat merender gambar dari timg, kitty +kitten icat, yazi, dan lainnya
  • PNG diproses dengan decoder stb bawaan, sedangkan data RGB, RGBA, Gray, dan GrayAlpha dikonversi menjadi PPM di modul native, sehingga ImageMagick tidak diperlukan
  • Menjawab kueri ukuran CSI 14, 16, dan 18 t, dan rasio piksel fisik dapat diatur dengan ghostel-cell-pixel-scale
  • Pemrosesan gambar memiliki batasan berikut
    • Kanal alfa tidak dikomposisikan melainkan dibuang, sehingga kurang cocok untuk tepi semi-transparan
    • Pemotongan parsial source-rect Kitty tidak didukung dan akan mengembalikan error eksplisit
    • Beberapa penempatan virtual dalam buffer yang sama berbagi satu rendering, dan kiriman terbaru mendapat prioritas
    • Secara bawaan hanya base64 inline yang diizinkan; media file, file sementara, dan shared memory harus diaktifkan secara eksplisit demi keamanan
    • Batas penyimpanan grafik bawaan per terminal adalah 320MiB

TRAMP dan terminfo jarak jauh

  • Jika default-directory adalah path TRAMP, shell dijalankan di host POSIX tersebut, dan metode TRAMP berbasis SSH maupun shell seperti docker dapat ditentukan lewat ghostel-tramp-shells
    • login-shell mendeteksi shell login pengguna jarak jauh lewat getent passwd
    • Pelacakan direktori OSC 7 mempertahankan prefiks metode, pengguna, dan multi-hop TRAMP yang sudah ada
    • Target jarak jauh Windows tidak didukung pada jalur shell/tty POSIX ini
  • Integrasi shell jarak jauh tidak diinjeksi secara bawaan, dan tersedia dua pendekatan
    • Dengan ghostel-tramp-shell-integration=t, skrip sementara dikirim lalu dibersihkan saat keluar
    • Untuk host permanen, skrip etc/shell/ dan secara opsional terminfo dapat dipasang langsung
  • Jika xterm-ghostty terminfo tidak ada di sisi jarak jauh, pembukaan terminal bisa gagal, sehingga ghostel-ssh-install-terminfo menangani pemasangannya
    • Eksekusi TRAMP mengirim terminfo ke direktori sementara lewat koneksi yang ada lalu menghapusnya saat keluar
    • ssh yang dijalankan dari Ghostel lokal menormalkan target dengan ssh -G, memeriksa cache, lalu bila perlu menjalankan tic -x - dengan satu koneksi tambahan
    • Hash terminfo lokal dimasukkan ke cache key sehingga akan otomatis tidak berlaku saat libghostty diperbarui, tetapi perubahan terminfo yang dilakukan terpisah di sisi jarak jauh tidak akan terdeteksi
    • Untuk ssh HOST cmd, pemanggilan opsi tanpa host, atau jika infocmp tidak tersedia secara lokal, pemasangan dilewati
  • Jika Anda tidak ingin mengubah host jarak jauh, Anda dapat mematikan pemasangan otomatis dan memasang terminfo sendiri; bila ghostel-term diubah menjadi xterm-256color, pengaturan terkait tidak lagi diperlukan, tetapi jalur cepat synchronized output khusus Ghostty juga hilang

Fitur ekstensi Emacs

  • evil-ghostel menyinkronkan status insert dan normal Evil dengan kursor terminal
    • Mendukung move, insert, delete, change, replace, bracketed paste, readline undo, dan bentuk kursor per status
    • Tidak memengaruhi vim, less, atau htop di alternate screen
  • ghostel-compile menjalankan perintah di PTY nyata sambil menyediakan header/footer ala compilation-mode, penyorotan error, dan navigasi next-error
    • Secara bawaan mode ini untuk navigasi baca-saja, tetapi dengan argumen prefiks input interaktif akan diteruskan
    • Bahkan saat berjalan, Anda dapat beralih antara input interaktif dan navigasi kompilasi dengan C-c C-j dan C-c C-e atau C-c C-t
    • ghostel-compile-global-mode mengirim pemanggilan compile, recompile, project-compile, dan compilation-start ke Ghostel
    • grep-mode secara bawaan tetap memakai implementasi yang ada
  • ghostel-eshell-visual-command-mode menjalankan visual command Eshell seperti vim, htop, dan less di buffer Ghostel khusus, bukan term-mode
  • ghostel-comint-mode memproses stream output comint dengan libghostty-vt, sehingga menyediakan true color, beragam underline, tautan OSC 8, dan pembaruan direktori OSC 7
    • Karena ini bukan terminal penuh, penempatan kursor, alternate screen, dan redraw layar penuh dibuang, sehingga tidak cocok untuk htop atau less
  • ghostel-ime-mode menghapus hasil input method Elisp yang langsung menyisipkan karakter ke buffer, seperti Hangul, lalu meneruskannya ke PTY dalam UTF-8
    • Selama komposisi Quail, rendering ditunda agar buffer tidak menimpa string komposisi

Kinerja

  • Hasil saat mengirim 1MB melalui pipe proses nyata dan mempertahankan sekitar 1.000 baris scrollback pada Apple M4 Max dan Emacs 32.0.50 adalah sebagai berikut
    • ASCII biasa: Ghostel 75MB/s, Ghostel dengan deteksi tautan nonaktif 76MB/s, vterm 18MB/s, eat 6.2MB/s, term bawaan 7.2MB/s
    • Output dengan banyak URL: Ghostel 36MB/s, Ghostel dengan deteksi tautan nonaktif 78MB/s, vterm 15MB/s, eat 4.5MB/s, term 5.9MB/s
  • Deteksi URL·jalur file berjalan pada timer gabungan di luar jalur redraw sehingga hampir tidak menambah biaya pada output biasa, tetapi pada output yang padat tautan throughput turun sekitar setengah
  • Demi perbandingan yang adil, angka di atas menggunakan jalur proses Emacs, sementara native PTY lokal bawaan sekitar 2x lebih cepat pada dump besar yang berkelanjutan karena thread latar belakang Zig membaca output
  • Median dari 5 kali cat file 10MB adalah Ghostel native sekitar 110ms, Ghostel Emacs PTY sekitar 220ms, vterm sekitar 550ms, dan eat sekitar 1,8 detik
    • vterm dan eat secara sinkron membebani main thread Emacs selama transfer, tetapi Ghostel native PTY melakukan parsing di latar belakang sehingga UI tetap responsif
  • M-x ghostel-debug-typing-latency mengukur minimum, median, p99, dan maksimum latensi PTY, rendering, dan total untuk tiap tombol

Perbedaan dengan vterm·eat

  • vterm menggunakan modul native libvterm berbasis C, dan eat ditulis dalam Elisp murni sehingga portabel tanpa build, tetapi throughput-nya lebih rendah
  • Hanya Ghostel yang mendukung keyboard·grafis Kitty, lima jenis garis bawah, OSC 8, OSC 4/10/11, notifikasi OSC 9·777, serta progres OSC 9;4 dan DEC 2026
    • eat mendukung gambar Sixel tetapi tidak mendukung gambar Kitty, dan vterm tidak mendukung kedua protokol gambar tersebut
  • Ghostel dan eat meneruskan event mouse SGR ke TUI, tetapi vterm menggunakan klik untuk memindahkan point Emacs
  • Ghostel dan eat menyediakan mode line, sedangkan vterm tidak
    • Ghostel menyediakan mode copy saat output berhenti dan mode Emacs saat output terus berlanjut
    • vterm menyediakan mode copy yang berhenti, dan mode Emacs read-only milik eat terus diperbarui
  • Ghostel menyuntikkan integrasi shell secara otomatis, tetapi vterm dan eat mengharuskan skrip dimuat secara manual
  • Prompt kata sandi dideteksi otomatis oleh Ghostel, eat hanya menyediakan perintah kirim manual, dan vterm tidak mencegat input secara terpisah

Arsitektur internal

  • Buffer lokal secara default membuat Zig membuka PTY dan membuat proses anak, lalu mengirim output ke libghostty-vt dari thread latar belakang
    • Jika callback OSC atau redraw diperlukan, event Lisp dikirim ke pipe Emacs untuk diproses oleh ghostel--events-filter
    • Output besar tidak melewati filter proses Emacs per byte
  • Buffer TRAMP menerima output melalui proses Emacs dan mengirimkannya secara sinkron ke model terminal yang sama agar pembuatan jarak jauh dan file handler tetap terjaga
  • Input tombol langsung ditulis ke PTY melalui encoder libghostty, dan output melewati parser VT serta tahap invalidasi, lalu Renderer.zig memperbarui baris yang berubah secara langsung untuk echo interaktif, atau melalui timer gabungan jika tidak
  • Rendering terminal memodifikasi buffer Emacs melalui penggantian baris, redraw penuh, perubahan ukuran dan reflow, serta penambahan·penghapusan scrollback, sehingga renderer bertanggung jawab menjaga point·mark·posisi jendela
    • Elisp menentukan kebijakan dan niat pengguna, seperti apakah setelah input harus berpindah ke viewport live atau mempertahankan status navigasi di tiap mode
    • Perubahan renderer tidak boleh dikoreksi dengan heuristik sebelum/sesudah redraw di Elisp, karena akan sulit membedakan penyebabnya antara scroll pengguna, koreksi redisplay, perubahan ukuran, dan penulisan ulang konten

Pengujian dan lisensi

  • Pengujian berbasis ERT, dan pengujian Elisp dapat dijalankan tanpa modul Zig, sementara pengujian bertag native memerlukan modul yang sudah dibangun
    • Tersedia target Makefile untuk unit test Zig, full test, pengujian ekstensi Evil, dan benchmark cepat
  • Laporan bug, permintaan fitur, dan pull request diterima di repositori GitHub, dan masalah rendering memerlukan perintah reproduksi·escape sequence·versi Emacs·informasi platform
  • Event diagnostik dapat dikumpulkan dengan M-x ghostel-debug-info
  • Ghostel adalah perangkat lunak bebas yang didistribusikan di bawah lisensi GNU GPL v3 atau yang lebih baru

3 komentar

 
lum7671 1 jam lalu

Sepertinya input bahasa Korea tidak berfungsi.
Meski menekan Ctrl-\ tampaknya metode input berubah ke bahasa Korea, pada akhirnya yang bisa dimasukkan sepertinya hanya huruf Inggris.
Agak disayangkan.

 
GN⁺ 2 jam lalu
Pendapat di Lobste.rs
  • Menurut saya, jawaban final untuk emulasi terminal di Emacs adalah Ghostel. Untuk jendela terminal sederhana sekali pakai, saya memakai Ghostty asli, dan untuk pekerjaan proyek saya memakai Ghostel yang terhubung ke proyek tersebut lewat perintah ghostel-project
    Jika instance untuk proyek itu sudah ada, ia akan langsung berpindah ke instance tersebut, jadi berpindah-pindah terminal terasa sangat cepat
  • Jadi ingin mencoba Doom Emacs lagi dan melihat seberapa baik integrasinya. Salah satu alasan saya menyerah terakhir kali adalah karena terminal Emacs tidak stabil
    • Saya juga ingin mencobanya. Ada beberapa hal yang kurang memuaskan dari vterm, tetapi kemampuan untuk tetap memakai perintah editor langsung di terminal itu benar-benar bagus
      Saat topik emulator terminal di Emacs muncul, biasanya ada jawaban seperti tidak perlu itu karena alih-alih cd/mv/ls/cp/rm/mkdr/... bisa pakai dired, dan alih-alih perintah build bisa pakai compile. Tapi meskipun tidak melakukan pekerjaan yang rumit, terminal tetap terasa lebih familier dan fleksibel
      Khususnya di Doom Emacs, kalau ada panduan tentang cara mengurangi ketergantungan pada terminal, saya ingin mencobanya. Melihat orang menavigasi proyek dengan cepat lewat konfigurasi tingkat lanjut selalu mengesankan
    • Emulasi terminal Emacs sudah sampai pada tingkat yang hampir sepenuhnya layak dipakai, tetapi beberapa generasi alat terminal masih rusak di lingkungan seperti vterm, dan karena masalah perhitungan ukuran baris, tampilan jj kadang jadi benar-benar berantakan, yang membuat frustrasi
      Pada akhirnya saya tetap membuka Ghostty di samping, tetapi saya berharap suatu hari semua alat bisa berjalan dengan benar di dalam Emacs
  • Sepertinya tidak ada fitur yang setara dengan eat-eshell, jadi sulit bagi saya untuk memilihnya. Saya tertarik pada emulasi terminal yang lebih cepat, tetapi saya cukup sering memakai eshell
    Dengan eat-eshell, program yang memerlukan emulasi terminal seperti build tool, Podman CLI, dan aplikasi TUI juga bisa langsung berjalan di buffer eshell, jadi bagi orang yang sering memakai eshell, ini fitur yang mengubah permainan
    • Sebenarnya itu juga bisa dilakukan di terminal, jadi saya penasaran untuk apa eshell dipakai secara terpisah. Saya tidak terlalu sering memakai eshell, jadi saya sering merasa melewatkan tujuan utamanya
 
GN⁺ 4 jam lalu
Pendapat di Hacker News
  • Saya maintainer Ghostel. Saya dan baokaola berencana memposting Show HN minggu depan, tetapi seseorang lebih dulu mengirimkan tautannya
    Untuk melihat sekilas dengan cepat, repositori GitHub lebih nyaman: https://github.com/dakra/ghostel
    Ghostel adalah emulator terminal Emacs berbasis libghostty-vt, dan perbandingan fitur dengan vterm serta eat dapat dilihat di https://dakra.github.io/ghostel/#ghostel-vs-vterm. Ada juga materi yang membandingkan performa dan akurasi dengan gambar: https://gist.github.com/dakra/4a0b76ebcf5d52338e134864378465...
    Secara pribadi, saya mengganti bukan hanya vterm/eat, tetapi juga terminal eksternal seperti kitty dan Ghostty. Jika teks terminal diperlakukan seperti buffer Emacs biasa, terbuka banyak kemungkinan ekstensi yang tidak ada di terminal lain. Bahkan tugas sederhana seperti mencari scrollback, lalu berpindah hanya dengan keyboard dan memilih paragraf untuk disalin terasa jauh lebih alami dan cepat bagi pengguna Emacs
    Jika setelah mencoba Ghostel Anda tetap memakai terminal eksternal, saya penasaran apakah itu karena ada fitur yang kurang, atau karena Anda ingin menjalankan sebagian proses di luar Emacs. Kami juga aktif merespons di GitHub, jadi jika ada masalah, silakan buka issue

    • Sejauh ini Ghostel bekerja sangat baik. Saya menetapkan f1 untuk beralih antara mode semi-char dan mode salin, dan sebelum menjalankan perintah saya memikirkan, “Apakah tidak masalah jika Emacs mati atau dihentikan paksa?” Jika tidak, saya menjalankannya di terminal biasa
    • Karena saat Magit dan sejenisnya mem-parsing diff besar, seluruh Emacs bisa membeku, pada akhirnya saya tetap mempertahankan terminal terpisah
    • Di eshell, teks bisa dimanipulasi persis seperti buffer Emacs lain. Jika Anda mengikat fungsi untuk membungkus kata dengan tanda kutip ke sebuah tombol, fungsi itu juga bekerja apa adanya di eshell, dan evil-mode, xah-fly-keys, serta ispell semuanya bisa digunakan; ini adalah keunggulan penentu
      Ghostel belum terintegrasi sampai level yang sama, dan ekstensi seperti evil-ghostel-mode juga punya keterbatasan. Saya penasaran apakah ada rencana untuk memperbaikinya, atau apakah ini kendala struktural yang harus diterima; akan sangat bagus jika ada fitur yang setara dengan eat-eshell-mode
    • Akan bagus jika ada mode Quick-select berbasis pola seperti di WezTerm. Setelah mengetahui fitur ini, saya sampai tidak ingin memakai terminal lain
    • Saya sudah cukup lama menggunakannya dengan baik di Doom Emacs. Saya penasaran mengapa program yang menggulir layar seperti Lazygit atau Reasonix gagal di emulator lain, tetapi bekerja di Ghostel. Saya ingin tahu apakah ada penanganan khusus dalam implementasi atau pustakanya
  • Judulnya harus memuat Emacs. Emulator terminal umum dan emulator terminal untuk Emacs itu berbeda

  • Baru-baru ini saya beralih dari vterm ke Ghostel, dan secara keseluruhan jauh lebih baik. Ia terasa jauh lebih cepat, sampai aplikasi TUI yang mewah dan memperbarui seluruh terminal di setiap frame pun berjalan dengan benar; pemrosesan inputnya lebih stabil, dan API ELisp-nya juga bagus
    Namun pernah ada kejadian terminal tidak dibersihkan dengan benar sehingga sisa tampilan tertinggal di atas prompt saat ini, atau sepenuhnya macet sehingga saya harus menutup buffer dan memulai lagi. Ini sudah cukup untuk penggunaan sehari-hari dan prospeknya cerah, tetapi untuk menjadi produk yang matang masih perlu lebih banyak perbaikan bug dan penyempurnaan akhir

    • Saya co-maintainer Ghostel. Meski tidak ada langkah reproduksi, jika Anda mendapatkan informasi yang bisa ditindaklanjuti, mohon daftarkan issue atau sampaikan dengan cara lain
      Gejala sisa tampilan tertinggal di bagian atas layar mungkin adalah https://github.com/dakra/ghostel/issues/495, dan sudah diperbaiki di versi terbaru, tetapi bisa juga bug lain. Bagian yang sulit adalah mereplikasi data internal libghostty-vt ke buffer Emacs sambil mengganti hanya bagian yang diperlukan. Ada pengujian berbasis properti yang memverifikasi ini secara luas, tetapi sesekali ada masalah yang lolos
      Di rilis terbaru saat ini, penanganan siklus hidup telah diperbaiki, jadi sebagian masalah mungkin ikut terselesaikan. Karena masih tahap awal, kami akan terus memolesnya secara bertahap
  • Akan bagus jika ada contoh nyata penggunaan berbagai mode input secara efisien. Terminal menginginkan semua input tombol, sementara editor juga ingin memakai tombol untuk perintahnya sendiri, jadi terminal tertanam di editor pasti membutuhkan mode untuk mengalihkan kepemilikan keyboard
    :term di Neovim hanya punya dua mode, tetapi jika tidak memahami mengapa Ghostel punya sampai lima mode, orang mudah keliru menganggapnya dirancang berlebihan. Sebenarnya ia kompleks karena menyelesaikan lebih banyak masalah, dan mode tambahan adalah alat opsional untuk pekerjaan yang tidak ditangani nvim. Namun belum cukup jelas bagaimana memanfaatkan keunggulan ini secara efisien dalam praktik

  • Saat mengalami kesulitan memakai vterm, saya mencoba Ghostel dan ternyata bagus, sehingga sepertinya bisa menjadi terminal utama saya

    • Saya berpindah dari vterm ke eat lalu ke Ghostel, dan setidaknya sejauh ini saya menilai Ghostel yang terbaik
  • Saya sudah menggunakannya lebih dari sebulan, dan yang terutama saya suka adalah fitur mengklik referensi kode dalam ringkasan Codex untuk langsung membukanya di buffer Emacs

    • Selain dengan mouse, Anda juga bisa cepat berpindah di antara hyperlink yang baru ditampilkan memakai ghostel-previous-hyperlink atau ghostel-next-hyperlink
      Karena peta repeat-mode juga dipasang, jika ada tiga URL atau tautan file di output, Anda bisa membuka tautan pertama hanya dengan C-c C-p p p RET; saya sering memakainya
  • Integrasi Ghostel dan Claude Code membuat penggunaan Emacs saya meningkat besar, dan kini Emacs menjadi hub pusat pekerjaan saya

    • Saya penasaran, apakah integrasi di sini berarti model mengoperasikan Emacs secara langsung melalui server?
  • Jika saya membuka sekitar 10 terminal di beberapa jendela, Ghostty hampir setiap malam crash. Karena itu saya tidak bisa memakai Ghostty dengan baik, dan saya juga tidak ingin menanamkannya ke dalam alat yang saya pakai setiap hari

    • Saya memakai Ghostty 1.1.3 di Gentoo Linux, dan saat ini menjalankan lebih dari 100 instance shell dengan sekitar 20 tab di masing-masing dari kira-kira 12 jendela
      Saya juga menjalankan ls -lR di sebanyak mungkin shell pada filesystem yang berisi jutaan file, tetapi tidak ada masalah atau crash. Selama beberapa bulan saya menggunakannya berat sepanjang hari setiap hari, dan belum pernah melihat crash atau perilaku mencurigakan
      Kemungkinan besar itu bug pada versi Ghostty tertentu, atau interaksi yang tidak biasa dengan perangkat lunak lain seperti driver GPU. Di sini saya menggunakan GPU NVIDIA
  • Katanya “modul native adalah binary yang sudah dibangun sebelumnya dan otomatis diunduh saat pertama kali digunakan”; saya penasaran mengapa tidak menyertakannya dalam paket distribusi

    • MELPA dan ELPA tidak punya cara untuk melampirkan file per platform dan semuanya didistribusikan sebagai checkout Git. Jika ingin menyertakannya dalam distribusi, binary modul untuk semua platform harus dimasukkan ke repositori, dan totalnya akan lebih dari 10 MB
      jinx, paket populer yang menggunakan modul native Emacs, juga menyediakan cara seperti vterm, yaitu mengompilasi saat pertama kali digunakan. Jadi untuk mendukung instalasi yang ramah pengguna di paket Emacs, secara realistis satu-satunya cara adalah mengunduh atau mengompilasi saat pertama dijalankan