Pregunta Habilitando el soporte del mouse en diferentes versiones de tmux


Administro varias máquinas Linux, algunas con la versión 2.1 de tmux en los repositorios y otras con versiones de tmux inferiores a 2.1. Uso el modo de mouse y entiendo que en tmux 2.1, la opción para habilitar el modo de mouse ha cambiado a:

set -g mouse on

Como utilizo diferentes distribuciones, cada una con una versión diferente de tmux, quería crear un archivo .tmux.conf que permitiera la opción de mouse adecuada según la versión.

Entonces, agregué lo siguiente a mi .tmux.conf:

# Mouse Mode
if-shell "[[ `tmux -V |cut -d ' ' -f2` -ge 2.1 ]]" 'set -g mouse on'
if-shell "[[ `tmux -V |cut -d ' ' -f2` -lt 2.0 ]]" 'set -g mode-mouse on'
if-shell "[[ `tmux -V |cut -d ' ' -f2` -lt 2.0 ]]" 'set -g mouse-resize-pane on'
if-shell "[[ `tmux -V |cut -d ' ' -f2` -lt 2.0 ]]" 'set -g mouse-select-pane on'
if-shell "[[ `tmux -V |cut -d ' ' -f2` -lt 2.0 ]]" 'set -g mouse-select-window on'

Por desgracia, esto no funciona. tmux no muestra ningún error, pero tampoco habilita el modo de mouse.

¿Hay algún error en mi lógica que impida que esta configuración funcione?


12
2017-12-09 19:58


origen


Respuestas:


Basándose en las dos últimas respuestas, pero reemplazando el comando de shell de la siguiente manera. Agregue esto a la configuración principal:

if-shell "tmux -V |awk ' {split($2, ver, \".\"); if (ver[1] < 2) exit 1 ; else if (ver[1] == 2 && ver[2] < 1) exit 1 }' " 'source .tmux/gt_2.0.conf' 'source .tmux/lt_2.1.conf'

Esto usa awk para dividir el número de versión, una versión más clara de este código es:

split($2, ver, ".")  #Split the second param and store it in the ver array
if ver[1] < 2) # if it's less than v2.0
   exit 1
else
   if (ver[1] == 2) # if it's version 2.n look at next number
       if (ver[2] < 1) # If the second number is less than 1 (2.1)
          exit 1
# else we exit 0

Luego divida la configuración en los dos archivos de configuración.

lt_2.1.conf contiene

set -g mode-mouse on
set -g mouse-resize-pane on
set -g mouse-select-pane on
set -g mouse-select-window on

gt_2.1.conf contiene

set -g mouse-utf8 on
set -g mouse on

6
2017-10-05 11:42



Parece que set no es un comando de tmux y no se puede ejecutar en if-shell.

Tengo un esquema alternativo:

  1. crea dos archivos de configuración en alguna parte. Aquí suponemos que estos dos archivos de configuración son tmux_ge_21.conf y tmux_lt_21.conf, todos ellos localizan en ~/.tmux/ directorio.

  2. Llene el contenido a continuación de estos dos archivos:

por tmux_ge_21.conf:

set -g mouse-utf8 on
set -g mouse on

por tmux_lt_21.conf:

set -g mode-mouse on
set -g mouse-resize-pane on
set -g mouse-select-pane on
set -g mouse-select-window on
  1. agregue la línea a continuación en su .tmux.conf:

    if-shell "[[ `tmux -V | awk '{print ($2 >= 2.1)}'` -eq 1 ]]" 'source ~/.tmux/tmux_ge_21.conf' 'source ~/.tmux/tmux_lt_21.conf'
    
  2. Ejecutar tmux source ~/.tmux.conf en tu terminal.


Por cierto: para tmux que es mayor que 2.1, el acto predeterminado de desplazamiento del mouse se cambia. Si quieres que actúe como antes, tienes que instalar este complemento de tmux: https://github.com/nhdaly/tmux-scroll-copy-mode

Si usa este complemento, anexe set -g @plugin 'nhdaly/tmux-scroll-copy-mode' a tmux_ge_21.conf.


BTW2: -ge en [[ `tmux -V |cut -d ' ' -f2` -ge 2.1 ]] parece funcionar solo cuando se comparan dos números enteros, no estoy muy seguro.


1
2017-12-20 12:57



Basándome en la respuesta de @ douglas-su encontré una solución que actualmente funciona (ver la advertencia a continuación).

Siga los pasos 1 + 2 de su respuesta: cree dos archivos con opciones para las opciones <2.1 y> = 2.1. En lugar del paso 3, inserte el siguiente fragmento en su .tmux.conf:

if-shell "[[ `tmux -V | cut -d ' ' -f2 | sed 's/[a\.]//g'` -ge 21 ]]" 'source ~/.tmux/tmux_ge_21.conf' 'source ~/.tmux/tmux_lt_21.conf'

Explicación:

  • cut -d ' ' -f2 selecciona la segunda parte de tmux -v. Ejemplo: devuelve '2.1' para 'tmux 2.1'
  • sed 's/[a\.]//g' reemplaza todos los puntos . y aestá en la cadena de versión. Ejemplo: devuelve 19 para '1.9a'

Advertencia: esta solución probablemente no funcione por toda la eternidad, pero debería funcionar bien para todos lanzamientos de tmux hasta el momento (la versión actual es 2.1). Si por alguna razón se publicara una versión anterior actualizada (por ejemplo, 2.0.1 para una corrección de seguridad o algo similar), la solución propuesta ya no funcionaría como 201> = 21.

Espero que esto ayude.


0
2018-03-31 18:44