tmux

tmux でマウスドラッグ終了時の挙動を「自動コピーして copy-mode 終了」ではなく「テキスト選択して copy-mode 続行」に変える

免責

古め (2.1 以前?) の tmux の挙動は確認していません。
今回確認したのは tmux 2.7 での挙動です。

内容

言葉では非常に説明しにくいのですが、 tmux の設定で set-option -g mouse on すると、マウスドラッグ終了時の挙動は次のようになります:

「ドラッグ範囲をバッファにコピーし、copy-mode を終了」

tmux では、 スクロールも copy-mode でおこなわれる (と私は理解しています) ため、(マウスで) 範囲選択するとその時点でスクロールがキャンセルされてしまいます。(選択範囲はちゃんとコピーされている)

しかし、個人的には次のような挙動だとありがたいです:

「ドラッグしたら範囲選択のみ。copy-mode は終了しない (=スクロールが巻き戻らない)。選択範囲をバッファにコピーしたいときは、明示的に何らかのキー入力をする」

つまり、tmux 以外の環境での普通のコピーと同じ挙動であってほしいということです。
(例えばブラウザでは、「範囲選択をしたら勝手にテキストがコピーされてスクロールが巻き戻る」ようなことはせず、「範囲選択は範囲選択。コピーしたいなら ctrl-C やら cmd-C やらで明示的にコマンド入力。コピー後に選択範囲をキャンセルしたり、スクロールが巻き戻ったりしない」ですよね・・・)

この挙動にするには、次のような設定を入れれば OK です:

# Explicit `Enter` key fires copying the selection
unbind -T copy-mode MouseDragEnd1Pane
bind-key -T copy-mode Enter send-keys -X copy-pipe "tmux copy-buffer"

Enter の部分は好きなキーに変えてください。tmux のよく使われる 1 コピーのキーバインドと合わせるなら、 y も自然かと思います。
(2行目は tmux.conf の設定例で bind-key -T copy-mode v send-keys -X begin-selection と一緒によく見るので、すでに設定済みの人も多いと思います)


  1. よく使われるというか、デフォルトのキーバインドなんだろうか?