238

Прокрутка мышью не работает в tmux так, как она работает, когда я запускаю shell без tmux (в Gnome Terminal). Кажется, tmux отправляет события прокрутки мыши, как будто я нажимаю клавиши «Вверх / Вниз». Но я хочу, чтобы он прокручивал историю вывода оболочки. Есть ли способ заставить tmux работать так?

Примечание: я знаю, как прокручивать с помощью клавиатуры (спасибо еще один вопрос здесь).

Я пробовал прокрутку мышью в двух версиях tmux:

9 ответов9

222

Для прокрутки истории выходных данных вы должны использовать ^b + [ Затем вы можете использовать M + V для перехода вверх и ^ V для перехода вниз. Я не знаю, можете ли вы использовать настоящие PgUp и PgDown . Мой терминал не отправляет эти ключи в tmux. Вместо этого он прокручивает сам, а не историю Tmux.

Для выхода из режима копирования нажмите ESC

Чтобы использовать мышь в этом режиме (называемом режимом копирования), нажмите ^b + : и введите следующее:

setw -g mouse on

Примечание: в tmux <2.1 опция называлась mode-mouse , а не mouse

Теперь, когда вы переходите в режим копирования, вы можете использовать мышь для его прокрутки. Вы можете поместить эту команду в ваш ~/.tmux.conf, если хотите, чтобы она загружалась каждый раз, когда вы запускаете tmux.

Обновление: Начиная с tmux 1.5, эта опция позволяет с помощью колеса прокрутки автоматически переключаться в режим копирования и прокручивать обратно буфер прокрутки tmux. Больше нет необходимости сначала нажимать Ctrl-B + [ . Прокрутка вниз до приглашения также автоматически завершает режим копирования.

118

Есть некоторые изменения для Tmux 2.1

  • Мышь-режим был переписан. Там больше нет вариантов для:

    • мыши изменить размер-панель
    • мыши выбрать-панель
    • мыши выбрать окна
    • Режим мыши

    Вместо этого есть только одна опция: «мышь», которая полностью включает поддержку мыши.

Это было бы

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'"
61

Текущая версия tmux (1.5) позволяет просто включить опцию mode-mouse и прокручивать колесико мыши.

         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
52

Попробуйте это в вашем .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

14

Кто-то (из потерянного источника) предложил добавить в ~.tmux.conf:

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

Я понятия не имею, как он работает или что делает, но теперь он позволяет мне прокручивать колесико мыши внутри сеанса tmux, не заходя в режим копирования tmux; Я просто прокручиваю колесо и БАМ! оно работает. Обратите внимание, что я использую терминал.app, но я помню, что ОП дал ответ специально для использования с gnome-terminal .

5

Tmux 2.1 представляет новые привязки мыши.

Я написал эти связки только сейчас сегодня. Он плавно привязывает колесо мыши к стрелке, когда не в Vim, потому что 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"

С этой новой возможностью привязки колес можно настроить скрипт колесика мыши на любое контекстно-зависимое поведение, которое вам нравится.

3

Gnome-терминал выполняет некоторые хитрые трюки, переводя события прокрутки мыши в клавиши со стрелками вверх и вниз в условиях ограниченной "обычной" прокрутки. Например, когда вы просматриваете какой-либо текст с использованием less (это происходит, в частности, когда вы читаете человека), вы можете прокручивать контент с помощью клавиш j , k и стрелок. Но также с помощью gnome-terminal вы можете сделать это с помощью прокрутки мышью, благодаря упомянутому трюку.

Так что я думаю, что tmux делает некоторые "захваты" терминала точно так же, как и less - и тот же механизм в gnome-terminal срабатывает: прокрутка мышью преобразуется в нажатия клавиш со стрелками вверх / вниз.

Вы можете отключить эту функцию в настройках профиля и получать регулярную прокрутку при любых обстоятельствах. Просто снимите последний флажок на вкладке "прокрутка": флажок ,

1

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

Конфигурируемая и многофункциональная реализация управления мышью для новых tmux. настоятельно рекомендуется.

Вы, вероятно, хотите использовать

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

с этим также.

0

Вы можете объединить идеи связывания из других ответов, чтобы получить довольно удовлетворительное поведение при прокрутке: работает в vim, автоматически переключается в режим копирования в терминале и выходит из него, когда вы достигаете дна, все еще позволяет вам использовать колесо мыши в man, less и journalctl.

Мой код:

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'

Я добавил несколько клавиш отправки, так что один тик на колесе мыши будет прокручивать 4 строки за раз

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .