1 poin oleh GN⁺ 13 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • Emacs 31 belum dirilis resmi, tetapi perubahan yang sudah terasa di branch emacs-31 dan master terus 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, dan xref-edit-mode memperkuat 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, dan native-comp-async-on-battery-power mengurangi gesekan berulang dalam penggunaan sehari-hari
  • Nama fitur dan nilai default di Emacs 31 masih bisa berubah, dan markdown-ts-mode beserta 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-31 dan master pada 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.el milik 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 t
    • treesit-auto-install-grammar t
  • Jika treesit-enabled-modes disetel ke t, major mode yang punya varian Tree-sitter akan dialihkan ke mode tersebut
  • treesit-auto-install-grammar tidak 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-alist bisa dikurangi
  • Jika memakai direktori Emacs bersama di beberapa arsitektur, perlu berhati-hati
    • Grammar yang dipasang otomatis tidak dipisahkan per arsitektur
    • File .so untuk x86_64 dan .so untuk arm64 bisa 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-mode yang 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 .md belum 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
  • 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-mode
    • eglot-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-size sedang digantikan oleh eglot-events-buffer-config
  • eldoc-help-at-pt t menampilkan 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
  • Pengaturan baru terkait completion membuat UI lebih agresif diperbarui saat mengetik
    • completion-eager-update t
    • completion-eager-display 'auto
    • minibuffer-visible-completions 'up-down
  • completion-eager-update dan completion-eager-display memperbarui UI completion sesuai input bahkan sebelum pengguna memintanya
  • Jika minibuffer-visible-completions disetel 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-list
    • icomplete-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-transpose
    • window-layout-rotate-clockwise
    • window-layout-flip-leftright
    • window-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-width
    • speedbar-window-max-width
    • speedbar-window
  • speedbar-window menambatkan 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 t
    • vc-allow-rewriting-published-history t
    • vc-dir-auto-hide-up-to-date 'revert
  • vc-dir-auto-hide-up-to-date otomatis menyembunyikan file yang sudah up to date saat buffer vc-dir direfresh
    • Dengan begitu, hack keybinding yang sebelumnya memanggil vc-dir-hide-up-to-date setelah vc-dir-refresh bisa dihapus
  • vc-allow-rewriting-published-history cocok 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-results di r, dan itu terbatas pada penggantian berbasis regex
    • Tidak ada alur seperti wdired-mode di Dired atau grep-edit-mode di buffer grep yang memungkinkan hasil xref diedit langsung
  • Proposal awalnya adalah mengekspor hasil xref ke buffer grep-mode berbentuk file:line:content lewat xref-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-mode pun ditulis dan dimasukkan
  • xref-edit-mode menghilangkan 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* tekan e untuk memulai mode edit, dan setelah mengubahnya tekan C-c C-c untuk 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-p bisa menyisipkan log lama hanya saat membuka target buffer baru
  • Di Emacs 31, modul scrolltobottom milik ERC tidak lagi bergantung pada erc-fill-wrap, jadi pengaturan kondisional untuk versi lama bisa dihapus
  • Nilai pengaturan kecil juga ikut meningkatkan kegunaan
    • delete-pair-push-mark t: mendorong mark setelah delete-pair, sehingga bagian dalam bisa dipilih dengan C-x C-x
    • ibuffer-human-readable-size t: memakai tampilan KB/MB alih-alih byte mentah
    • ielm-history-file-name: menyimpan riwayat input IELM tetap ada setelah restart
    • kill-region-dwim 'emacs-word: saat tidak ada region aktif, C-w akan menghapus kata setelah kursor alih-alih error
    • native-comp-async-on-battery-power nil: menghentikan native compilation latar belakang saat memakai baterai
    • view-lossage-auto-refresh t: C-h l memperbarui input tombol terbaru secara real time
    • display-fill-column-indicator-warning nil
    • dired-hide-details-hide-absolute-location t: menyembunyikan path direktori absolut dalam dired-hide-details-mode
    • world-clock-sort-order "%FT%T": menyesuaikan urutan world clock
    • zone-all-frames t
    • zone-all-windows-in-frame t
    • uniquify-after-kill-buffer-flag t: nama baru dari varian -p sebelumnya
  • kill-region-dwim mencegah error “the mark is not active” pada C-w
  • view-lossage-auto-refresh berguna untuk menampilkan penekanan tombol secara real time saat screen sharing atau mengajar
  • native-comp-async-on-battery-power nil mengurangi situasi kipas menyala karena kompilasi latar belakang saat sedang mobile tanpa colokan listrik
  • tty-tip-mode menghadirkan tooltip bahkan pada Emacs yang dijalankan dengan -nw

