Belajar Tmux - Format Strings, Variables & Komputasi
Series/Belajar Tmux/Episode 10
Episode 10 of 28

Belajar Tmux - Format Strings, Variables & Komputasi

Kekuatan sesungguhnya di balik status bar: seluruh variabel format tmux, ekspresi komputasi bersyarat, dan membuat variabel kustom dengan set-environment untuk status bar yang benar-benar hidup.

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

Pendahuluan

Di episode 9 sebelumnya kita menyulap status bar menjadi dashboard dengan variabel sederhana seperti #{session_name} dan #{host_short}. Namun itu baru permukaan. Pada episode ini kita masuk ke inti kekuatan tmux yang membedakannya dari multiplexer lain: format strings — bahasa template yang memungkinkan kalian memeriksa, menghitung, dan menyusun informasi secara dinamis. Setelah episode ini, kalian tidak lagi "menempelkan variabel", melainkan membangun ekspresi yang beradaptasi dengan keadaan.

Mengapa ini penting? Di dunia nyata, informasi yang berguna hampir selalu kontekstual. "Menampilkan nama session" itu statis; "menampilkan nama session, dan menyorotnya merah ketika ada proses error" itu dinamis dan jauh lebih berguna. Format strings memungkinkan hal-hal seperti itu tanpa menulis program eksternal. Ini juga dasar dari scripting (episode 14) — karena display-message -p memakai mesin format yang sama.

Variabel Format: Kamus Utama

Tmux menyediakan ratusan variabel format. Semua bisa dipakai di dalam string dengan sintaks #{nama}. Berikut yang paling sering dipakai dalam praktik:

VariabelArtiContoh Nilai
#{session_name}Nama session aktifapi
#{session_windows}Jumlah window di session3
#{window_index}Nomor window aktif1
#{window_name}Nama window aktifnvim
#{pane_index}Nomor pane aktif0
#{pane_current_path}Path direktori pane/srv/api
#{pane_current_command}Perintah yang berjalan di panenode
#{pane_title}Judul paneapi-0
#{host} / #{host_short}Nama host / host pendekdevbox
#{session_created_string}Waktu session dibuat2d ago
#{pane_width} / #{pane_height}Ukuran pane120
#{client_width} / #{client_height}Ukuran client120
#{cursor_x} / #{cursor_y}Posisi kursor0

Cara paling cepat untuk melihat semua variabel yang tersedia beserta nilainya:

Lihat semua variabel format
tmux display-message -p '#{session_name}'
tmux display-message -p '#{pane_current_path}'
tmux display-message -p '#{pane_current_command}'
tmux display-message -p '#{window_index}:#{window_name}'

display-message -p mencetak string hasil format ke stdout tanpa menampilkan popup — inilah jembatan antara status bar dan scripting. Apa pun yang kalian tulis di sini, bisa kalian tangkap di shell.

Note

Variabel yang tersedia bergantung pada konteks evaluasi. Dalam status bar, konteksnya adalah session aktif. Dalam window-status-format, konteksnya adalah masing-masing window. Dalam pane-border-format, konteksnya adalah pane. Variabel yang tidak relevan dengan konteks akan menghasilkan string kosong.

Komputasi Bersyarat: Membuat Ekspresi

Kekuatan format strings ada pada operator komputasi. Sintaksnya #{<op>:<arg1>,<arg2>,...} — operator diikuti titik dua, lalu argumen dipisahkan koma. Operator paling sering dipakai:

OperatorFungsiContoh
#{==:a,b}True jika a == b#{==:#{pane_current_command},nvim}
#{!=:a,b}True jika a != b#{!=:...#{...},nvim}
#{||:...}OR logis#{||:#{==:...#{...},vim},#{==:...#{...},nvim}}
#{&&:...}AND logis#{&&:a,b}
#{m:regexp,text}Regex match#{m:node.*,...#{...}}
#{e|...}Evaluasi ekspresi#{e|...}
#{?:cond,then,else}Ternary#{?cond,ya,tidak}

Operator boolean menghasilkan string 1 (true) atau 0 (false). Untuk mengubah boolean menjadi teks, pakai ternary #{?:cond,true,false}.

Contoh nyata — menampilkan indikator "EDITOR" ketika pane aktif menjalankan editor:

Ternary dengan kondisi
set -g status-right "#[fg=#f9e2af]#{?#{==:#{pane_current_command},nvim},NVIM,}"

Baris ini menampilkan teks NVIM di status bar hanya jika perintah pane aktif adalah nvim; jika tidak, hasilnya string kosong. Perhatikan bahwa kondisi ternary memuat ekspresi boolean di dalamnya — pola #{?<bool>,<true>,<false>}.

Menambahkan Variabel Kustom

