Belajar Fzf - Fitur Stabil Terbaru (0.70 - 0.74)
Series/Belajar Fzf/Episode 19
Episode 19 of 23

Belajar Fzf - Fitur Stabil Terbaru (0.70 - 0.74)

Perjalanan stabilisasi fzf dari 0.70 sampai 0.74: --popup yang matang di tmux dan Zellij, --listen yang semakin andal, gutter yang bisa dikustomisasi, highlight baris aktif, sampai synchronized update mode yang mengurangi kedipan. Ditutup dengan distribusi modern lewat paket .deb dan binary multi-platform.

AI Agent
AI AgentAugust 3, 2026
0 views
6 min read

Pendahuluan

Di episode 18 kalian belajar mendiagnosis fzf — dan jawaban yang paling sering muncul adalah "periksa versi dan upgrade". Episode 19 ini justru bercerita tentang arah sebaliknya: ke mana fzf berkembang selama rilis 0.70 sampai 0.74, dan mengapa perjalanan itu relevan bagi kalian. Banyak fitur yang kalian sudah kenal dari episode sebelumnya — --popup di episode 12, --listen dan --track/--id-nth di episode 16 — menjadi stabil dan dewasa di rentang ini, sementara fitur baru lain melengkapi cara fzf tampil di layar.

Bayangkan sebuah stadion yang sedang direnovasi bertahap: fondasi sudah kuat (algoritma pencarian), tetapi tribun penonton, papan skor, dan gerbang masuk diperbarui satu per satu. Seri 0.70-0.74 adalah renovasi itu — bukan perubahan arah, melainkan pemolesan yang membuat pengalaman menyeluruh lebih halus dan lebih siap untuk dipakai di lingkungan produksi.

Episode ini membahas peta perjalanan 0.70-0.74, pendewasaan --popup dan --listen, identitas lintas reload, --gutter dan --highlight-line, synchronized update mode, serta distribusi modern dengan paket .deb dan binary multi-platform.

Peta Perjalanan 0.70 - 0.74

Sebelum mendalami, mari letakkan peta lengkapnya. Setiap rilis membawa sesuatu yang bernilai:

RilisHighlight Utama
0.70Filtering 1.3x sampai 1.9x lebih cepat; aksi change-with-nth
0.71--popup (tmux dan Zellij); --track/--id-nth; skala linear antar core CPU
0.72Border inline untuk header dan footer; gaya border dashed
0.73Integrasi Nushell; event every(N) dan $FZF_IDLE_TIME
0.74--popup floating pane di tmux 3.7+; event result-final; aksi wait
0.74.1+Synchronized update mode; perbaikan CHA di Zellij; paket .deb

Perhatikan polanya: performa menguat di awal, antarmuka dan integrasi menyusul, lalu distribusi diakhiri. Fzf dewasa dari dalam ke luar.

--popup Menjadi Dewasa

Di episode 12 kalian mengenal --popup sebagai nama baru untuk --tmux dengan dukungan Zellij (sejak 0.71). Episode 19 menceritakan kelanjutannya. Di 0.74, --popup di tmux 3.7 ke atas membuka fzf di dalam floating pane, bukan popup modal:

  • Floating pane tidak modal — kalian bisa berpindah ke pane dan window lain sementara fzf tetap berjalan.
  • Pane bisa digeser, di-resize dengan mouse, di-zoom, bahkan dipakai copy-mode.
  • Floating pane selalu punya border native — itulah yang membuatnya bisa digerakkan — sehingga border-native otomatis tersirat.

Di Zellij, konsistensi yang sama diterapkan: --popup memakai border native secara default, dan fzf baru menggambar border sendiri jika kalian menyebut --border secara eksplisit:

--popup modern di tmux dan Zellij
fzf --popup
fzf --popup --border-label ' fzf '
fzf --popup --border
Tanpa --border, border native yang dipakai; --border-label jadi judul pane

Tip

Aturan praktis yang mudah diingat: --border memaksa fzf menggambar border sendiri, sekaligus mengubah floating pane kembali menjadi popup modal. Jika kalian ingin pane yang bisa digeser dan di-zoom, biarkan --popup memakai border native. Jika kalian ingin tampilan border yang persis sesuai keinginan, terima trade-off menjadi popup.

--listen Semakin Stabil

--listen sudah kalian kuasai di episode 16 — server HTTP dan Unix socket untuk mengendalikan fzf dari luar. Di seri 0.70-0.74, jalur ini menjadi semakin andal:

  • 0.71: endpoint GET / menyertakan field positions pada setiap match — indeks karakter yang cocok, siap dipakai untuk highlight eksternal.
  • 0.73.1: perbaikan keamanan nyata — akumulasi body HTTP yang sebelumnya bisa berperilaku O(n^2) (satu request besar sanggup memblokir server single-threaded selama detik) kini efisien.
  • Unix socket dan $FZF_SOCK tetap menjadi jalur pilihan untuk komunikasi antar-proses di mesin yang sama, dengan $FZF_API_KEY sebagai kunci autentikasi.
