Mengubah Emacs menjadi layanan yang selalu siap: menjalankan emacs --daemon, membuka buffer di frame/window yang sudah ada dengan emacsclient -c/-t, mengintegrasikan emacsclient sebagai EDITOR untuk git dan perintah shell, serta membangun workflow startup instan yang hemat memori.

Satu keluhan paling umum tentang Emacs (terutama sebelum native compilation): startup yang lambat — 1-3 detik setiap kali membuka Emacs. Episode 24 menyelesaikan masalah itu secara arsitektural: daemon Emacs berjalan di latar belakang sekali, dan emacsclient menyambung ke sesi itu dalam hitungan milidetik.
Mengapa penting? Karena kalau membuka file butuh instan, Emacs menjadi default editor untuk segalanya — git commit, crontab -e, EDITOR=..., semua perintah shell. Tidak ada lagi alasan "tunggu dulu, buka Emacs dulu". Ini juga alasan utama mengapa daemon adalah pola yang dipakai pengguna Emacs berpengalaman di produksi.
emacs --daemonVerifikasi:
emacsclient -n -e "(daemonp)"Output t berarti daemon aktif. Otomatiskan di init shell (.zshrc):
pgrep -f "emacs --daemon" > /dev/null || emacs --daemon &emacsclient -c ~/proyek/app.py| Flag | Makna |
|---|---|
-c | Buat frame baru (window OS baru) |
-t | Frame dalam terminal yang memanggil |
-n | No-wait: jangan blokir shell sampai frame ditutup |
-e | Jalankan ekspresi Elisp, misal -e "(find-file \"/tmp/x\")" |
-a "" | Alternate editor: kalau daemon mati, jalankan Emacs baru (-a emacs) |
emacsclient -a "" file adalah idiom yang sangat berguna: kalau daemon tidak berjalan, ia menyalakan Emacs biasa otomatis.
Tambahkan ke shell kalian:
alias e="emacsclient -n -c" # buka file di frame GUI baru
alias et="emacsclient -t" # buka di terminal
alias ek="emacsclient -e '(kill-emacs)'" # matikan daemonDengan daemon, EDITOR=emacsclient membuat semua tool menghormati Emacs:
export EDITOR="emacsclient -c"
export VISUAL="emacsclient -c"Sekarang git commit membuka buffer commit di frame Emacs yang sudah ada — bukan di editor baru. Setelah menulis pesan, C-x # (server-edit) menutup frame dan memberi tahu git selesai:
git commit → Emacs membuka buffer pesan → tulis → C-x # → commit selesaiWarning
Perintah yang memanggil $EDITOR dan menunggu selesai (git commit, crontab -e, kubectl edit) harus menunggu emacsclient selesai. Jangan pakai -n untuk itu — gunakan emacsclient -c (blokir) dan akhiri dengan C-x #. Memakai -n membuat git commit menganggap pesan kosong.
Setelah daemon aktif:
1. Shell: emacsclient -c → frame Emacs langsung muncul (tanpa loading)
2. git commit → buffer commit di frame yang ada
3. crontab -e → crontab terbuka di Emacs
4. kubectl edit deploy → YAML terbuka di Emacs
5. e ~/catatan.org → alias membuka file cepatSemua operasi < 0,1 detik. Init file dimuat sekali saat daemon lahir — bukan setiap kali buka frame. Startup lambat bukan masalah lagi.
Catatan: beberapa orang memakai M-x server-start (server-mode) tanpa daemon — Emacs berjalan normal, dan emacsclient dari shell menyambung ke sesi itu. Pola daemon hanyalah versi "berjalan tanpa frame". Keduanya menggunakan mekanisme server yang sama:
(server-start) ; izinkan emacsclient menyambung ke sesi iniIni memungkinkan emacsclient bekerja walau Emacs kalian berjalan sebagai aplikasi biasa.
Daemon hidup selama session — konsumsi memori mengikuti buffer yang terbuka. Praktik sehat:
M-x ibuffer → d x untuk buffer mati.(setq server-kill-new-buffers t) — buffer yang dibuka emacsclient dihapus saat frame ditutup (jika tanpa perubahan).emacsclient -e "(kill-emacs)".M-x load-file di frame mana pun — tidak perlu restart daemon untuk sebagian besar perubahan.-n dan git: jangan -n untuk tool yang menunggu editor (lihat warning di atas).emacs --daemon setelah login.emacs --daemon berjalan (pgrep -f "emacs --daemon"). Dua daemon = dua set buffer yang terpisah, membingungkan.emacsclient -t di terminal remote: membutuhkan frame tty — di sesi SSH dengan TERM yang benar, ini bekerja (dan Tramp dari episode 18 juga memungkinkan frame tersebut).Pada episode 24 ini, kalian telah mengubah Emacs menjadi layanan yang selalu siap.
Inti yang harus dibawa pulang:
emacs --daemon menjalankan satu proses; emacsclient -c/-t menyambung dalam milidetik.emacsclient -a "" file adalah idiom aman (fallback ke Emacs biasa).EDITOR/VISUAL ke emacsclient — git, crontab, kubectl semua memakai Emacs.C-x # (server-edit).server-start mengaktifkan mekanisme yang sama tanpa daemon; kelola memori dengan ibuffer + server-kill-new-buffers.Di episode 25 selanjutnya, kalian mengambil kendali penuh atas tombol: keybindings custom & Evil (Vim) — define-key, general.el untuk mengatur binding secara deklaratif, dan Evil mode untuk mantan pengguna Vim yang ingin gaya modal. Sampai jumpa di episode 25!