Ghostel.el - Emulator terminal Emacs berbasis libghostty
(dakra.github.io)- Ghostel adalah emulator terminal Emacs yang menggunakan mesin
libghostty-vtyang 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
cat10MB 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, danaarch64-windows - Platform lain atau build dari source memerlukan Zig 0.15.2
- Binary pra-bangun disediakan untuk
- Dapat diinstal melalui MELPA,
use-package :vcpada Emacs 30 atau lebih baru,:load-path, ataurequiremanual, lalu buka terminal denganM-x ghostel - Jika modul native tidak ada, Ghostel akan menawarkan unduhan atau kompilasi dari source sesuai pengaturan
ghostel-module-auto-installM-x ghostel-download-modulemengambil binary minimum yang didukung, dan dengan argumen prefiks dapat memilih tag rilisM-x ghostel-module-compilemembangun modul denganzig build- Jika direktori paket mungkin diinstal ulang,
ghostel-module-directorydapat diarahkan ke lokasi terpisah
- Build dari source menyertakan
vendor/emacs-module.hyang dihasilkan, sehingga umumnya tidak memerlukan header Emacs lokal, dan lokasi header dapat diubah denganEMACS_INCLUDE_DIRatauEMACS_BIN_DIRxterm-ghosttyterminfo yang telah dikompilasi disertakan dietc/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.dlldanOpenConsole.exejuga 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-:, danC-\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, danC-hsendiri, dengan hanyaM-RETyang 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-yyang disengaja yang dikirim sebagai bracketed paste
- Input biasa tidak diteruskan ke shell, dan hanya 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
TABmenggunakan pelengkapan comint dan pelengkapan programmable bash opsional
- Drag mouse, multi-klik, aktivasi mark, atau ketika posisi input aktif ditinggalkan melalui
isearchatauconsult-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, danghostel-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-ghosttybawaan 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
isearchdanconsult-line - Selain hyperlink OSC 8, URL HTTP·HTTPS biasa dan path file berbentuk
/path/file.el:42juga 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-thememenyinkronkan ulang palet agar sesuai dengan tema Emacs
- 16 warna ANSI adalah face Emacs yang mewarisi
term-color-*, danghostel-defaultdapat 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_cmddikonfigurasi otomatis- Integrasi shell bawaan nushell menyediakan OSC 7, 133, dan 2, sementara
ghostel.numenambahkanghostel_cmddan wrapper terminfo SSH outbound - bash 3.2 bawaan macOS mengabaikan
ENVyang dipakai untuk injeksi otomatis, jadi Anda perlu memakai bash yang lebih baru atau memuatghostel.bashsecara manual
- Integrasi shell bawaan nushell menyediakan OSC 7, 133, dan 2, sementara
ghostel_cmd, yang memanggil Elisp dari shell, memakai ekstensi OSC 52;e khusus dan hanya menjalankan fungsi yang ada dalam allowlistghostel-eval-cmds- Fungsi yang diizinkan secara bawaan adalah
find-file,find-file-other-window,dired,dired-other-window, danmessage
- Fungsi yang diizinkan secara bawaan adalah
- 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, danpasswd, Ghostel membukaread-passwdlalu mengirim jawabannya langsung ke PTY, sehingga input tidak tersisa diview-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
- Di lokal, mode canonical dan penonaktifan echo diperiksa lewat
- 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
messagedi area echo
- Handler bawaan memakai alert bila terpasang, dan jika tidak, akan diganti dengan
- Progres OSC 9;4 mengirim status
remove,set,error,indeterminate, danpause, 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 denganghostel-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-directoryadalah path TRAMP, shell dijalankan di host POSIX tersebut, dan metode TRAMP berbasis SSH maupun shell sepertidockerdapat ditentukan lewatghostel-tramp-shellslogin-shellmendeteksi shell login pengguna jarak jauh lewatgetent 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
- Dengan
- Jika
xterm-ghosttyterminfo tidak ada di sisi jarak jauh, pembukaan terminal bisa gagal, sehinggaghostel-ssh-install-terminfomenangani pemasangannya- Eksekusi TRAMP mengirim terminfo ke direktori sementara lewat koneksi yang ada lalu menghapusnya saat keluar
sshyang dijalankan dari Ghostel lokal menormalkan target denganssh -G, memeriksa cache, lalu bila perlu menjalankantic -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 jikainfocmptidak tersedia secara lokal, pemasangan dilewati
- Jika Anda tidak ingin mengubah host jarak jauh, Anda dapat mematikan pemasangan otomatis dan memasang terminfo sendiri; bila
ghostel-termdiubah menjadixterm-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-compilemenjalankan perintah di PTY nyata sambil menyediakan header/footer alacompilation-mode, penyorotan error, dan navigasinext-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-jdanC-c C-eatauC-c C-t ghostel-compile-global-modemengirim pemanggilancompile,recompile,project-compile, dancompilation-startke Ghostelgrep-modesecara bawaan tetap memakai implementasi yang ada
ghostel-eshell-visual-command-modemenjalankan visual command Eshell seperti vim, htop, dan less di buffer Ghostel khusus, bukanterm-modeghostel-comint-modememproses stream output comint denganlibghostty-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
htopatauless
- Karena ini bukan terminal penuh, penempatan kursor, alternate screen, dan redraw layar penuh dibuang, sehingga tidak cocok untuk
ghostel-ime-modemenghapus 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
catfile 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-latencymengukur 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-vtdari 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
- Jika callback OSC atau redraw diperlukan, event Lisp dikirim ke pipe Emacs untuk diproses oleh
- 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.zigmemperbarui 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
nativememerlukan 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
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.
Pendapat di Lobste.rs
ghostel-projectJika instance untuk proyek itu sudah ada, ia akan langsung berpindah ke instance tersebut, jadi berpindah-pindah terminal terasa sangat cepat
vterm, tetapi kemampuan untuk tetap memakai perintah editor langsung di terminal itu benar-benar bagusSaat topik emulator terminal di Emacs muncul, biasanya ada jawaban seperti tidak perlu itu karena alih-alih
cd/mv/ls/cp/rm/mkdr/...bisa pakaidired, dan alih-alih perintah build bisa pakaicompile. Tapi meskipun tidak melakukan pekerjaan yang rumit, terminal tetap terasa lebih familier dan fleksibelKhususnya 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
vterm, dan karena masalah perhitungan ukuran baris, tampilanjjkadang jadi benar-benar berantakan, yang membuat frustrasiPada akhirnya saya tetap membuka Ghostty di samping, tetapi saya berharap suatu hari semua alat bisa berjalan dengan benar di dalam Emacs
eshellDengan
eat-eshell, program yang memerlukan emulasi terminal seperti build tool, Podman CLI, dan aplikasi TUI juga bisa langsung berjalan di buffereshell, jadi bagi orang yang sering memakaieshell, ini fitur yang mengubah permainaneshelldipakai secara terpisah. Saya tidak terlalu sering memakaieshell, jadi saya sering merasa melewatkan tujuan utamanyaPendapat 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
f1untuk 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 biasaGhostel 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
Judulnya harus memuat Emacs. Emulator terminal umum dan emulator terminal untuk Emacs itu berbeda
.eladalah ekstensi file Emacs LispBaru-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
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
:termdi 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 praktikSaat mengalami kesulitan memakai vterm, saya mencoba Ghostel dan ternyata bagus, sehingga sepertinya bisa menjadi terminal utama saya
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
ghostel-previous-hyperlinkataughostel-next-hyperlinkKarena 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 memakainyaIntegrasi Ghostel dan Claude Code membuat penggunaan Emacs saya meningkat besar, dan kini Emacs menjadi hub pusat pekerjaan saya
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 juga menjalankan
ls -lRdi 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 mencurigakanKemungkinan 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
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