переключаться между двумя раскладками tmux

Я часто запускаю Vim в сеансе tmux, чтобы запускать тесты в соседней панели. На меньшем мониторе мне либо придется пожертвовать большим пространством экрана Vim, чем хотелось бы, либо сделать тестовую панель слишком маленькой, чтобы прочитать полные результаты (что хорошо, если все проходит успешно, но не тогда, когда есть сбои и мне нужно чтобы увидеть подробности).

Тогда мой рабочий процесс становится:

  • запускать тесты из Vim
  • переключиться на тестовую панель (last-pane)
  • увеличить панель, чтобы занять все окно (resize-pane -Z)
  • прочитать результаты
  • восстановить исходный макет (resize-pane -Z)
  • вернуться к панели Vim (last-pane)

Я хотел добавить привязку клавиш, которую я мог бы использовать, когда я нахожусь на панели Vim, для масштабирования тестовой панели (скрывая Vim), и иметь возможность использовать ту же привязку после увеличения, чтобы восстановить исходный макет, возвращая меня к Vim. Это то, что я придумал, но мне интересно, есть ли лучший способ сделать это. Мне приходилось устанавливать, проверять и сбрасывать переменную среды, чтобы сохранить состояние, которое поддерживало бы переключение вперед и назад с одной и той же привязкой клавиш. Я также не понял, как сделать состояние переключения специфичным для окна (сейчас любой многооконный сеанс разделяет состояние во всех своих окнах, поэтому это работает неправильно)

bind Space if-shell '[ -z "${ALT_PANE_ZOOM+x}" ]' \
                    'select-pane -t :.+; resize-pane -Z; set-environment ALT_PANE_ZOOM 1' \
                    'set-environment -u ALT_PANE_ZOOM; last-pane'

Обновление: я нашел более простое решение. Вместо того, чтобы полагаться на переменную среды для каждого окна, я могу использовать -F и переменную формата window_zoomed_flag:

bind Space if-shell -F '#{window_zoomed_flag}' \
                       'last-pane' \
                       'select-pane -t :.+; resize-pane -Z'

person ivan    schedule 29.05.2016    source источник


Ответы (1)


В вашем tmux.conf создайте привязку клавиш, которая:

  1. Сохраняет состояние масштабирования
  2. Переключиться на последнюю панель, уменьшая масштаб, если панель была увеличена
  3. Условно масштабирует в зависимости от состояния масштабирования в #1

-

bind key run-shell "tmux setenv zoomed $(tmux display -p '#{window_zoomed_flag}')"\; \
         last-pane\; \
         run-shell "test $(tmux display -p '#{zoomed}') -ne 0 || tmux resize-pane -Z"

Обратите внимание, что обратная косая черта в разделителях команд с точкой с запятой обязательна.

person diwo    schedule 29.05.2016