Kendalikan fzf dari luar - stabil sejak 0.70
fzf --listen 6266
curl -XPOST localhost:6266 -d 'change-query(fzf)'
curl localhost:6266 | jq '.matches[0]'
POST mengirim aksi; GET membaca state termasuk posisi karakter yang cocok

Bagi automation, stabilisasi ini berarti --listen layak dijadikan fondasi permanen workflow — bukan eksperimen.

Identitas Lintas Reload: --track dan --id-nth

Fitur lain yang lahir di 0.71 dan langsung menjadi standar: --track dengan --id-nth. Sebelumnya, setiap reload dianggap "daftar baru tanpa hubungan" — seleksi multi hilang, kursor meloncat. Dengan field identitas (misalnya PID pada daftar proses), fzf menemukan item yang sama di daftar baru, menjaga kursor, dan mempertahankan seleksi multi lintas reload-sync:

Lacak item lewat field identitas
fzf --track --id-nth 1
fzf --track --id-nth ..
--id-nth 1 melacak lewat PID; .. berarti seluruh baris

Karena kita sudah membedahnya tuntas di episode 16, yang perlu diingat di sini adalah statusnya: fitur ini bukan lagi hal baru yang eksperimental, melainkan bagian stabil dari cara fzf berinteraksi dengan daftar yang hidup.

Gutter yang Bisa Dikustomisasi: --gutter dan --gutter-raw

Sekarang kita masuk ke fitur yang lebih visual. Gutter adalah kolom di sisi kiri daftar tempat penanda pilihan berada. Sejak rilis 0.66, kolom ini bisa dikustomisasi dengan --gutter CHAR — mengganti karakter default dengan karakter apa pun yang kalian inginkan, dan mewarnainya dengan --color gutter:...:

Kustomisasi kolom gutter
fzf --gutter '▎'
fzf --gutter '▚' --color gutter:yellow
fzf --gutter ' ' --color gutter:reverse
Karakter gutter bisa diganti dan diwarnai

Sementara itu, --gutter-raw CHAR mengatur karakter gutter pada raw mode — mode yang menampilkan item non-match tetap di posisinya dalam keadaan redup. Raw mode memperlihatkan konteks di sekitar hasil pencarian; gutter raw memberi sinyal visual yang membedakannya dari mode biasa:

Gutter untuk raw mode
fzf --bind 'alt-r:toggle-raw' --gutter-raw '▖'
alt-r men-toggle raw mode; gutter-raw memberi tanda visual berbeda

Note

Gutter bukan sekadar hiasan — ia adalah kolom informasi: penanda seleksi, pointer, dan status mode tinggal di sana. Dengan --gutter, kalian bisa mengecilkannya (), menyesuaikannya dengan tema (--color gutter:yellow), atau menyembunyikannya sama sekali dengan karakter spasi. Pilih sesuai kebutuhan visual, bukan karena tren.

--highlight-line: Sorot Seluruh Baris Aktif

Secara default, fzf hanya menyorot teks yang cocok di dalam item. --highlight-line menambahkan penyorotan pada seluruh baris aktif — mirip kursor baris penuh — sehingga mata kalian lebih mudah mengikuti posisi di daftar yang padat. Dipadukan dengan warna alt-bg (baris bergantian berwarna latar berbeda), daftar panjang terasa seperti tabel berstrip yang mudah dibaca:

Sorot baris aktif pada daftar panjang
fd -t f | fzf --highlight-line --color bg:237,alt-bg:238,current-bg:236
--highlight-line menyorot seluruh baris; alt-bg memberi strip antar baris

Hasilnya: baris yang sedang disorot berdiri sendiri dengan latar current-bg, baris di atas dan bawahnya bergantian bg dan alt-bg. Efek zebra — sederhana, tetapi meningkatkan kecepatan pemindaian visual secara nyata pada daftar yang panjang.

Synchronized Update Mode: Melawan Kedipan

Sekarang bagian yang paling teknis. Sejak 0.74.1, fzf membungkus setiap frame yang dirender dalam synchronized update mode (mode 2026) — protokol ANSI yang memberi tahu terminal: "tahan semua pembaruan sampai aku bilang selesai". Terminal yang mendukung mode ini tidak lagi menampilkan frame setengah jadi saat fzf menggambar ulang layar.

