dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

tmux2.1でiTerm2のSend Hex Codeが効かなくなった場合の対処法

普段、ターミナルは iTerm2tmux を使っている。

また、iTerm2 の Global Shortcut Keys というショートカットキーの設定で以下のように設定することにより、
tmux におけるウィンドウをターミナルのタブのように操作できるようにしている。
Cmd+t, Cmd+w で新規ウィンドウ、ウィンドウを閉じる、Cmd+Shift+{ (or }) でウィンドウ間移動)

Keyboard Shortcut Hex Code 動作 tmuxにおける
コマンド
tmuxにおける
Keyboard Shortcut
Cmd+Shift+[ 0x14 0x70 前のウィンドウに
移動
Ctrl+t p previous-window
Cmd+Shift+] 0x14 0x6e 次のウィンドウに
移動
Ctrl+t n next-window
Cmd+t 0x14 0x63 新規ウィンドウ Ctrl+t c new-window
Cmd+w 0x14 0x6b ウィンドウを閉じる Ctrl+t k kill-window

注1)prefix キーをデフォルトの Ctrl+b から Ctrl+t に変えているため、 hex code では 0x14 になっている
注2)ウィンドウを閉じるためのtmuxのショートカットはデフォルトでは設定されていないので、
.tmux.confに記述する必要がある

詳細は

ところが最近 Mac の環境構築を一からやり直していたところ、このコマンドが動かなくなっていた。
現象としては、Cmd+t を押すと c が、Cmd+w を押すと k が入力され、そのまま tmux のコマンド受け付け状態になる。

必死でググってみると、1週間ぐらい前に同じことを言ってる人がいた。

で、結論としては以下の1行を .tmux.conf に追記すれば良い。

set -g assume-paste-time 0

assume-paste-time は初めて聞いたオプションだったのでちょっと調べてみたけど

http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1

assume-paste-time milliseconds

If keys are entered faster than one in milliseconds, they are assumed to have been pasted rather than typed and tmux key bindings are not processed. The default is one millisecond and zero disables.

1ms 以内で入力されたものは文字のペーストとみなし、key binding は実行されないということか。

ただ、上記 Issue の登録者の最後のコメントによると
2.0 → 2.1 にかけてこのオプションのデフォルト値が変わった形跡はないらしい。
とするとなんだったのか。

...とりあえず元どおり動くようになったので、これ以上調査するのはやめておく。
焦ったー