Tmux 2.4 がリリースされたので気になった点

  • 6
    いいね
  • 0
    コメント

CHANGES を参考に、いくつか気になる点を書き出してみました。

mode-table がなくなり、key-table に統合された

今回メインの修正点として挙げられているものです。これのせいで 2.4 にした途端、コピーモードが動かずに阿鼻叫喚です。

2.3 までは

  • mode-table
    • vi-copy, emacs-copy —— コピーモード
    • vi-edit, emacs-edit —— コマンド入力モード
    • vi-choice, emacs-choice —— 選択モード(list-windows とか)
  • key-table
    • root —— prefix(デフォルトでは <C-B>)無しで打ったときのモード
    • prefix —— prefix 付きで打ったときのモード

これだけあったのが、2.4 だと

  • key-table
    • root
    • prefix
    • copy-mode
    • copy-mode-vi

これだけ!だいぶすっきりしました。

今までは bind-key コマンドで -c, -t, -T を組み合わせて設定してたことが -T だけで良くなったのです。

2.3以前の設定
# v で範囲指定スタート
bind-key -t vi-copy v begin-selection
2.4以降の設定
# v で範囲指定スタート
bind-key -T copy-mode-vi v send-keys -X begin-selection

こんな感じ。コマンドがちょっと冗長になってしまいましたがしょうがない。

ただ、上でさらっと書いているのですが、*-edit, *-choice が消えています。CHANGES をもう一度よく読んでみると、

The emacs-edit, vi-edit, emacs-choose and vi-choose tables have been replaced by fixed key bindings in the command prompt and choose modes.

emacs-edit(以下略)はコマンド入力モードと選択モードで予め定義されたキーバインドに置き換えられました。

とのことなので、設定で変更不能になったんですかね。まあ、tmux vi-edit とかでググっても全然ヒットしないので、誰も使ってなかったんでしょうか……。

設定ファイルで if 文が使えるようになった。

これは example_tmux.conf に例示されています。

# If running inside tmux ($TMUX is set), then change the status line to red
%if #{TMUX}
set -g status-bg red
%endif

環境変数 $TMUX が定義されているときにステータスラインが赤色になります。#{...} 構文はステータスラインに使える変数がそのまま使えます(#{host} とか)が、%if .. %endif ブロックで使うなら例に挙げられているように環境変数で場合分けするのが便利そうです。

これに併せて、変数が特定の値と一致、不一致する場合についての演算子も追加されています。

# $HOGE が fuga なら真
%if #{==:#{HOGE},fuga}

# $HOGE が fuga でなければ真
%if #{!=:#{HOGE},fuga}

ただこれ……せっかくの新機能ですが、イマイチ使いどころが分かりません。よくある用途としては

上記記事のように OS によって設定を切り替える、というのが考えられるのですが、OS を判別する portable な方法としては uname コマンドくらいしかありません。しかし今回追加された %if ブロックは(基本的に)環境変数での分岐しか出来ないのです。

予め環境変数に uname の結果を入れとけばいいのですが、だったら最初から if-shell 使うよね……。(´・ω・`)

マイナーな変更点

どうせだから、そのほかの修正点についても一行コメントで書いていきます。よくわからない、とか書いてる部分は原文を参考にしてください(そして教えてください><)。

互換性を失うもの

  • set-remain-on-exit コマンドがなくなりました。代わりに hook で同じことができます。
  • “before” hook がなくなりました。又、一部のコマンドだけが “after” hook を持つようになりました。他に、いくつか追加された hook もあります。
    • → hook は使ってないのでよくわかりません……。
  • xterm-keys オプションはデフォルトで ON になりました。

その他の改良点

  • マウスのダブルクリック・トリプルクリックをサポートしました。
  • BCE (Background Colour Erase) をサポートしました。
    • これのための対応が必要なくなったのかな。
  • コピーモードでの検索中、ヒットした全ての文字列がハイライトされるようになりました。又、ヒットした数も表示されます。デフォルトの emacs キーバインドのとき、ハイライトは対話的に更新されます(所謂インクリメンタルサーチ)。
  • source-file コマンドに glob パターンが使えるようになりました。
  • ステータスラインで使える変数が増えました。
    • #{version}
    • #{client_termtype}
    • #{client_name}
    • #{client_written}
  • detach-client-E オプションが付きました。クライアントが終了する代わりに別のコマンドを実行出来ます。
    • この PR によるものですが、正直用途がニッチすぎてよくわからない。
  • 各コマンドに独自の別名を設定できるようになりました。別名=コマンドの形で設定できます。これは不明なコマンドがパースされたときに利用されます。
    • command-alias というオプションのことみたいです。
  • break-pane コマンド実行時に -n オプションを使うことで、新しく作成されるウィンドウに名前を設定できるようになりました。
  • OSC 52 をサポートするようになったので tmux 内部のプログラムが tmux のバッファーをセットできるようになりました。
    • → 何のこっちゃ。
  • マウスの “all event” モード(1003)がサポートされるようになりました。
    • → よくわからない……。
  • Strikethrough(打ち消し線)がサポートされました。
  • session group に -t オプションで名前が付けられるようになりました。
  • terminal-overridesupdate-environment オプションは配列で指定するようになりました(以前の set -ag 構文も変更無しで動きます)。
  • その他、たくさんのパフォーマンス改良点があります。