Memetakan aksi ke tombol dengan bind-key, mengendalikan tmux lewat command prompt dan command chaining, serta membangun menu dan popup modern dengan display-menu dan display-popup.

Di episode 10 sebelumnya kita menguasai format strings — kemampuan membaca dan menampilkan informasi dari tmux. Pada episode ini kita membalik arah: belajar memerintah tmux. Dua cara untuk itu: mengikat perintah ke tombol dengan bind-key, dan mengetik perintah langsung lewat command prompt. Kita juga akan membangun antarmuka modern dengan display-menu dan display-popup — dua fitur yang mengubah tmux dari sekadar multiplexer menjadi launcher aplikasi dalam terminal.
Mengapa ini penting? Default keybinding tmux hanya menyediakan aksi generik. Workflow nyata kalian — "buka project api", "jalankan test", "lihat git log" — tidak ada di default. Custom keybinding dan menu adalah cara mengukir tmux mengikuti kebiasaan kalian. Engineer yang sudah mahir membangun "dashborad" tombol pribadi sehingga aksi paling sering dijalankan dalam satu atau dua ketukan, tanpa menyentuh mouse.
Perintah inti adalah bind-key (alias bind). Bentuk dasarnya: bind <tombol> <command> — di dalam config atau command prompt, command ditulis tanpa awalan tmux.
bind R source-file ~/.tmux.conf
bind S choose-tree -Zs
bind -n F12 detachprefix + R untuk me-reload config (huruf besar dipakai agar tidak bentrok dengan prefix + r default rename).prefix + S untuk membuka session picker.-n (no-prefix): F12 langsung bekerja tanpa prefix.Sebelum mengikat tombol, lepas dulu ikatan default dengan unbind-key (alias unbind). Ini penting karena keybinding yang sama tidak bisa dua-duanya aktif.
unbind C-b
set -g prefix C-a
bind C-a send-prefixBlok ini adalah cara klasik mengubah prefix dari Ctrl+B menjadi Ctrl+A. Urutan membaca: lepas Ctrl+B, set prefix baru, lalu ikat Ctrl+A untuk mengirim prefix (agar perintah send-prefix tetap bisa diakses saat nested).
Note
Mengubah prefix adalah keputusan besar — hampir semua keybinding lain tetap bekerja karena tmux merujuk pada konsep "prefix", bukan tombol spesifik. Namun keybinding yang menekan tombol lama secara eksplisit (misal bind C-b ...) perlu disesuaikan. Lihat daftar lengkap dengan tmux list-keys untuk memeriksa konflik.
| Flag | Arti |
|---|---|
-n | Tanpa prefix (langsung) |
-r | Repeatable — tombol bisa diulang tanpa menekan prefix lagi |
-T <table> | Keybinding table (prefix, root, copy-mode, popup) |
-N <note> | Catatan yang tampil di list-keys |
prefix + : membuka command prompt di bawah layar — tempat mengetik perintah tmux apa pun secara langsung. Ini adalah "REPL" tmux: semua perintah yang ada di tmux list-commands bisa dijalankan dari sini tanpa menulis di shell.
new-window -c ~/project/api -n editor
display-message "selamat datang di #{session_name}"
set-environment -g DEPLOY_TARGET stagingCommand prompt adalah jembatan antara config dan interaksi live: kalian bisa menguji perintah di sini sebelum menuliskannya ke ~/.tmux.conf.
Beberapa perintah bisa dirangkai dalam satu baris dengan titik koma ;. Ini membuat satu keybinding bisa melakukan banyak hal sekaligus.
bind T split-window -h \; send-keys 'htop' Enter
bind P new-window -n logs \; send-keys 'journalctl -f' Enter
bind R source-file ~/.tmux.conf \; display-message "Config reloaded"Baris pertama: prefix + T membuka pane baru di kanan lalu langsung menjalankan htop. Baris kedua: prefix + P membuka window logs dan langsung menampilkan log system. Perhatikan cara menulis \; di dalam config — titik koma harus di-escape agar tidak dianggap pemisah baris config.
Fitur display-menu (tmux 3.3+) memungkinkan membangun menu interaktif di tengah layar — mirip menu kontekstual, sepenuhnya keyboard-driven. Ini cara paling elegan untuk mengelompokkan banyak aksi.
bind m display-menu -T "Dev Menu" \
"▶ Editor" E "send-keys 'nvim' Enter" \
"▶ Server" S "send-keys 'npm run dev' Enter" \
"▶ Git Log" L "display-popup -E 'git log --oneline'" \
"" \
"⏻ Kill Pane" k "kill-pane"Hasilnya: prefix + m membuka menu dengan empat entri. Setiap baris terdiri dari tiga bagian: label, shortcut key, dan command yang dijalankan saat dipilih. Kalian bisa menavigasi dengan panah dan Enter, atau langsung menekan huruf shortcut.
Tip
display-menu juga bisa dipakai dari command prompt dan scripting. Untuk workflow development, menu adalah pengganti yang jauh lebih baik daripada menghafal selusin keybinding untuk aksi yang jarang dipakai: taruh aksi sering di keybinding, aksi jarang di menu.
display-popup (tmux 3.3+, popup dirender di atas layout) membuka window kecil yang mengambang di atas pane — sempurna untuk menjalankan perintah yang butuh konteks tapi tidak mau meninggalkan pane utama. Fitur ini berkembang signifikan di tmux 3.7 (floating panes yang bisa diinteraksi penuh).
bind g display-popup -E -w 80% -h 60% 'git log --oneline --graph --decorate'
bind f display-popup -E "find . -name '*.ts' | fzf"
bind a display-popup -E "nvim -c 'lua require(\"telescope\").extensions.git.branches()'"bind g — membuka popup git log di tengah layar (80% lebar, 60% tinggi).bind f — fuzzy file finder dalam popup.bind a — membuka editor dalam popup.Flag -E menutup popup otomatis setelah command selesai; -w/-h mengatur ukuran. Popup sangat cocok untuk "quick glance" yang tidak mengganggu alur kerja pane utama.
Terkadang kalian butuh nilai dari pengguna saat keybinding dijalankan. command-prompt menampilkan prompt input dan meneruskan hasilnya ke command.
bind r command-prompt -p "Rename window: " {rename-window '%%'}
bind s command-prompt -I "#{pane_current_path}" -p "New window in: " {new-window -c '%%'}bind r — meminta nama baru lalu me-rename window.bind s — meminta path (dengan nilai awal dari path pane saat ini) lalu membuat window di path tersebut.Notasi '%%' adalah placeholder untuk input yang diberikan pengguna — hasil prompt disisipkan di posisi itu.
Important
Perhatikan penulisan placeholder: prompt di dalam kurung kurawal harus memakai %% untuk input. Ini mudah terlewat — jika kalian menulis %1 seperti di tmux lama, hasilnya tidak akan berfungsi di versi 3.7b. Selalu uji satu keybinding baru di command prompt terlebih dahulu sebelum menyimpannya ke config.
Berikut contoh config yang menggabungkan semua teknik episode ini menjadi "launchpad" workflow development:
# ===== PREFIX =====
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# ===== RELOAD =====
bind R source-file ~/.tmux.conf \; display-message "Config reloaded"
# ===== LAUNCHER =====
bind m display-menu -T "Launchpad" \
"▶ Editor" e "send-keys 'nvim' Enter" \
"▶ Dev Server" s "send-keys 'npm run dev' Enter" \
"▶ Git Log" l "display-popup -E 'git log --oneline --graph'" \
"" \
"⏻ Kill Pane" k "kill-pane"
# ===== POPUP =====
bind g display-popup -E -w 80% -h 60% 'git log --oneline --graph --decorate'
bind f display-popup -E "find . -name '*.ts' | fzf"
# ===== PROMPT =====
bind r command-prompt -p "Rename window: " {rename-window '%%'}Reload dengan prefix + R, lalu uji prefix + m, prefix + g, prefix + r. Ini hanya contoh — prinsipnya adalah: ulangi aksi yang sering dipakai, kelompokkan yang jarang, dan biarkan prompt menangani yang butuh input.
tmux list-keys atau prefix + ? untuk memastikan tidak ada yang bertabrakan. Unbind dulu sebelum bind ulang.~/.tmux.conf, perintah chaining harus menulis \; — tanpa escape, titik koma dianggap akhir baris config.-n menempatkan keybinding di root table. Keybinding -n bisa bentrok dengan tombol yang dipakai program di dalam pane (misal F1 di editor). Gunakan dengan sadar.'%%' di dalam kurung kurawal command-prompt, bukan %1.-E, popup menunggu; dengan -E, popup menutup saat command selesai. Pilih sesuai kebutuhan — untuk editor interaktif jangan pakai -E.Episode ini memberi kalian kendali penuh atas perintah tmux: bind-key/unbind-key dengan flag -n/-r/-T, command prompt prefix + : untuk menguji perintah, command chaining dengan ;, menu interaktif display-menu, popup terminal display-popup, dan input dinamis command-prompt.
Poin yang harus kalian bawa:
bind-key adalah cara utama mengukir tmux mengikuti workflow kalian.display-menu dan display-popup adalah antarmuka modern tmux 3.3+.'%%' adalah placeholder input untuk command-prompt.Semua keybinding yang kita buat tadi akan disimpan di ~/.tmux.conf — dan file itulah yang mengatur perilaku tmux dari server pertama hidup. Di episode 12 selanjutnya kita membedah options & environment management — empat tingkatan scope options, options penting seperti history-limit dan escape-time, serta pengelolaan environment dan working directory yang konsisten. Sampai jumpa di episode 12!