web-dev-qa-db-ja.com

tmuxでシェル出力をマウスでスクロール

(Gnomeターミナルで)tmuxなしでShellを実行した場合、マウスのスクロールは tmux では機能しません。まるで私が上/下キーを押したように、tmuxはマウススクロールイベントを送ります。しかし、私はそれにShellの出力の履歴をスクロールさせたいのです。 tmuxをこのように動作させる方法はありますか?

注:キーボードでスクロールする方法を知っています(ここで 別の質問 に感謝)。

私は2つのバージョンのtmuxでマウススクロールを試みました。

244
user31494

出力の履歴内をスクロールするには^b + [を使用します。ページアップするにはM + Vを、ページダウンするには^ Vを使用できます。私はあなたが本物を使えるかどうかわからない PgUp そして PgDown しかし。私の端末はこれらのキーをtmuxに送信しません。代わりに、それはそれ自体をスクロールし、tmuxの履歴はスクロールしません。

コピーモードを終了するには、Escキーを押します

このモード(コピーモードと呼ばれます)でマウスを使用するには、^b + :を押して、次のように入力します。

setw -g mouse on

注:tmux <2.1では、オプションはmouseではなくmode-mouseという名前でした

コピーモードに切り替えると、マウスを使ってスクロールすることができます。あなたが望むなら、あなたは〜/ .tmux.confにこのコマンドを入れることができます。

更新: tmux 1.5では、このオプションは自動的にスクロールホイールを使用してコピーモードに切り替え、tmuxスクロールバックバッファをスクロールバックします。最初にCtrl-B + [を押す必要はありません。プロンプトまでスクロールダウンしても、コピーモードは自動的に終了します。

233
Pavlo

Tmux 2.1にはいくつかの変更があります

  • マウスモードは書き直されました。以下のオプションはもうありません。

    • マウスサイズ変更ペイン
    • マウス選択ペイン
    • マウス選択ウィンドウ
    • モードマウス

    代わりにただ一つのオプションがあります: 'mouse'はマウスサポートを完全にオンにします。

それだろう

set -g mouse on
# to enable mouse scroll, see https://github.com/tmux/tmux/issues/145#issuecomment-150736967
bind -n WheelUpPane if-Shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"
120
DannyRe

現在のバージョンのtmux(1.5)では、mode-mouseオプションをonに設定するだけで、マウスホイールを使ってスクロールすることができます。

         mode-mouse [on | off]
                 Mouse state in modes.  If on, the mouse may be used to
                 enter copy mode and copy a selection by dragging, to
                 enter copy mode and scroll with the mouse wheel, or to
                 select an option in choice mode.

私の.tmux.confで:

set-window-option -g mode-mouse on
62
bukzor

あなたの.tmux.confでこれを試してください。

# Make mouse useful in copy mode
setw -g mode-mouse on

# Allow mouse to select which pane to use
set -g mouse-select-pane on

# Allow xterm titles in terminal window, terminal scrolling with scrollbar, and setting overrides of C-Up, C-Down, C-Left, C-Right
set -g terminal-overrides "xterm*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"

# Scroll History
set -g history-limit 30000

# Set ability to capture on start and restore on exit window data when running an application
setw -g alternate-screen on

# Lower escape timing from 500ms to 50ms for quicker response to scroll-buffer access.
set -s escape-time 50

http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY ]から取得

52

誰かが(私が失くしたソースから)~.tmux.confに以下を追加することを提案しました:

set -g terminal-overrides 'xterm*:smcup@:rmcup@'

それがどのように動作するのか、それが何をするのか私にはわかりませんが、これにより、tmuxのコピーモードに入る必要なしに、tmuxセッション内でマウスホイールでスクロールすることができます。ホイールとBAMをスクロールするだけです。できます。私はterminal.appを使用していることに注意してください、しかし私はOPが特にgnome-terminalとの使用のために答えを与えたのを覚えています。

14
Jed Daniels

tmux 2.1では新しいマウスバインドが導入されました。

私は今日、これらのバインドを書きました。 Vimは生のマウスホイールコードを解釈することができるので(マウスがどのウィンドウ上にあるかに応じてどのVimウィンドウをスクロールするかを選択するなどの目的で)、それはシームレスにマウスホイールを矢印に結び付けます。

これはついに複数のmanページを見るためだけにマウスを使うことができ、それ以外は矢印キーを受け入れることができることを意味します。アプリケーションにもっとロジックを実装するために必要に応じてifロジックを拡張し連鎖させることができます。

bind -n WheelUpPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Up"
bind -n WheelDownPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Down"

この新しいホイールバインディング機能を使用すると、マウスホイールをスクリプト化して、状況に応じた任意の動作を実行できます。

5
Steven Lu

Gnome-terminalは、「通常の」スクロールが制限されている状況で、マウスのスクロールイベントを上矢印キーと下矢印キーに変換する、きちんとした細工をします。たとえば、lessを使用してテキストを表示するとき(これは特に男性を読んでいるときに発生します)、jk、および矢印キーを使用してコンテンツをスクロールできます。しかし、でもgnome-terminalでは、言及したトリックのおかげでマウススクロールでそれを行うことができます。

それで私はtmuxlessと同じように端末を「捉える」ことをしていると思います - そしてgnome-terminalの同じメカニズムはキックインします:マウススクロールは上/下矢印キーを押すことに変換されます。

あなたはプロファイル設定でこの機能をオフにして、どんな状況でも通常のスクロールを得ることができます。 「スクロール」タブの最後のチェックボックスをオフにするだけです。 the checkbox

3
ulidtko

https://github.com/NHDaly/tmux-better-mouse-mode

新しいtmux用のマウス制御の設定可能で機能豊富な実装。強くお勧めします。

あなたはおそらく使いたいと思うでしょう

set -g @emulate-scroll-for-no-mouse-alternate-buffer "on"

それも。

1
Steven Lu

他の答えからのバインディングのアイデアを組み合わせることでかなり満足のいくスクロールの振る舞いを得ることができます。

私のコード:

bind -n WheelUpPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Up Up Up Up"  "if-Shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"
bind -n WheelDownPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Down Down Down Down"  "if-Shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"

grep -e 'man'部分に、スクロールに矢印キーを必要とする他のコマンドを追加できます。

send-keysを複数回追加したので、マウスホイールの1目盛りで4行ずつスクロールします

0
stealz

すでにtmuxセッションに入っている場合は、次のコマンドを実行できます。

set mouse on

注意:コマンドを実行するには、プレフィックスを使用してから:を使用します。

0
Robert