it-swarm.xyz

Scroll Shell вывод с помощью мыши в tmux

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

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

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

243
user31494

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

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

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

setw -g mouse on

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

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

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

233
Pavlo

Есть некоторые изменения для 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'"
119
DannyRe

Текущая версия 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
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:[email protected]:[email protected]: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
John L. Jegutanis

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

set -g terminal-overrides 'xterm*:[email protected]:[email protected]'

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

14
Jed Daniels

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"

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

5
Steven Lu

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

Поэтому я предполагаю, что tmux выполняет «захват» терминала точно так же, как less, и тот же механизм в 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

Вы можете объединить идеи связывания из других ответов, чтобы получить довольно удовлетворительное поведение при прокрутке: работает в 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' часть

я добавил send-keys несколько раз, поэтому один тик на колесе мыши будет прокручивать 4 строки за раз

0
stealz