web-dev-qa-db-ja.com

マウスを選択したTmuxコピーパイプ

OSXでcopy-pipeを使用して、システムクリップボードをTmux1.8と共有します。

unbind -t vi-copy Enter
bind -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"

これは、選択モードに入ってテキストをコピーするときに機能します(テキストを選択してから、 Enter)。ただし、マウスでテキストを選択する場合はそうではありません。 copy-pipeを押した後に実行するように、マウスを選択した後に実行するコマンドを設定することは可能ですか? Enter?つまり選択が残ったら、reattach-to-user-namespace pbcopyを実行する必要があります。

5
Patrick Oscity

マウスによって開始された選択を終了する「マウスアップ」動作をカスタマイズする組み込みの方法はありません。詳細については、 _reset_mode_ label of window_copy_mouse() in _window-copy.c_ (リンクはtmux1.8);のソースへ具体的には、このコードにはウィンドウ、セッション、またはサーバーオプションへの参照はありません。

回避策はありますが、おそらくエッジケースのビットです。

  • マウスボタンを離す前に、_copy-pipe_バインディングをアクティブにします(たとえば、Enterキーを押します)。
    これにより、シェルコマンドが実行され、選択範囲がバッファにコピーされ、コピーモードが終了します(つまり、_copy-pipe_の通常の動作)。

ただし、小さな副作用があります。

  • 最後にボタンを離したときに端末が送信するマウスイベントにより、tmuxがコピーモードに戻ります。この「追加」コピーモードを手動で終了する必要があります(例:エスケープまたはC-c)。
    これはおそらくバグと見なされる可能性があります(input_mouse()は、新しいコピーモードを開始する前に、マウスイベントが「ボタンアップ」イベントであることを確認しません)。ただし、ほとんどの場合無害です(2番目のコピーモードインスタンスを終了する必要があるという不便さを除けば)。
3
Chris Johnsen

Tmux 2.2以降の場合:

bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "pbcopy"
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "pbcopy"
8
Kyle Kloepper