5

Этот вопрос слабо связан с этим.

Поэтому я использую диапазон версий Tmux от 1.5 до 2.2 в различных операционных системах (и дистрибутивах Linux).

Мой ~/.tmux.conf который был адаптирован к более ранним версиям, показывает следующие три строки предупреждения для Tmux 2.2:

/home/username/.tmux.conf:34: unknown option: mode-mouse
/home/username/.tmux.conf:70: unknown option: status-utf8
/home/username/.tmux.conf:71: unknown option: utf8

Беглый взгляд на страницу man , предполагает , что эти параметры конфигурации были прекращены. Однако вместо того, чтобы молча игнорировать их, Tmux жалуется на "неизвестные" опции.

Строки, соответствующие приведенным выше предупреждениям:

set-window-option -g mode-mouse off
set-option -g status-utf8 on
set-window-option -g utf8 on

Опция mode-mouse была прекращена в Tmux 2.1, status-utf8 и utf8 были прекращены в Tmux 2.2. Файл CHANGES в дереве исходных текстов содержит подробности об удаленных параметрах, а также краткое описание.

Есть ли способ, с помощью которого я могу подавить этот вывод? А еще лучше, возможно ли выполнить условно разделы файла конфигурации, основанные на версии Tmux, без отдельных фрагментов файла конфигурации (который должен быть source -d)?

Вкратце: какой простой способ использовать один и тот же .tmux.conf в нескольких версиях Tmux ?


Обоснование: причина, по которой меня это беспокоит, заключается в том, что Tmux будет показывать эти предупреждения при каждом запуске сеанса. И он принимает меры с моей стороны (нажатие клавиши), чтобы попасть в оболочку. Тем не менее, в более старых версиях Tmux у меня нет проблем, но я бы хотел установить соответствующие параметры в этих старых версиях Tmux.


Со страницы man :

status-utf8 [on | off]

Проинструктируйте tmux обрабатывать символы с верхним битом в строках статуса слева и справа как UTF-8; в частности, это важно для широких персонажей. Эта опция по умолчанию выключена.

а также:

utf8 [on | off]

Указывает tmux ожидать появления последовательностей UTF-8 в этом окне.

5 ответов5

3

Есть ли способ, с помощью которого я могу подавить этот вывод?

Да. Команды set-option и set-window-option принимают флаг -q ("quiet"), который подавляет ошибки о неизвестных параметрах. Это должно охватывать вас:

set-window-option -gq mouse off
set-window-option -gq mode-mouse off
set-option -gq status-utf8 on
set-window-option -gq utf8 on
2

Основываясь на ответе @ ericx и ответе @ thiagowfx, я собрал следующее, которое охватывает перечисленные несовместимости начиная с версии 2.0:

# Version-specific commands [grumble, grumble]
# See: https://github.com/tmux/tmux/blob/master/CHANGES
run-shell "tmux setenv -g TMUX_VERSION $(tmux -V | cut -c 6-)"

if-shell -b '[ "$(echo "$TMUX_VERSION < 2.1" | bc)" = 1 ]' \
  "set -g mouse-select-pane on; set -g mode-mouse on; \
    set -g mouse-resize-pane on; set -g mouse-select-window on"

# In version 2.1 "mouse" replaced the previous 4 mouse options
if-shell -b '[ "$(echo "$TMUX_VERSION >= 2.1" | bc)" = 1 ]' \
  "set -g mouse on"

# UTF8 is autodetected in 2.2 onwards, but errors if explicitly set
if-shell -b '[ "$(echo "$TMUX_VERSION < 2.2" | bc)" = 1 ]' \
  "set -g utf8 on; set -g status-utf8 on; set -g mouse-utf8 on"

# bind-key syntax changed in 2.4
if-shell -b '[ "$(echo "$TMUX_VERSION < 2.4" | bc)" = 1 ]' \
  "bind-key -t vi-copy v   begin-selection; \
   bind-key -t vi-copy V   rectangle-toggle \
   bind-key -t vi-copy y   copy-selection"

bind-key -T copy-mode-vi v   send -X begin-selection
bind-key -T copy-mode-vi V   send -X rectangle-toggle
bind-key -T copy-mode-vi y   send -X copy-pipe-and-cancel 'xclip -selection clipboard -in'
0

Мне нравится ответ @ tom-hale, но я нахожу более кратким использование "expr" в моем сценарии использования:

run-shell "tmux setenv -g TMUX_VERSION $(tmux -V | cut -c 6-)"
if-shell 'expr $TMUX_VERSION ">=" 1.7' 'bind-key R move-window -r'

Это использует тот факт, что сравнение с expr будет игнорировать конечные буквы, может сравнивать числа с плавающей запятой и «Статус выхода равен 0, если EXPRESSION не равен ни нулю, ни 0, 1, если EXPRESSION равен нулю, или 0 [...]» в соответствии с man-страницей.

0

Это мое любимое решение проблемы, которое также уклоняется от проблемы того, что if-shell был менее надежным в старых версиях Tmux.


В качестве временного решения я использовал следующие разделы конфигурации:

if-shell "tmux -V|awk '{if($2 < 2.1) {exit 0} else {exit 1}}'" "set-window-option -g mode-mouse off" "set-window-option -g mouse off"
if-shell "tmux -V|awk '{if($2 < 2.2) {exit 0} else {exit 1}}'" "set-option -g status-utf8 on"
if-shell "tmux -V|awk '{if($2 < 2.2) {exit 0} else {exit 1}}'" "set-window-option -g utf8 on"

вместо оригинальных строф:

set-window-option -g mode-mouse off
set-option -g status-utf8 on
set-window-option -g utf8 on

Я не уверен, будет ли это работать со всеми вариантами awk во всех операционных системах и дистрибутивах Linux, которые я использую, но, возможно, это поможет кому-то еще, кто может положиться на узкий набор вариантов awk (например, только gawk и mawk для которых у меня есть) проверил команду).

Пожалуйста, обратите внимание на комментарии к этому ответу для некоторых проблем с этим подходом.

-1

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

# grab version info about the tmux currently running
run-shell "tmux setenv -g TMUX_VERSION_MAJOR $(tmux -V | cut -d' ' -f2 | cut -d'.' -f1 | sed 's/[^0-9]*//g')"
run-shell "tmux setenv -g TMUX_VERSION_MINOR $(tmux -V | cut -d' ' -f2 | cut -d'.' -f2 | sed 's/[^0-9]*//g')"

Затем у меня есть различные проверки if-shell ; так что в этом случае:

if-shell \
    '[ $TMUX_VERSION_MAJOR -le 1 -o \
         \( $TMUX_VERSION_MAJOR -eq 2 -a $TMUX_VERSION_MINOR -lt 1 \) ]' \
    "set-window-option -g mode-mouse off" \
    "set-window-option -g mouse off"

if-shell \
    '[ $TMUX_VERSION_MAJOR -le 1 -o \
         \( $TMUX_VERSION_MAJOR -eq 2 -a $TMUX_VERSION_MINOR -lt 2 \) ]' \
    "set-option -g status-utf8 on; set-window-option -g utf8 on" \
    ""

Я не помню, где я нашел это; но кто-то другой получает кредит.

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