Pregunta Desplazar la salida de la shell con el mouse en tmux


Desplazamiento del mouse no funciona en tmux la forma en que funciona cuando ejecuto shell sin tmux (en Gnome Terminal). Parece que tmux envía eventos de desplazamiento del mouse como si hubiera presionado las teclas Arriba / Abajo. Pero quiero que se desplace aunque el caparazón salida historia. ¿Hay alguna manera de hacer que tmux funcione así?

Nota: Sé cómo desplazarme con el teclado (gracias a otra pregunta aquí).

Probé el desplazamiento del mouse en dos versiones de tmux:


222


origen


Creo que la respuesta de bukzor resuelve tu problema para tmux 1.5 y más reciente. - kynan


Respuestas:


Para desplazarse dentro de la historia de la salida que usaría ^b + [  Luego puede usar M + V para avanzar y ^ V para avanzar. No sé si puedes usar el verdadero PgUp y PgDown aunque. Mi terminal no envía estas claves al tmux. En cambio, se desplaza por sí mismo y no por la historia de tmux.

Para salir del modo de copia, presione ESC

Para usar su mouse en este modo (llamado modo copiar) presione ^b + : e ingrese lo siguiente:

setw -g mouse on

Nota: En tmux <2.1, la opción fue nombrada mode-mouse, y no mouse

Ahora cuando cambie al modo de copia, puede usar el mouse para desplazarse por él. Puede poner este comando en su ~ / .tmux.conf si lo desea, de modo que se cargue cada vez que ejecute tmux.

Actualizar: A partir de tmux 1.5, esta opción hace que el uso de la rueda de desplazamiento cambie automáticamente al modo de copia y retroceda el búfer de desplazamiento de tmux. No es necesario golpear primero Ctrl-B + [ nunca más. Desplazarse nuevamente hacia la solicitud también finaliza el modo de copia automáticamente.


206



Tenga en cuenta que puede tener que volver a cargar el archivo de configuración si ya tiene un servidor tmux en ejecución. blog.sanctum.geek.nz/reloading-tmux-config  tmux source-file ~ / .tmux.conf - Allan Nienhuis
No funciona para mí en OS X. - Ain
@Ain: ahora hay 11 versiones principales de OS X. ¿De qué versión estamos hablando exactamente? - Ramhound
Para tmux> = 2.1, vea la respuesta de @ DannyRe (actualmente bastante abajo). - Joel Ostblom
set -g mouse on trabajado para mí en macOS tmux 2.1 - Miguel Mota


Hay algunos cambios para Tmux 2.1

  • El modo de mouse ha sido reescrito. Ya no hay opciones para:

    • mouse-resize-pane
    • mouse-select-pane
    • mouse-select-window
    • modo-mouse

    En cambio, solo hay una opción: 'mouse' que activa el soporte del mouse enteramente.

Eso sería

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

111



Gracias, ahora seleccionando paneles, etc. funciona, pero el desplazamiento no. Para hacer que el desplazamiento funcione de nuevo, usa esto: github.com/NHDaly/tmux-scroll-copy-mode - Mahdi
impresionante - esto incluso funciona en cygwin - tmux en WINDOWS 7 - WD11
@Mahdi Esto parece no funcionar en osx. ¿Algún consejo? - SolidSnake
@SolidSnake: no recuerdo enfrentar ningún problema con ese complemento. Funcionó sin problemas, habilité el modo de mouse y luego lo instalé. Deberías volver a cargar tu configuración de tmux usando tmux source-file ~/.tmux.conf - Mahdi
bind ya no parece ser necesario en tmux 2.3 - Theron Luhn


La versión actual de tmux (1.5) le permite simplemente configurar la opción modo-mouse y le permite desplazarse con la rueda del 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.

En mi .tmux.conf:

set-window-option -g mode-mouse on

61



Ese es el comportamiento que realmente quieres! Desplazamiento del mouse que habilita el modo de copia, no solo desplaza el búfer alternativo del shell. Ese fue finalmente el incentivo para cambiar de pantalla a tmux para mi. ¿Existe una opción para obtener el mismo comportamiento también con Shift + RePág? - kynan
@kynan: Yo personalmente solo presiono C-A PgUp Para hacer eso. Puede enlazar la tecla de página arriba directamente con tmux bind-key -n PPage copy-mode -u. Lo mismo debería funcionar para mayúsculas y miniaturas si lo desvincula de su terminal local. - bukzor
Esto da como resultado un comportamiento extraño en el que, cuando me desplazo de nuevo a la línea de comando, obtengo un carácter adicional insertado en la CLI, lo que generalmente da como resultado que mi primer comando esté mal formado. Es bastante molesto - Chris R
Tenga en cuenta que, sin embargo, esto funciona bien para activar el desplazamiento con el mouse, provoca un comportamiento extraño al seleccionar el texto que se pegará con un clic. Terminé prefferiendo C-b pg-up / down (el valor predeterminado) ya que la compensación no era aceptable. - h7r
@ChrisR también me sale un poco y no es muy consistente. ¿Es un [M [M # [M [M # [M [M # [M [M # [M tipo de cuerda? - Elijah Lynn


Prueba esto en tu .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

Tomado de http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY


51



+1 por escape-time ajuste - Dakusan


Alguien (de una fuente que perdí) sugirió agregar lo siguiente a ~.tmux.conf:

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

No tengo idea de cómo funciona o qué hace, pero ahora me permite desplazarme con la rueda del mouse dentro de una sesión de tmux sin tener que ingresar al modo de copia de tmux; ¡Simplemente me muevo por la rueda y BAM! funciona. Tenga en cuenta que estoy usando terminal.app, pero recuerdo que el OP dio la respuesta específicamente para su uso con gnome-terminal.


14



Jed, gracias! Tu consejo también funciona en gnome-terminal. Trataré de usar esta configuración por un tiempo. Pero tiene una desventaja: el desplazamiento del mouse ahora no funciona como se esperaba en less. Si cargo less dentro tmux, el desplazamiento del mouse no desplaza el archivo abierto en less. Desplaza toda la terminal. Extrañamente, vim se comporta como se espera dentro tmux con tu configuración - user31494
Tenga en cuenta que a partir de tmux 1.5 esto es reemplazado por el setw -g mode-mouse on opción, que copia el modo scrollback usando la rueda del mouse. - kynan
La explicación es que esta opción desactiva el bloqueo de desplazamiento en la pantalla alternativa de la terminal, lo cual es deseable en la mayoría de los casos ya que las aplicaciones que solicitan el búfer de pantalla alternativa (vi, less, tmux, etc.) proporcionan sus propias capacidades de desplazamiento. Anulando este bloqueo en tmux permite el desplazamiento el buffer de pantalla alternativo de la terminal que no da el resultado deseado en todos menos en algunos casos. Ver esta respuesta para una cita de man xterm explicando la pantalla alternativa. - kynan
Por desgracia, esto no funciona en iTerm - Suan
He tenido resultados positivos con esto en iTerm 2 - Keith Smiley


tmux 2.1 introduce nuevos enlaces de mouse.

Escribí estos enlaces ahora mismo hoy. Se une sin problemas la rueda del mouse a las flechas cuando no está en Vim, porque Vim es capaz de interpretar los códigos crudos de la rueda del mouse (para fines tales como elegir qué ventana de Vim desplazarse dependiendo de cuál sea el mouse).

Esto significa que finalmente podemos usar el mouse solo para ver varias páginas man y cualquier otra cosa que acepte teclas de flecha. Puede extender y encadenar if lógica según sea necesario para implementar más lógica para sus aplicaciones.

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"

Con esta nueva función de encuadernación de ruedas, es posible programar la rueda del mouse para que realice cualquier comportamiento sensible al contexto que desee.


5



Ahora estoy jugando con la idea de hacer que mousewheel en el borde del panel haga algo interesante. Probablemente lo que haré es no asignar la rueda al borde, sino mapearlo para recorrer las ventanas de tmux cuando se hace sobre la línea de estado. - Steven Lu
¿Cuál es el enlace a tu Github? ¡Me gustaría estar al tanto de tus esfuerzos! Otra característica que estoy buscando es hacer doble clic en copiar la palabra al portapapeles X, como lo hace fuera de Tmux. - joeytwiddle
@joeytwiddle lo recomiendo encarecidamente github.com/NHDaly/tmux-better-mouse-mode, mira mi otra respuesta - Steven Lu


Gnome-terminal hace algunos ingeniosos trucos para traducir los eventos de desplazamiento del mouse a las teclas de flecha Arriba y Abajo en condiciones de desplazamiento restringido "habitual". Por ejemplo, cuando ve algo de texto usando less (Esto sucede en particular cuando estás leyendo a un hombre), puedes desplazarte por el contenido usando j, ky las teclas de flecha. Pero además, con gnome-terminal, puedes hacer eso con el desplazamiento del mouse, gracias al truco mencionado.

Así que supongo tmux hace algo de "captura" de la terminal como less - y el mismo mecanismo en gnome-terminal kicks in: el desplazamiento del mouse se traduce en teclas de flecha hacia arriba / hacia abajo.

Puede desactivar esta función en la configuración de perfil y obtener el desplazamiento normal en cualquier circunstancia. Simplemente desmarque la última casilla de verificación en la pestaña "desplazamiento": the checkbox.


3



Gracias por la explicación, uldtko! Pero no ayuda con el problema del desplazamiento del mouse. Sí, con la opción desactivada, gnome-terminal deja de enviar triple ^[[A y ^[[B en el mouse-scroll. Es más agradable en tmux (ninguna fea ^[[A^[[A^[[A en algunos programas, no feo comando-historia-desplazamiento), pero ahora less deja de desplazarse en el desplazamiento del mouse. - user31494
Ucraniano? (adivinando por el icaracteres) - dotancohen


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

Implementación configurable y rica en características del control del mouse para tmuxes más nuevos. muy recomendable.

Es probable que desee utilizar

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

con eso también


0





Puede combinar las ideas vinculantes de las otras respuestas para obtener un comportamiento de desplazamiento bastante satisfactorio: trabaja en vim cambia al modo de copia automáticamente en el terminal y lo sale cuando llegas al final aún le permite usar su mouse en el hombre, menos y journalctl.

Mi código:

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

puede agregar otros comandos que requieren teclas de flecha para desplazarse en grep -e 'man'

Agregué las teclas de envío varias veces, por lo que una marca en la rueda del mouse se desplazará 4 líneas a la vez


0