term, tema Modus, dan alasan memakai master

  • Emacs 31 memperbaiki masalah di term dan ansi-term yang 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
  • Emacs kini menyertakan tema Modus 5 dari Protesilaos
    • modus-operandi-deuteranopia: tema latar putih yang dioptimalkan untuk deuteranopia
    • modus-operandi: tema latar putih dengan keterbacaan tinggi
    • modus-operandi-tinted: tema latar oker terang dengan keterbacaan tinggi
    • modus-operandi-tritanopia: tema latar putih yang dioptimalkan untuk tritanopia
    • modus-vivendi-deuteranopia: tema latar hitam yang dioptimalkan untuk deuteranopia
    • modus-vivendi: tema latar hitam dengan keterbacaan tinggi
    • modus-vivendi-tinted: tema latar langit malam dengan keterbacaan tinggi
    • modus-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

 
GN⁺ 13 jam lalu
Pendapat Lobste.rs
  • Perubahan tree-sitter benar-benar patut dinantikan. Selama ini proses konfigurasinya selalu terasa agak canggung
    Saya juga penasaran dengan eager complete. icomplete dan fido-mode sudah cukup dekat dengan yang saya inginkan, tetapi masih belum senyaman paket pihak ketiga seperti corfu

    • Semoga suatu saat kita bisa mendapatkan pengalaman yang mendekati vertico dan sejenisnya hanya dengan fitur bawaan, bahkan dalam keadaan aktif secara default
      Dengan beberapa penyesuaian dan hanya mengaktifkan fitur bawaan, kegunaannya sudah berubah drastis; bedrock dan emacs-solo disusun dengan pendekatan seperti itu
    • Saya memakai Emacs 32 setiap hari, dan sulit dibilang bahwa treesit langsung berfungsi begitu saja
      Setiap kali memulai Emacs, selalu muncul pesan besar tentang dylib yang hilang
  • Sintaks (treesit-auto-install-grammar t) dan (treesit-enabled-modes t) pada contoh terlihat seperti pemanggilan fungsi, tetapi sebenarnya itu adalah opsi yang harus dikonfigurasi
    Ada juga beberapa perubahan kecil pada rilis berikutnya yang saya suka: minibuffer-nonselected-mode aktif secara default sehingga lebih mudah melihat apakah ada pekerjaan yang belum selesai di minibuffer, dan diff-mode dengan diff-delete-other-hunks sangat berguna bila dipakai bersama perilaku VC pada buffer diff yang diperkenalkan di Emacs 29
    with-work-buffer mirip with-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 terpisah
    Saya juga perlu beberapa penyesuaian agar semuanya kembali bekerja persis seperti yang saya mau: xterm-mouse-mode aktif secara default sehingga saya mematikannya secara eksplisit, dan face mode-line berubah agar cocok dengan tema gelap, tetapi saya sudah terbiasa dengan warna default lama sehingga saya kembalikan
    Emacs 31 memberi peringatan jika file sumber tidak memiliki cookie lexical-binding. Kalau mengganggu, itu bisa dimatikan; bisa juga diperbaiki dengan mudah lewat perintah elisp-enable-lexical-binding, dan bahkan memungkinkan menjadikan lexical-binding sebagai default global
    Kalau tidak ada bug baru, seperti biasa ini tampaknya akan menjadi rilis yang solid

    • Contoh ini mungkin disalin dari daftar :custom milik use-package
      Itulah sebabnya saya agak ragu dengan :custom. Saat ingin bereksperimen dengan nilai atau membagikannya, rasanya jadi lebih merepotkan
    • Apakah with-work-buffer memang untuk tujuan performa? Dokumentasinya tidak menjelaskan kenapa harus dipakai alih-alih with-temp-buffer, hanya mengatakan bahwa kita perlu lebih berhati-hati
    • Saya penasaran bagaimana cara mematikan peringatan ini. Idealnya, akan bagus jika file di dalam elpa tidak diperingatkan dan hanya file saya sendiri yang diperingatkan
      Selain itu, dari 68 peringatan di Emacs saya, 64 berasal dari file hasil generasi -autoloads.el. Sepertinya ini perlu diperbaiki di alat pembuat milik elpa/melpa
  • Akhirnya 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

    • Untungnya, Emacs tidak mengubah default menjadi treesitter; semuanya masih aktif secara opsional