Perubahan di Emacs 31 yang Sudah Saya Pakai Setiap Hari
(rahuljuliato.com)- Emacs 31 belum dirilis resmi, tetapi perubahan yang sudah terasa di branch
emacs-31danmasterterus bertambah, dan banyak pengaturan bergerak ke arah bisa diselesaikan hanya dengan core Emacs tanpa paket eksternal - Dengan hadirnya peralihan otomatis Tree-sitter dan pemasangan grammar, beban mengelola major mode dan pengaturan sumber grammar secara manual jadi berkurang
markdown-ts-mode, rendering dokumentasi Eglot,eldoc-help-at-pt, eager completion, danxref-edit-modememperkuat alur edit, navigasi, dan pengecekan dokumentasi dengan fokus pada fitur bawaan- Opsi-opsi kecil seperti side window untuk Speedbar, penyembunyian otomatis VC, kondisi log ERC,
kill-region-dwim,ielm-history-file-name, dannative-comp-async-on-battery-powermengurangi gesekan berulang dalam penggunaan sehari-hari - Nama fitur dan nilai default di Emacs 31 masih bisa berubah, dan
markdown-ts-modebeserta rendering dokumentasi Eglot yang memakainya dinyatakan sebagai fitur eksperimental sehingga harus diaktifkan secara eksplisit
Premis preview Emacs 31
- Emacs 31 masih belum dirilis, dan lingkungan acuan adalah konfigurasi yang membangun branch
emacs-31danmasterpada pertengahan 2026 - Hal-hal yang diperkenalkan di sini adalah perubahan yang benar-benar masuk ke konfigurasi harian, dan sebagian besar sudah masuk ke core Emacs atau sangat dekat ke sana
- Nama fitur dan nilai default bisa berubah sampai rilis final
- Contoh konfigurasi bisa dilihat di
init.elmilik Emacs Solo dengan komentar; EMACS-31
Berkurangnya konfigurasi Tree-sitter
- Di Emacs 31, dua opsi menyederhanakan alur perpindahan mode berbasis Tree-sitter dan pemasangan grammar
treesit-enabled-modes ttreesit-auto-install-grammar t
- Jika
treesit-enabled-modesdisetel ket, major mode yang punya varian Tree-sitter akan dialihkan ke mode tersebut treesit-auto-install-grammartidak lagi hanya memunculkan error saat grammar belum ada, tetapi menyarankan agar Emacs mengambil dan membangun grammar itu- Karena sumber grammar untuk bahasa seperti TypeScript, TSX, Rust, TOML, YAML, dan Dockerfile masuk ke dalam mode, pengaturan yang sebelumnya harus memasukkan URL dan path secara manual ke
treesit-language-source-alistbisa dikurangi - Jika memakai direktori Emacs bersama di beberapa arsitektur, perlu berhati-hati
- Grammar yang dipasang otomatis tidak dipisahkan per arsitektur
- File
.sountukx86_64dan.sountukarm64bisa berada di bawah nama yang sama, sehingga biner yang dibangun di satu mesin mungkin tidak bisa dimuat di mesin lain
markdown-ts-mode bawaan
- Emacs 31 menyertakan
markdown-ts-modeyang eksperimental - Mode ini berawal dari proposal yang dikirim ke emacs-devel pada awal 2025, lalu Stéphane Marks ikut menjadi penulis bersama dan melanjutkan perbaikannya
- Markdown diperlakukan bukan sekadar target penyorotan sintaks, tetapi lebih dekat ke lingkungan edit yang nyaman untuk menulis dan membaca
- Menyediakan perpindahan heading, folding, dan pemindahan elemen struktur yang terasa familier bagi pengguna Org
- fenced code block tidak lagi ditampilkan sebagai teks monospasi datar, tetapi diberi font-locking menggunakan major mode asli bahasa terkait
- Blok Emacs Lisp dan mode bawaan lainnya juga bisa mendapat penyorotan sintaks yang sebenarnya
- Perintah untuk mengedit code block juga sebagian besar berfungsi, meski fitur completion di dalam blok masih terasa agak kasar
- Tautan gambar dirender secara inline di dalam buffer
- Mode ini masih belum terhubung ke
auto-mode-alist, jadi file.mdbelum otomatis dibuka dengannya- Setelah memuat library dengan
M-x load-library RET markdown-ts-mode, mode ini bisa diaktifkan dari buffer - Bisa juga ditambahkan langsung ke
auto-mode-alist
- Setelah memuat library dengan
- Umpan balik bisa dikirim ke bug list lewat
M-x report-emacs-bug - Tangkapan layar tambahan ada di demo markdown-ts-mode-lab
Peningkatan Eglot, Eldoc, dan completion
- Di Emacs 31, Eglot bisa merender dokumentasi LSP dengan
markdown-ts-view-modeeglot-documentation-renderer 'markdown-ts-view-mode- hover docs berformat bisa dilihat tanpa paket eksternal
- Fitur ini bergantung pada
markdown-ts-mode, jadi sama-sama eksperimental
- Dengan
eglot-code-action-indications, hint inline code action yang baru bisa dimatikan- Pada beberapa language server, hint ini bisa terasa terlalu ramai
eglot-events-buffer-sizesedang digantikan oleheglot-events-buffer-configeldoc-help-at-pt tmenampilkan bantuan untuk item di bawah kursor tanpa perlu pemanggilan terpisah- Jika dipakai bersama
eldoc-echo-area-prefer-doc-buffer, panduan saat menelusuri kode yang belum dikenal jadi lebih banyak
- Jika dipakai bersama
- Pengaturan baru terkait completion membuat UI lebih agresif diperbarui saat mengetik
completion-eager-update tcompletion-eager-display 'autominibuffer-visible-completions 'up-down
completion-eager-updatedancompletion-eager-displaymemperbarui UI completion sesuai input bahkan sebelum pengguna memintanya- Jika
minibuffer-visible-completionsdisetel ke'up-down, kandidat yang terlihat bisa dinavigasi dengan tombol panah - icomplete kini menyertakan patch bug#75784 yang menambahkan perilaku vertikal di dalam buffer dan prefix indicator
icomplete-vertical-in-buffer-adjust-listicomplete-vertical-render-prefix-indicator
Tata letak jendela dan Speedbar
- Emacs 31 menambahkan perintah untuk mengubah tata letak tanpa harus membelah dan menutup jendela lagi secara manual
window-layout-transposewindow-layout-rotate-clockwisewindow-layout-flip-leftrightwindow-layout-flip-topdown
- transpose menukar susunan horizontal dan vertikal, rotate memutar seluruh tata letak, dan perintah flip mencerminkan tata letak ke kiri-kanan atau atas-bawah
- Ini berguna saat ingin mengubah posisi jendela editor saja dalam susunan 3 jendela sambil tetap mempertahankan buffer
- Di Emacs 31, Speedbar bisa ditempatkan di dalam side window alih-alih frame terpisah
speedbar-window-default-widthspeedbar-window-max-widthspeedbar-window
speedbar-windowmenambatkan Speedbar di samping seperti file tree modern- Pada lingkungan tiling atau laptop bermonitor tunggal, pendekatan side window lebih cocok daripada floating frame lama
VC dan xref yang bisa diedit
- VC mendapat beberapa pengaturan yang mengurangi langkah dalam alur version control harian
vc-auto-revert-mode tvc-allow-rewriting-published-history tvc-dir-auto-hide-up-to-date 'revert
vc-dir-auto-hide-up-to-dateotomatis menyembunyikan file yang sudah up to date saat buffervc-dirdirefresh- Dengan begitu, hack keybinding yang sebelumnya memanggil
vc-dir-hide-up-to-datesetelahvc-dir-refreshbisa dihapus
- Dengan begitu, hack keybinding yang sebelumnya memanggil
vc-allow-rewriting-published-historycocok untuk alur seperti Jujutsu atau force-push pada feature branch yang memang menulis ulang riwayat yang sudah di-push- Emacs 31 juga menghadirkan editable xref buffer
- Sebelumnya, buffer xref hanya punya
xref-query-replace-in-resultsdir, dan itu terbatas pada penggantian berbasis regex - Tidak ada alur seperti
wdired-modedi Dired ataugrep-edit-modedi buffer grep yang memungkinkan hasil xref diedit langsung
- Sebelumnya, buffer xref hanya punya
- Proposal awalnya adalah mengekspor hasil xref ke buffer
grep-modeberbentukfile:line:contentlewatxref-export-to-grep, lalu mengeditnya di sana - Dmitry Gutov, maintainer xref, mengusulkan edit inline di buffer xref alih-alih UI yang memutar lewat buffer grep, lalu
xref-edit-modepun ditulis dan dimasukkan xref-edit-modemenghilangkan perpindahan buffer tambahan dan bekerja lebih cepat bahkan pada buffer xref yang besar- Alurnya adalah mencari dengan
C-x p g, lalu di buffer*xref*tekaneuntuk memulai mode edit, dan setelah mengubahnya tekanC-c C-cuntuk mengonfirmasi - Diskusi terkait tersedia secara publik di bug#80616
ERC dan peningkatan kualitas kecil lainnya
- ERC dengan
erc-log-insert-log-on-open 'erc-log-new-target-buffer-pbisa menyisipkan log lama hanya saat membuka target buffer baru - Di Emacs 31, modul
scrolltobottommilik ERC tidak lagi bergantung padaerc-fill-wrap, jadi pengaturan kondisional untuk versi lama bisa dihapus - Nilai pengaturan kecil juga ikut meningkatkan kegunaan
delete-pair-push-mark t: mendorong mark setelahdelete-pair, sehingga bagian dalam bisa dipilih denganC-x C-xibuffer-human-readable-size t: memakai tampilan KB/MB alih-alih byte mentahielm-history-file-name: menyimpan riwayat input IELM tetap ada setelah restartkill-region-dwim 'emacs-word: saat tidak ada region aktif,C-wakan menghapus kata setelah kursor alih-alih errornative-comp-async-on-battery-power nil: menghentikan native compilation latar belakang saat memakai bateraiview-lossage-auto-refresh t:C-h lmemperbarui input tombol terbaru secara real timedisplay-fill-column-indicator-warning nildired-hide-details-hide-absolute-location t: menyembunyikan path direktori absolut dalamdired-hide-details-modeworld-clock-sort-order "%FT%T": menyesuaikan urutan world clockzone-all-frames tzone-all-windows-in-frame tuniquify-after-kill-buffer-flag t: nama baru dari varian-psebelumnya
kill-region-dwimmencegah error “the mark is not active” padaC-wview-lossage-auto-refreshberguna untuk menampilkan penekanan tombol secara real time saat screen sharing atau mengajarnative-comp-async-on-battery-power nilmengurangi situasi kipas menyala karena kompilasi latar belakang saat sedang mobile tanpa colokan listriktty-tip-modemenghadirkan tooltip bahkan pada Emacs yang dijalankan dengan-nw
term, tema Modus, dan alasan memakai master
- Emacs 31 memperbaiki masalah di
termdanansi-termyang menyebabkan baris tertelan atau layar rusak- Program seperti
htop,nethack, dan aplikasi berbasis curses yang memakai pengalamatan kursor serta redraw layar penuh kini bisa redraw dengan benar di terminal Emacs - Salah satu alasan untuk membuka emulator terminal eksternal pun berkurang
- Program seperti
- Emacs kini menyertakan tema Modus 5 dari Protesilaos
modus-operandi-deuteranopia: tema latar putih yang dioptimalkan untuk deuteranopiamodus-operandi: tema latar putih dengan keterbacaan tinggimodus-operandi-tinted: tema latar oker terang dengan keterbacaan tinggimodus-operandi-tritanopia: tema latar putih yang dioptimalkan untuk tritanopiamodus-vivendi-deuteranopia: tema latar hitam yang dioptimalkan untuk deuteranopiamodus-vivendi: tema latar hitam dengan keterbacaan tinggimodus-vivendi-tinted: tema latar langit malam dengan keterbacaan tinggimodus-vivendi-tritanopia: tema latar hitam yang dioptimalkan untuk tritanopia
- Alasan memakai Emacs yang belum dirilis setiap hari adalah untuk melihat langsung apa yang masuk ke core dan menyaksikan bagaimana glue code buatan sendiri makin berkurang di tiap rilis
- Sebagai tulisan pendamping yang membahas fitur yang sudah lebih dulu masuk, lihat juga Even More Batteries Included with Emacs
1 komentar
Pendapat Lobste.rs
Perubahan tree-sitter benar-benar patut dinantikan. Selama ini proses konfigurasinya selalu terasa agak canggung
Saya juga penasaran dengan eager complete.
icompletedanfido-modesudah cukup dekat dengan yang saya inginkan, tetapi masih belum senyaman paket pihak ketiga seperticorfuverticodan sejenisnya hanya dengan fitur bawaan, bahkan dalam keadaan aktif secara defaultDengan beberapa penyesuaian dan hanya mengaktifkan fitur bawaan, kegunaannya sudah berubah drastis;
bedrockdanemacs-solodisusun dengan pendekatan seperti ituSetiap kali memulai Emacs, selalu muncul pesan besar tentang
dylibyang hilangSintaks
(treesit-auto-install-grammar t)dan(treesit-enabled-modes t)pada contoh terlihat seperti pemanggilan fungsi, tetapi sebenarnya itu adalah opsi yang harus dikonfigurasiAda juga beberapa perubahan kecil pada rilis berikutnya yang saya suka:
minibuffer-nonselected-modeaktif secara default sehingga lebih mudah melihat apakah ada pekerjaan yang belum selesai di minibuffer, dandiff-modedengandiff-delete-other-hunkssangat berguna bila dipakai bersama perilaku VC pada buffer diff yang diperkenalkan di Emacs 29with-work-buffermiripwith-temp-buffer, tetapi memakai ulang pool buffer. Saya mengetahuinya secara tidak sengaja saat di konfigurasi pribadi saya kebetulan memakai pola nama buffer yang sama, yaitu*work*Emacs 31 kini menyertakan
lua-mode, jadi tidak perlu lagi memasangnya secara terpisahSaya juga perlu beberapa penyesuaian agar semuanya kembali bekerja persis seperti yang saya mau:
xterm-mouse-modeaktif secara default sehingga saya mematikannya secara eksplisit, dan facemode-lineberubah agar cocok dengan tema gelap, tetapi saya sudah terbiasa dengan warna default lama sehingga saya kembalikanEmacs 31 memberi peringatan jika file sumber tidak memiliki cookie
lexical-binding. Kalau mengganggu, itu bisa dimatikan; bisa juga diperbaiki dengan mudah lewat perintahelisp-enable-lexical-binding, dan bahkan memungkinkan menjadikanlexical-bindingsebagai default globalKalau tidak ada bug baru, seperti biasa ini tampaknya akan menjadi rilis yang solid
:custommilikuse-packageItulah sebabnya saya agak ragu dengan
:custom. Saat ingin bereksperimen dengan nilai atau membagikannya, rasanya jadi lebih merepotkanwith-work-buffermemang untuk tujuan performa? Dokumentasinya tidak menjelaskan kenapa harus dipakai alih-alihwith-temp-buffer, hanya mengatakan bahwa kita perlu lebih berhati-hatielpatidak diperingatkan dan hanya file saya sendiri yang diperingatkanSelain itu, dari 68 peringatan di Emacs saya, 64 berasal dari file hasil generasi
-autoloads.el. Sepertinya ini perlu diperbaiki di alat pembuat milikelpa/melpaAkhirnya xref yang bisa diedit yang sudah lama saya harapkan; ini sepertinya akan membuat hidup saya jauh lebih mudah
Ada banyak perubahan hebat yang menyentuh hal-hal yang saya pakai setiap hari, jumlahnya sampai mengejutkan
Nvim sempat mengubah default dari regex vim ke treesitter, lalu lingkungan menulis saya rusak
treesitter memerlukan sedikit konfigurasi untuk mem-parsing komentar HTML di dalam Markdown, dan bahkan setelah saya menyusun semua kepingannya, tetap saja tidak bekerja
Akhirnya saya menyelesaikannya dengan mematikan treesitter
Saya sangat konservatif terhadap infrastruktur dasar seperti editor. Perubahan editor hampir selalu merusak sesuatu yang selama bertahun-tahun sebelumnya berjalan tanpa masalah