Подтвердить что ты не робот

Включение поддержки мыши в разных версиях tmux

Я управляю несколькими машинами Linux, некоторые с tmux версии 2.1 в репозиториях, а другие - с версиями tmux менее 2.1. Я использую режим мыши, и я понимаю, что в tmux 2.1 опция включения режима мыши изменилась на:

set -g mouse on

Поскольку я использую разные дистрибутивы, каждый с другой версией tmux, я хотел создать один файл .tmux.conf, который бы включил соответствующую опцию мыши в зависимости от версии.

Итак, я добавил следующее в мой .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'

К сожалению, это не работает. tmux не показывает никаких ошибок, но также не включает режим мыши.

Есть ли какая-то ошибка в моей логике, которая препятствует работе этой конфигурации?

4b9b3361

Ответ 1

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

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'

Это использует awk для разделения номера версии, более ясная версия этого кода:

split($2, ver, ".")  #Split the second param and store it in the ver array
if ver[1] < 2) # if it less than v2.0
   exit 1
else
   if (ver[1] == 2) # if it 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

Затем разделите конфигурацию на два файла конфигурации.

lt_2.1.conf содержит

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 содержит

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

Ответ 2

Кажется, что set не является командой tmux, и вы не можете выполнить ее в if-shell.

У меня есть альтернативная схема:

  • создайте два файла конфигурации где-нибудь. Здесь мы предполагаем, что эти два конфигурационных файла tmux_ge_21.conf и tmux_lt_21.conf, все они находятся в каталоге ~/.tmux/.

  • Заполните содержимое ниже этими двумя файлами:

Для tmux_ge_21.conf:

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

Для 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. добавьте строку ниже в .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. Выполните tmux source ~/.tmux.conf в своем терминале.


BTW: для tmux, который больше 2,1, изменяется действие мышиного прокрутки по умолчанию. Если вы хотите, чтобы он действовал по-прежнему, вам нужно установить этот плагин tmux: https://github.com/nhdaly/tmux-scroll-copy-mode

Если вы используете этот плагин, добавьте set -g @plugin 'nhdaly/tmux-scroll-copy-mode' в tmux_ge_21.conf.


BTW2: -ge в [[ `tmux -V |cut -d ' ' -f2` -ge 2.1 ]] кажется, работает только при сравнении двух целых чисел, я не очень уверен.

Ответ 3

Основываясь на ответе @douglas-su, я нашел решение, которое в настоящее время работает (см. ниже).

Следуйте шагу 1 + 2 его ответа: создайте два файла с параметрами для < 2.1 и >= 2.1. Вместо шага 3 добавьте следующий фрагмент в .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'

Пояснение:

  • cut -d ' ' -f2 выбирает вторую часть tmux -v. Пример: возвращает '2.1' для 'tmux 2.1'
  • sed 's/[a\.]//g' заменяет все точки . и a в строке версии. Пример: возвращает 19 для '1.9a'

Предостережение: это решение, вероятно, не работает на всю вечность, но должно работать нормально для всех выпусков tmux до текущей версии (текущая версия 2.1), Если по какой-либо причине будет выпущена обновленная устаревшая версия (например, 2.0.1 для исправления безопасности или что-то подобное), предлагаемое решение больше не будет работать как 201 >= 21.

Надеюсь, что это поможет.