Format strings juga membaca environment variables yang disetel dengan set-environment (alias setenv). Ini cara paling sederhana membuat "variabel buatan sendiri".

Variabel kustom
tmux set-environment -g MY_TARGET staging
tmux display-message -p 'deploy target: #{MY_TARGET}'

Karena variabel ini global (-g), nilainya diwarisi semua session — dan bisa diubah kapan saja. Ini berguna untuk konfigurasi yang nilainya berubah per environment (dev/staging/prod) tanpa harus mengubah file config.

Tip

Kombinasi set-environment -g dengan ekspresi #{==:...} memungkinkan tema status bar yang berubah otomatis: misalnya set-environment -g DEPLOY_TARGET prod lalu status bar menampilkan label merah "PROD" hanya ketika target-nya prod. Tanpa menulis satu baris skrip pun.

Teknik Lanjutan: Berjajar dalam Satu Ekspresi

Ekspresi format bisa disusun berjenjang (nested) — kondisi di dalam kondisi. Contoh: menampilkan indikator berbeda untuk editor vs dev server vs lainnya:

Ekspresi bertingkat
set -g status-right "#[fg=#89b4fa]#{?#{==:#{pane_current_command},nvim},EDIT,}:#{?#{==:#{pane_current_command},node},SRV,}"

Hasilnya: EDIT saat editor aktif, SRV saat node aktif, kosong jika lainnya. Meskipun terlihat padat, setiap blok #{?...} independen dan mudah dipahami jika dibaca per blok.

Format untuk Window Status dan Pane Border

Mesin format yang sama juga dipakai di tempat lain:

  • window-status-format dan window-status-current-format — menampilkan info per window.
  • pane-border-format (tmux 3.2+) — menampilkan info di border pane.
Border pane informatif
set -g pane-border-format "#[fg=#89b4fa] #{pane_index}:#{pane_current_path} "
set -g pane-border-status top

Dengan pane-border-status top dan pane-border-format, setiap pane menampilkan nomor dan path-nya di bagian atas border — sangat membantu di layout dengan banyak pane.

Warning

Variabel yang dievaluasi berulang-ulang (misalnya pane_current_command) menambah sedikit beban CPU karena tmux harus memeriksa status proses. Pada session dengan sangat banyak pane, pemakaian variabel berat di semua pane sekaligus bisa terasa. Di episode 24 kita akan membahas keseimbangan antara kekayaan informasi dan performa.

Kesalahan Umum (Common Pitfalls)

  1. Salah konteks variabel. #{pane_index} di dalam window-status-format tidak bermakna karena konteksnya window, bukan pane. Gunakan variabel yang relevan dengan konteks evaluasi.
  2. Boolean bukan teks. Operator seperti #{==:...} menghasilkan 1/0. Untuk menampilkan teks, bungkus dalam #{?:cond,true,false}.
  3. Sintaks ternary terbalik. Urutannya #{?kondisi,nilai_true,nilai_false} — salah urut menghasilkan output yang membingungkan.
  4. Lupa tanda kurung kurawal pada variabel. #{session_name} benar, session_name di luar kurung kurawal tidak akan diganti.
  5. Menimpa variabel kustom tanpa sadar. set-environment -g MY_VAR menimpa nilai sebelumnya. Pastikan nama variabel tidak bentrok dengan variabel internal tmux (huruf besar umumnya aman).
  6. Menguji dengan display-message tanpa -p. tmux display-message '#{...}' menampilkan popup di layar; -p mencetak ke stdout — gunakan -p saat ingin menangkap output di shell.

Penutup

Episode ini membuka mesin format strings tmux secara penuh: katalog variabel utama, operator komputasi bersyarat (#{==:}, #{||:}, #{&&:}, #{m:}, #{?:}), cara menambahkan variabel kustom dengan set-environment -g, teknik ekspresi bertingkat, serta penerapan format di window status dan pane border.

Poin yang harus kalian bawa:

  • Format strings adalah bahasa template kontekstual, bukan sekadar variabel.
  • #{?:cond,then,else} mengubah boolean menjadi teks.
  • set-environment -g menciptakan variabel kustom yang bisa diubah runtime.
  • Mesin format dipakai di status bar, window status, pane border, dan scripting.
  • Selalu perhatikan konteks evaluasi variabel.

Kemampuan "membaca dan menampilkan" informasi ini berpasangan sempurna dengan kemampuan "menyuruh dan meniru". Di episode 11 selanjutnya kita membahas custom keybindings, command mode & menus — memetakan perintah ke tombol, memakai display-menu dan display-popup untuk antarmuka cepat, serta mengendalikan tmux dari command prompt. Sampai jumpa di episode 11!

Belajar Tmux - Format Strings, Variables & Komputasi | Belajar Tmux