Menghubungkan Emacs dengan sistem operasi: memahami Eshell sebagai shell native Elisp yang memahami buffer, memakai shell-mode untuk shell klasik di dalam Emacs, vterm untuk terminal penuh, dan mengedit file remote lewat Tramp dengan C-x C-f /ssh:user@host:/path tanpa SSH manual.

Editor hebat tapi terputus dari sistem hanyalah setengah alat. Episode 18 menghubungkan Emacs dengan OS: Eshell (shell yang ditulis dalam Elisp), shell-mode (bash/zsh dalam buffer), vterm (terminal emulator penuh), dan Tramp — fitur paling ajaib di episode ini — untuk mengedit file di server remote seolah-olah file lokal.
Mengapa penting? Karena workflow DevOps nyata adalah mix: mengedit lokal, menjalankan perintah, lalu men-deploy ke server. Kalau semuanya terjadi di satu lingkungan, konteks tidak pernah putus. Dan Tramp secara fundamental mengubah cara kalian bekerja dengan server.
| Cara | Sifat | Terbaik untuk |
|---|---|---|
M-x eshell | Shell Elisp murni, dalam buffer | Workflow yang memakai Elisp, kombinasi editor+shell |
M-x shell | bash/zsh dalam buffer | Shell klasik sederhana |
M-x term | Terminal emulator dalam buffer | Program interaktif (vim, htop, tmux) |
M-x vterm | Terminal penuh (via libvterm) | Performance penuh, program berat (di luar scope paket tambahan) |
Eshell istimewa karena ia memahami buffer Emacs: bisa memanggil fungsi Lisp, mengarahkan output ke buffer, dan menggunakan benda-benda Emacs di dalam perintah shell.
Buka dengan M-x eshell. Perintah shell biasa bekerja — ls, cd, grep, cat — tapi ada lapisan tambahan:
~ $ cd ~/proyek
~/proyek $ ls -la
~/proyek $ grep -r "TODO" src~/proyek $ (concat "hello" " " "eshell")
"hello eshell"~/proyek $ grep -r "defun" ~/.emacs.d > #<buffer hasil-grep>Tab completion yang memakai history dan file sekaligus — dan dengan Vertico (episode 19), completion eshell menjadi sangat cepat.
eshell adalah buffer: kalian bisa memakai Isearch, yank, dan seluruh kekuatan editing Emacs di atasnya.
Eshell bukan pengganti bash untuk scripting kompleks — ia adalah lingkungan kerja yang memadukan shell dan editor.
M-x shell memulai bash/zsh dalam buffer Emacs. Keuntungan: output bisa dicari dengan Isearch dan disimpan sebagai teks. Keterbatasan: program interaktif seperti htop tidak berjalan baik (buffer bukan terminal penuh).
Note
Untuk program interaktif (git TUI, htop, fzf di terminal), gunakan M-x term (emulator dalam buffer) atau paket vterm. Eshell & shell-mode hanya cocok untuk perintah non-interaktif.
Tramp (Transparent Remote Access, Multiple Protocols) memungkinkan mengedit file di mesin remote dengan path Emacs yang khusus:
C-x C-f /ssh:user@server:/etc/nginx/nginx.conf RETEmacs membuka file itu melalui SSH — tanpa scp manual, tanpa ssh manual. Yang kalian lihat adalah buffer biasa dengan semua kekuatan Emacs: Isearch, query-replace, Magit (kalau remote punya git), Eglot.
| Sintaks | Protocol |
|---|---|
/ssh:user@host:/path | SSH (disarankan — pakai ~/.ssh/config) |
/scp:user@host:/path | SCP |
/sudo:root@localhost:/path | sudo (file root lokal) |
/docker:container:/path | Docker container |
/sudo::/etc/hosts — dengan sudo:, kolom user kosong berarti current user. Ini cara umum mengedit file sistem dengan aman (tidak perlu sudo emacs).
Karena buffer ≠ file lokal, kalian juga bisa Dired di remote:
C-x d /ssh:server:/var/www RETBuka direktori remote sebagai Dired — copy/move/rename antara lokal dan remote langsung di dalam satu UI. Gabungkan dengan Tramp dan kalian punya file manager lintas host.
(setq tramp-default-method "ssh")Alur DevOps nyata:
1. C-x C-f /ssh:prod:/var/www/app/config.py RET → edit file produksi
2. M-x eshell RET
3. /ssh:prod:/var/www/app $ python3 manage.py migrate
4. C-x C-f /ssh:prod:/var/www/app/config.py RET → simpan (C-x C-s)Eshell juga bisa memulai sesi Tramp langsung: prompt eshell menjadi path remote, dan perintah dijalankan di server:
/ssh:prod:~ $ whoami
root
/ssh:prod:~ $ systemctl restart nginxPerintah berjalan di server, buffer tetap di Emacs. Tidak ada jendela SSH kedua.
Warning
Tramp menghabiskan koneksi: setiap buffer remote membuka sesi SSH. Gunakan C-x C-s secara hemat dan jangan buka banyak file remote sekaligus di jaringan lambat. Untuk koneksi yang sering dipakai, definisikan alias di ~/.ssh/config agar Tramp memakai entri yang sudah ada.
~/.ssh/config rapi dan key tanpa passphrase (atau gunakan ssh-agent).Host prod, HostName ..., User deploy, IdentityFile ~/.ssh/prod_key.auth-source (~/.authinfo.gpg).shell-mode dengan prompt aneh: beberapa tool menimpa prompt — set comint-prompt-regexp bila parsing prompt rusak.[[ ]], ${var/x/y}) tidak berjalan di Eshell. Gunakan M-x shell untuk itu.tramp-verbose rendah (misal 3) dan hindari auto-filesystem polling yang berat. Tutup buffer remote setelah selesai.Pada episode 18 ini, kalian telah menghubungkan Emacs dengan sistem lokal dan remote.
Inti yang harus dibawa pulang:
M-x shell untuk bash/zsh dalam buffer; M-x term/vterm untuk program interaktif.C-x C-f /ssh:user@host:/path mengedit remote seperti lokal; /sudo:: untuk file root.~/.ssh/config — jangan pernah simpan password.Di episode 19 selanjutnya, kita membangun fondasi UX modern Emacs: completion & minibuffer dengan stack Vertico/Consult/Marginalia, in-buffer completion Corfu, dan orderless untuk pencarian fuzzy yang fleksibel. Sampai jumpa di episode 19!