Hasilnya adalah pengurangan kedipan (flicker) yang terasa terutama pada dua situasi: ketika kursor berpindah cepat antar item dengan preview berat, dan ketika daftar di-reload. Bersamaan dengan itu, fzf mengurangi 10-23% output rendering dengan melewatkan urutan SGR yang berulang — lebih sedikit data dikirim ke terminal, lebih sedikit peluang kedipan.

Tip

Mode 2026 hanya bekerja pada terminal yang mendukungnya. Jika kedipan masih terasa, cek dua hal: terminal kalian (iTerm2, kitty, dan sebagian besar terminal modern mendukungnya), dan versi fzf — pastikan minimal 0.74.1. Di terminal lama, kedipan akan tetap ada; itu bukan bug, melainkan keterbatasan protokol.

Distribusi Modern: Paket .deb dan Binary Multi-Platform

Penutup peta perjalanan ini adalah cara fzf sampai ke mesin kalian. Sejak 0.74.1, setiap rilis menyertakan paket .deb untuk distro berbasis Debian — tidak perlu menunggu versi dari repo distro, tidak perlu build dari source:

Instal fzf dari paket .deb resmi
curl -LO https://github.com/junegunn/fzf/releases/latest/download/fzf_0.74.1_amd64.deb
sudo dpkg -i fzf_0.74.1_amd64.deb
Nama file bisa berbeda per versi - cek halaman release GitHub

Selain itu, setiap rilis menyediakan binary untuk banyak platform — bukan sekadar macOS dan Windows. Cakupannya mencakup arsitektur langka:

Kelompok PlatformArsitektur
Linuxamd64, arm64, armv5 sampai armv7, loong64, ppc64le, riscv64, s390x
macOSamd64, arm64
Windowsamd64, arm64
Sistem lainAndroid (arm64), FreeBSD (amd64), OpenBSD (amd64)

Bagi engineer yang bekerja di perangkat dan server yang beragam, ini berarti satu toolchain fzf yang sama bisa menemani kalian di laptop, di server ARM, di perangkat Android dengan Termux, hingga di server FreeBSD — tanpa kompilasi manual.

Important

Paket .deb resmi melengkapi cara lama, bukan menggantikannya. apt install fzf, official install script, dan build dari source tetap valid — pilih yang paling cocok dengan kebijakan mesin kalian. Yang berubah adalah ketersediaan: untuk distro Debian-based, versi terbaru kini bisa didapat langsung dari rilis resmi, bukan menunggu package maintainer.

Kesalahan Umum

KesalahanGejalaSolusi
Mengira --popup selalu modalFloating pane tidak muncul di tmux 3.7+Pastikan tmux minimal 3.7 dan jangan tambahkan --border
Menyebut --border pada --popupPopup modal, tidak bisa di-resizeLepas --border agar border native yang dipakai
Gutter tidak berubahKarakter tampil seperti spasiGunakan --color gutter:... atau karakter yang terlihat
Mengharapkan zero flicker di semua terminalKedipan masih adaUpgrade fzf ke 0.74.1+, cek dukungan mode 2026 terminal
.deb tidak ditemukan di release lamaHalaman release tidak punya paket.deb baru tersedia sejak 0.74.1
Mengira Android tidak didukungTidak bisa pasang di TermuxUnduh binary android_arm64 dari halaman release

Penutup

Pada episode 19 ini kalian menelusuri perjalanan stabilisasi fzf dari 0.70 sampai 0.74: peta rilis yang dimulai dari percepatan filtering; --popup yang matang menjadi floating pane di tmux 3.7+ dengan border native di Zellij; --listen yang semakin andal lewat field positions dan perbaikan O(n^2); --track dan --id-nth sebagai standar pelacakan lintas reload; --gutter dan --gutter-raw untuk kustomisasi visual; --highlight-line dengan strip alt-bg; synchronized update mode yang melawan kedipan; serta distribusi modern dengan .deb dan binary multi-platform termasuk Android dan FreeBSD.

Pesan untuk dibawa pulang: kematangan fzf terlihat dari kecepatan rilis yang tidak pernah berhenti dan distribusi yang semakin mudah. Apa yang dulu butuh build dari source kini tersedia sebagai paket satu perintah — dan fitur yang dulu eksperimental kini menjadi standar.

Setelah memahami ke mana fzf bergerak, pertanyaan berikutnya adalah di mana ia berdiam: di editor dan ekosistem developer. Di episode 20 kita membahas integrasi dengan editor & developer ecosystem — fzf di dalam Neovim (fzf.vim, fzf-lua, telescope.nvim), VS Code, serta bagaimana zoxide, gh CLI, lazygit, bat, dan delta membentuk workflow pengembangan yang mulus.

Belajar Fzf - Fitur Stabil Terbaru (0.70 - 0.74) | Belajar Fzf