Belajar Fzf - Integrasi dengan Tmux & Zellij
Series/Belajar Fzf/Episode 12
Episode 12 of 23

Belajar Fzf - Integrasi dengan Tmux & Zellij

Membuka fzf di dalam popup tmux dengan --tmux serta floating pane Zellij dengan --popup, lengkap dengan kontrol posisi, ukuran, dan border. Termasuk skrip fzf-tmux untuk versi lama dan pola meminjam konteks tanpa meninggalkan alur kerja.

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

Pendahuluan

Di episode 11 kalian membangun pipeline pencarian yang cepat: fd untuk daftar file, ripgrep untuk menelusuri isi, keduanya menyumpan fzf. Hasilnya, mencari file dan memburu kode terasa seketika. Namun masih ada satu friksi yang tersisa: setiap kali fzf terbuka dalam mode penuh, ia menimpa seluruh layar — kalian kehilangan konteks editor, log yang sedang diikuti, atau output yang sedang dibaca.

Episode ini menghapus friksi itu dengan menaruh fzf di dalam popup — jendela melayang di atas terminal yang kecil, fokus, dan pergi setelah dipakai. Kita akan membahas opsi --tmux (yang sejak fzf 0.71 berganti nama menjadi --popup) untuk menampilkan fzf di popup tmux maupun floating pane Zellij, skrip fzf-tmux sebagai cara lama sebelum opsi itu ada, serta kontrol posisi, ukuran, dan border.

Analogikan perbedaannya begini: mode penuh itu seperti memindahkan seluruh meja kerja ke ruangan lain ketika kalian butuh mencari satu berkas. Popup itu seperti menempelkan post-it di tepi monitor — kalian melihatnya sebentar, mengambil isinya, lalu kembali bekerja tanpa beranjak.

Kenapa Popup, Bukan Layar Penuh

fzf memang punya --height untuk menampilkan dirinya sebagai jendela kecil di bawah kursor — kita sudah bahas di episode 3. Namun --height tetap menempel pada layout terminal: ia mendorong prompt naik, dan di dalam tmux ia hanya menyusut di dalam pane yang sama. Popup melangkah lebih jauh: ia menjadi lapisan di atas semua pane, berpusat di layar, tanpa menggeser satu pun isi terminal di belakangnya.

Ini sesuai dengan mental model "pinjam konteks" yang kita kenal dari tmux: kadang kalian hanya butuh bertanya sesuatu secara singkat — nama file, nama session, PID — lalu kembali. Menjadikan itu fullscreen adalah seperti membangun ruang rapat setiap kali ingin bertanya jam berapa sekarang.

--tmux: fzf di Popup tmux

Sejak fzf 0.49, opsi --tmux menampilkan fzf di dalam popup tmux. Persyaratannya sederhana: kalian harus berada di dalam sesi tmux, dan tmux kalian minimal versi 3.3. Di luar tmux, opsi ini diabaikan dengan tenang — tidak error, tidak memprotes.

Tanpa argumen, --tmux memakai default center,50%: popup di tengah layar, selebar dan setinggi setengah layar:

Popup fzf di tengah layar
fzf --tmux
Tanpa argumen, --tmux memakai default center,50%
Varian posisi dan ukuran popup
fzf --tmux center,50%
fzf --tmux left,40%,70%
fzf --tmux right,35%
fzf --tmux bottom,60%
Format: posisi, lebar, tinggi — masing-masing boleh memakai persen

Format Posisi dan Ukuran

Syntax lengkapnya adalah [center|top|bottom|left|right][,LEBAR[%]][,TINGGI[%]]. Nilai yang tidak ditulis memakai default: posisi center, lebar dan tinggi 50%. Ukuran boleh angka mutlak (kolom/baris) atau persen:

BentukPosisiUkuran
center,50%Tengah50% lebar dan tinggi
left,40%Kiri40% lebar, tinggi default 50%
top,80%,40%Atas80% lebar, 40% tinggi
bottom,60%Bawah60% tinggi, lebar default 50%

Note

--tmux baru aktif bila terdeteksi variabel lingkungan tmux. Karena itu pola yang aman untuk script yang dipakai di dalam dan luar tmux adalah menyebut --height terlebih dahulu, lalu --tmux: di luar tmux --tmux diabaikan dan --height yang bekerja; di dalam tmux --tmux menang.

Fallback aman di luar tmux
fzf --height 70% --tmux 70%
--height dipakai hanya ketika --tmux tidak berlaku

fzf-tmux: Skrip untuk Versi Lama

Sebelum --tmux lahir, cara menampilkan fzf di jendela kecil tmux adalah lewat skrip pembungkus fzf-tmux yang ikut terpasang bersama fzf. Skrip ini membuat split atau popup tmux, menjalankan fzf di dalamnya, lalu menunggu hasilnya. Ia masih berguna untuk tmux yang lebih tua dari 3.3:

fzf-tmux untuk tmux di bawah 3.3
fzf-tmux -p 70%,60% -- fzf --reverse
-p membuka popup; -d, -u, -l, -r membuka split di arah tertentu

Bentuk -p LEBAR%,TINGGI% serupa dengan --tmux: popup di tengah. Untuk mesin modern, --tmux dan --popup adalah pilihan yang lebih bersih — satu opsi, tanpa skrip perantara — tetapi memahami fzf-tmux penting karena banyak tutorial lama dan dokumentasi plugin masih menunjukkannya.

