tmux で Prefix key が押されているかどうかを表示する

Posted on
qiita tmux

この記事はQiitaの記事をエクスポートしたものです。内容が古くなっている可能性があります。

tmux でペイン分割とかウィンドウ作成するときとかにキーバインドとして使う Prefix key (C-b とか C-t とか設定されてる) ですが、誤動作を防ぐためにいま Prefix key が押されているのかどうなのか視覚的に確認したいことがあります。

以下のように .tmux.conf を書くことで、Prefix key が押された時に Status line の色を下動画のように反転させられます。

set-option -g status-left '#[fg=cyan,bg=#303030]#{?client_prefix,#[reverse],} #H[#S] #[default]'

prefix-key.gif

(Prefix key は C-t に設定)

重要なのはこれ

#{?client_prefix,#[reverse],}

.tmux.conf では ?<condition>,<true action>,<false action> の形で三項演算子をかけます。で、client_prefix は Prefix key が押されていたら 1 (true) になるというわけです。 今回は色を変えただけですが、押されている / いないときだけ何かしら文字を表示することももちろん可能です。

注意点があって、例えば Prefix key が押された時だけ黄色背景黒文字 (fg=black, bg=yellow) にしようとして

#{?client_prefix,#[fg=black,bg=yellow],}

と愚直に書くと

prefix-key-bug.gif

のように表示がバグります。#[fg=black,bg=yellow] 内のコンマが三項演算子2つめのコンマと解釈されているようです。

こうしたいときは、#[] を分割すればよいです。

#{?client_prefix,#[fg=black]#[bg=yellow],}

prefix-key-great.gif

REF