Membangun pengalaman modern minibuffer & completion Emacs: memasang Vertico untuk daftar kandidat di minibuffer, Consult untuk preview dan pencarian lanjutan, Marginalia untuk dokumentasi di sisi kanan, Corfu untuk completion dalam buffer, dan Orderless untuk pencocokan fuzzy multi-kata.

Sampai episode 18, kalian sudah merasakan Emacs yang kuat tapi mungkin terasa "kuno" di satu titik: prompt M-x yang polos dan completion yang membosankan. Episode 19 mengubah itu dengan stack completion modern — empat paket yang bekerja bersama mengubah minibuffer dan buffer menjadi pengalaman seleksi yang cepat dan informatif.
Mengapa penting? Karena minibuffer adalah jembatan antara kalian dan Emacs: hampir semua perintah (M-x, C-x b, C-x C-f, query-replace) lewat di sana. Membuat jembatan ini cepat dan menyenangkan meningkatkan kecepatan kerja kalian di seluruh Emacs — bukan hanya satu fitur.
Empat paket dengan peran berbeda:
| Paket | Peran |
|---|---|
| Vertico | Menampilkan daftar kandidat di minibuffer sebagai vertikal list |
| Consult | Preview hasil, search lanjutan, command-command "cari" |
| Marginalia | Menampilkan deskripsi/dokumentasi di sisi kanan tiap kandidat |
| Corfu | Completion popup di dalam buffer (di dekat kursor) |
| Orderless | Pencocokan fuzzy: beberapa kata terpisah, urutan bebas |
(use-package vertico
:ensure t
:init (vertico-mode 1))
(use-package orderless
:ensure t
:custom (completion-styles '(orderless basic))
:custom (orderless-component-separator #'orderless-escapable-split-on-space))
(use-package consult
:ensure t
:bind (("C-x p" . project-command-map)
("M-s p" . consult-find)
("M-s r" . consult-ripgrep)
("M-s l" . consult-line)
("C-x b" . consult-buffer)))
(use-package marginalia
:ensure t
:init (marginalia-mode 1))
(use-package corfu
:ensure t
:init (global-corfu-mode 1)
:custom (corfu-auto t)
:bind (:map corfu-map ("RET" . corfu-complete)))Setelah vertico-mode aktif, tekan M-x dan ketik sebagian nama:
M-x → ketik "switch" → daftar kandidat muncul di bawah promptVertico menampilkan daftar kandidat secara vertikal dengan highlight yang mengikuti. Gerakan:
C-n / C-p → pilih kandidat berikutnya/sebelumnya
M-<digit> → pilih kandidat ke-N langsung
C-j / TAB → commit (gunakan kandidat terpilih)
C-g → batalSekarang M-x, C-x b, dan C-x C-f semua "menampilkan daftar" alih-alih prompt kosong — perbedaan pengalaman yang langsung terasa.
Orderless mengubah cara kandidat dicocokkan: kata-kata dipisah spasi, setiap kata harus cocok di suatu tempat, urutan bebas:
M-x → ketik "line disp" → cocokkan display-line-numbers-mode
M-x → ketik "git mag" → cocokkan magit-status
C-x b → ketik "init lis" → cocokkan *init.el*"line disp" berarti "line" di mana pun + "disp" di mana pun dalam nama — bukan substring berurutan. Ini membuat pencarian nama perintah terasa seperti fuzzy-finder modern.
Consult menambahkan preview — kandidat yang disorot langsung diperlihatkan di buffer target:
M-s l (consult-line) → cari baris di buffer, preview di lokasi
M-s r (consult-ripgrep) → cari di proyek, preview file
M-s p (consult-find) → cari nama file, preview
C-x b (consult-buffer) → daftar buffer + file baru-baru ini + bookmarkTekan panah bawah/atas untuk bergerak antar kandidat — dan buffer target ikut berpindah di belakang minibuffer. Ini membuat keputusan "pilih mana" jadi visual, bukan menebak.
consult-buffer bahkan menampilkan lebih dari buffer: file terakhir dibuka (recentf) dan bookmark — satu prompt untuk semuanya.
Marginalia menampilkan deskripsi tiap kandidat di kolom kanan minibuffer:
M-x → ketik "magit-st" → kolom kanan menampilkan "Open Magit status"
C-x b → tiap buffer menampilkan major mode-nyaTidak perlu menebak apa fungsi perintah — dokumentasi ringkasnya sudah terlihat saat mengetik. Ini melengkapi help system episode 8 dengan proactive info.
Completion untuk kode (dari Eglot episode 16 atau capf biasa) muncul di dekat kursor:
(ketik beberapa huruf di file Python)
→ popup saran muncul otomatis (corfu-auto t)
M-n / M-p → pilih saran
RET → lengkapi
C-M-i → paksa completion manualCorfu bersifat transient — menampilkan saran hanya saat dibutuhkan, dan menghilang saat tidak relevan. Ini membuat Emacs terasa seperti IDE modern sambil tetap memakai mekanisme completion core (completion-at-point).
1. C-x C-f → ketik "lisp my" → buka file lisp/my-eglot.el
2. M-s l → cari fungsi tertentu di buffer dengan preview
3. M-s r → cari pola di seluruh proyek
4. C-x b → kembali ke buffer sebelumnya
5. M-x → ketik "line disp" → tampilkan nomor barisSemua interaksi jadi lebih cepat karena setiap prompt "menyajikan pilihan" bukan "menunggu hafalan".
Warning
Vertico/Corfu bekerja dengan mekanisme completion core Emacs. Jangan campur dengan paket lama seperti ido atau icicles yang mengubah perilaku yang sama — hasilnya konflik dan prompt ganda. Satu stack saja.
basic: tambahkan 'basic di completion-styles sebagai fallback untuk input kosong/ketat, kalau tidak ada kandidat yang cocok saat mengetik awalan.corfu-terminal atau gunakan GUI.icomplete-mode bawaan Emacs bisa bentrok — nonaktifkan salah satu.corfu dengan mode tertentu, atau atur corfu-quit-no-match.Pada episode 19 ini, kalian telah membangun UX completion modern untuk Emacs.
Inti yang harus dibawa pulang:
consult-line, consult-ripgrep, consult-buffer).vertico + orderless + consult + marginalia + corfu.Di episode 20 selanjutnya, kita mengalikan kecepatan editing: Avy, expand-region & multiple-cursors — melompat ke karakter/kata/baris dengan kode dua huruf, memperluas seleksi secara struktural, dan mengedit banyak tempat sekaligus. Sampai jumpa di episode 20!