--popup: Satu Nama untuk Tmux dan Zellij

Keterbatasan --tmux adalah namanya yang terikat pada satu ekosistem. fzf 0.71 menyelesaikan ini dengan memperkenalkan --popup sebagai nama baru, dengan --tmux menjadi aliasnya. Nilai besarnya: --popup kini juga bekerja di dalam Zellij (Zellij 0.44 ke atas), membuka floating pane secara otomatis. Satu opsi, dua rumah.

--popup di dalam Zellij
fzf --popup center,60%
Zellij 0.44 ke atas; fzf membuka floating pane otomatis
--popup di dalam tmux
fzf --popup bottom,40%
--popup dan --tmux adalah opsi yang sama; tersedia sejak 0.71

Bagi tim yang memakai keduanya — sebagian anggota di tmux, sebagian di Zellij — --popup di konfigurasi bersama berarti kalian cukup menulis satu perintah yang bekerja di mana pun.

Border: Native atau Digambar fzf

Satu detail yang sering membingungkan adalah border popup. Pada tmux 3.7 ke atas dan Zellij, --popup memakai border native — border asli dari floating pane — sehingga pane bisa digeser dan di-resize dengan mouse, dan tetap bisa di-zoom. Jika kalian menyebut --border secara eksplisit, fzf beralih menggambar border-nya sendiri. Kata kunci border-native memaksa fzf memakai border milik tmux atau Zellij:

Border native untuk popup
fzf --popup border-native
border-native memakai border asli tmux atau Zellij sehingga pane bisa digeser
Label pada border popup
fzf --popup --border-label ' fzf '
--border-label tampil pada floating pane sebagai nama pane

Tip

Kalau kalian sering membuka fzf di popup yang sama berulang kali, jangan ketik ulang — daftarkan di konfigurasi. Contohnya lewat FZF_CTRL_T_OPTS="--tmux center,50%" sehingga pencarian file Ctrl+T otomatis melayang di popup, tanpa perlu menyentuh skrip integrasi shell.

Pola Praktis: Session Switcher dalam Popup

Sekarang kita satukan semuanya: popup + preview + aksi. Contoh klasik yang langsung terasa manfaatnya adalah session switcher tmux — daftar session, preview isi pane-nya, lalu pindah tanpa meninggalkan apa pun:

Ganti session tmux lewat popup
tmux list-sessions -F '#S' | fzf --tmux center,60% \
    --preview 'tmux capture-pane -pt {} -S -20 2>/dev/null' \
    --bind 'enter:execute(tmux switch-client -t {})+abort'
Preview isi pane session dengan capture-pane; enter untuk berpindah

Bacalah dari kiri: daftar session masuk ke fzf, fzf tampil sebagai popup, preview menampilkan 20 baris terakhir pane session yang sedang disorot, dan Enter memindahkan client. Jika kalian menekan Esc, tidak terjadi apa-apa — aman. Pola yang sama bisa dipakai untuk pilih file, pilih container Docker, atau pilih host — cukup ganti sumber daftar dan preview-nya.

Kesalahan Umum

KesalahanGejalaSolusi
--tmux di luar tmuxDiabaikan, fzf membuka layar penuhGabung dengan --height sebagai fallback
tmux lebih tua dari 3.3Popup tidak munculUpgrade tmux, atau pakai skrip fzf-tmux
Ukuran tidak ditentukanPopup terasa terlalu besar/kecilTulis format lengkap posisi,LEBAR%,TINGGI%
Mengharapkan --tmux di ZellijPopup tidak munculGunakan --popup (0.71+) yang mendukung keduanya
Lupa menambah --tmux di skripfzf menimpa layar saat di dalam tmuxEkspor lewat FZF_CTRL_T_OPTS atau FZF_DEFAULT_OPTS

Caution

Popup adalah alat meminjam konteks, bukan pengganti tata letak kerja. Untuk proses yang harus menetap — dev server, log tailing, editor — tetaplah gunakan pane dan window tmux biasa. Memakai popup untuk pekerjaan yang panjang justru menambah friksi karena popup tidak punya ruang untuk banyak konten dan hilang begitu ditutup.

Penutup

Pada episode 12 ini kalian membawa fzf ke lapisan atas terminal: --tmux untuk popup tmux dengan kontrol penuh posisi dan ukuran (center,50%, left,40%,70%, bottom,60%), skrip fzf-tmux untuk versi lama, --popup sejak 0.71 yang menyatukan tmux dan Zellij dalam satu opsi, kontrol border native versus border yang digambar fzf, dan pola session switcher yang memadukan popup, preview, serta aksi execute.

Kunci yang harus dibawa pulang: fzf tidak lagi harus menguasai layar. Dengan --popup, ia menjadi asisten yang muncul saat diminta dan menghilang saat selesai — dan ini membuka pintu bagi skenario berikutnya.

Namun semua contoh sejauh ini masih berjalan di satu mesin. Di episode 13 kita membawa fzf ke dunia remote: remote development & SSH workflow — mencari file, menelusuri history, dan memilih proses langsung di server lewat SSH, operasi batch massal dengan fzf dan xargs, hingga mengelola lusinan host sekaligus. Karena server tidak pernah berjarak nol meter dari meja kalian, bukan?

Belajar Fzf - Integrasi dengan Tmux & Zellij | Belajar Fzf