От screen к tmux + конфиг
Скажу сразу, я приверженец GNU Screen, некоторые читателе сего блога даже видели мои скепсис по поводу нужности tmux и терзания основанные на принципах «работает, не трогай!» и «чем оно лучше того что я пользую сейчас?»… По прочтению очередного холиварчика screen vs tmux в котором любители скрина плохо знают tmux, а его любители screen я решился на большее чем просто посмотреть что же это за зверь.
Посему пишу в своём уютненьком о впечатлениях от знакомства и привожу свой текущий конфиг с закосом под monokai, мало ли кому пригодиться.
Первое же отличие брасающееся в глаза — нет привычных по скрину регионов, т.е. окна нельзя сплитить. Разбивается уже внутри окна на панели. Если в скрине каждое окно было само по себе регионом, то в tmux наоборот регионы (панели в его терминологии) внутри окна, которое больше похоже на виртуальный рабочий стол у оконных менеджеров, а сами панели аки окно теминала в тайловом wm. Панели можно вынести в отельное окно на весь размер терминала и уже в нем делать новые панели. Помимо этого окна могут прыгать по сессиям, хотя это в глаза сразу и не брасается…
Второе — мышь. Ей можно тыкать в окна и панели для их выбора, мышою можно ресайзить панели. А вот копипасить выделенное при включенной мышке средствами иксов (т.е. простым выделеним текста) у меня сходу не вышло. Не работает выделение хоть тресни. Но при зажатой клавише Shift всё прекрасно работает, спасибо гуглу ☺
Третье — внешний вид и хардстатус. Т.е. вообще статус, ибо в tmux он один единственный, и нет этих широких полос статуса обрамляющих при горизонтальной разбивки на регионы, т.е. панели. Саму строку статус можно разукрасить и огламурить, список окон это отдельный (настраиваемый) элемент статуса с возможностью разделения вида активного и не активного окна.
Четвертое — хоткеи. Они хоть и отличаются от скриновых, но самый минимум можно выполнять помня GNU Screen и то что дефолтный префикс в tmux Ctrl+b. А дальше уже Ctrl+? подскажет остальные хоткеи, которые, впрочем, никто не запрещает перенастроить в конфиге ~/.tmux.conf
Остальные отличия не сразу заметны, но они есть и их не мало: начиная от самой клиен-серверной архитектуры, уймы буферв обмена да переключением сессий в уже запущенной и заканчивая подключением внешних скриптов или управления тмуксом из командной строки.
Вообще tmux оказался больше похож на полноценный тайловый wm для терминала нежели на то чем я его себе представлял по описаниям да сравнивая со скрином…
Ну и текущий мой конфиг, который несомненно будет эволюционировать по мере использования tmux и более плотного моего с ним знакомства
set -g default-terminal "screen-256color" # прикидываемся скрином дабы 256 цветов юзать
set -g history-limit 100000 # буфер скрола в строках
set -g base-index 1 # счет окон с единицы, а не с нуля
set -g pane-base-index 1 # счет панелей с единицы, а не с нуля
set -g mouse on # включаем мышь что бы как минимум переключаться по окнам и панелям
# хоткеи { # регистр важен
bind C-b last-window # дабы по ^b^b последние окна переключать (по умолчанию ^b l)
bind V split-window -h # горизонтальное разделение окна вместо "
bind H split-window # вертикальное разделение окна вместо %
bind C-k confirm-before -p 'kill-window #W (y/n)' kill-window # закрыть окно
# хелп по хоткеям (не забываем о префиксе в начале)
# ! вынесть панель в окно
# $ переименовать текущую сессию
# () переключение сессий
# , переименование окна
# ; перейти на последнюю активную панель
# q отобразить номера панелей (вводя номер переключимся на этот номер)
# x убить текущую панельй
# }
set-option -g set-titles on # заголовки окон
set-window-option -g automatic-rename on # auto name
# настройка статуса и попытка раскрасить всё ala monokai
set -g status-utf8 "on"
set -g status-interval 1 # обновляем статус каждую секунду
set -g status-bg "colour235" # основной фон статусной строки
set -g message-command-fg "colour231"
#set -g status-justify "centre" # позиция списка окон [left | centre | right]
set -g status "on" # включает статусбар, off выключает
set -g message-bg "colour81"
set -g message-fg "colour231"
set -g message-command-bg "colour81"
# цвета текста краев панелей (исользуется │ или U+2502 с фоном, так что от шрифта можно наколдовать хоть черепки в качестве разделителя)
set -g pane-border-fg colour241
set -g pane-border-bg default
set -g pane-active-border-fg colour81
set -g pane-active-border-bg default
# set -g status-attr "none" # стиль статуса bright (or bold), dim, underscore, blink, reverse, hidden, or italics
# set -g status-left-attr "none" # стиль левого статуса
# set -g status-right-attr "none" # стиль правого статуса
# цвета окон: активного и неактивного
setw -g window-status-fg "colour231"
setw -g window-status-bg "colour237"
setw -g window-status-attr "none"
setw -g window-status-activity-fg "colour231"
setw -g window-status-activity-bg "colour237"
setw -g window-status-separator ""
# собственно строка статус
set -g status-left "#[fg=colour231,bg=colour81] #S #[fg=colour81,bg=colour235,nobold,nounderscore,noitalics]" # что видим слева
set -g status-right "#[fg=colour241,bg=colour235,nobold,nounderscore,noitalics] #H #[fg=colour231] #(skb -h) #[nobold,fg=default]" # что видим справа (skb покажет раскладку в иксах)
setw -g window-status-format "#[fg=colour235,bg=colour237,nobold,nounderscore,noitalics]#[default] #I #W #[fg=colour237,bg=colour235,nobold,nounderscore,noitalics]" # формат окна (расположение списка окон с помощью status-justify)
setw -g window-status-current-format "#[fg=colour235,bg=colour81,nobold,nounderscore,noitalics]#[fg=colour231,bg=colour81] #I.#P #W #[fg=colour81,bg=colour235,nobold,nounderscore,noitalics]" # формат текущего окна
# хелп по статусу {
# #S - имя сессии
# #I - номер окна
# #P - номер панели
# #W - собственно сам заголовок, обычно имя программы
# %Y-%m-%d %H:%M - дата и время
# }
Собственно, попробовав его использовать как привычный уже скрин понял что он как минимум не хуже, а в чем-то и лучше (хотя бы мышкотыканьем или выносом окна в другую сессию). В нём столько всяких плюшек что использование его только как скрина вызывает ощущение сродни кощунству.
Конечно, полноценно tmux я не использую и всё ещё открываю для себя его возможности, но всё то для чего использовал скрин им стало выполняеться на ура всего после получаса чтения документации, гугления и написания конфига, а привычка к хоткеям скрина легко сменилась привычкой к хоткеям tmux (кои я поменял лишь по мелочам).