На моем локальном компьютере одновременно работают 3 экземпляра node.js. У каждого есть своя собственная панель в окне tmux, которая называется «серверы». Проблема в том, что не так просто определить, какой узел на какой панели работает, потому что их журналы похожи.
Мне нужно название для каждой панели. Как я понял, сам tmux не имеет такой функции: у него есть только заголовки для окон, а не для панелей. Запуск отдельного сеанса tmux внутри каждой панели для каждого экземпляра node.js выглядит как излишество.
Так есть ли небольшая программа, которая запускает команду, заключая ее вывод в указанную строку состояния?
заранее спасибо
command-line
title
tmux
pane
Андрей Лушников
источник
источник
Ответы:
tmux поддерживает заголовки для каждой панели, но не обеспечивает расположение для каждой панели для отображения этих заголовков.
Вы можете установить заголовок панели с помощью escape-последовательности ESC
]2;
… ESC\
(например, см. Раздел « Имена и заголовки» на странице руководства tmux ). Вы можете сделать это из оболочки следующим образом:Заголовок каждой панели по умолчанию соответствует имени хоста системы. По умолчанию заголовок активного окна выводится на дисплее на правой стороне tmux строки состояния ( по умолчанию глобального значения переменного сеанса
status-right
является"#22T" %H:%M %d-%b-%y
, которая показывает 22 символов из заголовке панели, времени и даты).Итак, до тех пор, пока вы удовлетворены тем, что можете видеть заголовок активной панели (т.е. желаете переключить панели, чтобы увидеть заголовок неактивной панели), вы можете обойтись функциональностью по умолчанию. Просто отправьте соответствующую escape-последовательность для установки заголовка перед запуском основной команды для каждой панели.
Если вам абсолютно необходима выделенная строка для отображения некоторой информации о каждой панели, то вложенные сеансы tmux могут быть не такими (ненужными) «излишними», как вы могли сначала подумать.
В общем случае, чтобы обеспечить нерушимую строку состояния на каком-либо данном терминале, вам понадобится полный (пере) эмулятор терминала, который находится между исходным терминалом и новым терминалом (один с на одну строку меньше). Такая (повторная) эмуляция необходима для трансляции управляющих последовательностей, отправленных на внутренний терминал, и их трансляции для исходного терминала. Например, чтобы поддерживать строку состояния в нижней части внешнего терминала, команда
отправлено на внутренний терминал должен быть
при переводе и отправке на внешний терминал. Точно так же LF, отправленный на внутренний терминал, должен стать
во внешнем терминале.
Такие программы, как tmux и screen, являются такими эмуляторами терминала. Конечно, эмулятор терминала обладает множеством других функций, но вам понадобится большой кусок кода эмуляции терминала, чтобы обеспечить надежную строку состояния.
Однако есть облегченное решение, если
Как и многие эмуляторы терминала, tmux поддерживает команду управления терминалом «установить область прокрутки» на своих панелях. Вы можете использовать эту команду, чтобы ограничить область прокрутки верхними (или нижними) строками N-1 терминала и записать какой-то текст, идентифицирующий экземпляр, в строку без прокрутки.
Ограничения (запрещение команд перемещения курсора, отсутствие изменения размера) необходимы, поскольку программа, генерирующая вывод (например, экземпляр Node.js ), не знает, что прокрутка была ограничена определенной областью. Если программа, генерирующая вывод, переместила курсор за пределы области прокрутки, то вывод может стать искаженным. Точно так же эмулятор терминала, вероятно, автоматически сбрасывает область прокрутки при изменении размера терминала (так что «строка без прокрутки», вероятно, закончится прокруткой).
Я написал сценарий, который использует
tput
для генерации соответствующих управляющих последовательностей, записи в строку без прокрутки и запуска программы после перемещения курсора в область прокрутки:Вы можете использовать это так:
Сценарий также должен работать вне tmux, если терминал поддерживает и публикует свои возможности
csr
иcup
terminfo.источник
tput
для включения соответствующих управляющих последовательностей в аргумент «содержимое строки». На большинстве терминалов вы можете сделать линию «голубой (6) и зеленой (3) на пурпурной (5)» с помощьюno_scroll_line top "$(tput setaf 6; tput setab 5)Node: $(tput setaf 3)foo$(tput op)" node foo.js
.setaf
устанавливает передний план,setab
устанавливает фон,op
сбрасывает цвета терминала по умолчанию. Возможности цвета принимают числа от 0–7, 0–15, 0–87 или 0–255, в зависимости от эмуляции вашего терминала.Эта функция была добавлена в tmux в этом коммите . Его нет в версии 2.2, но похоже, что он будет в версии 2.3.
Чтобы включить его:
или, если хотите:
Чтобы установить собственный текст в качестве строки состояния границы панели, вы можете использовать
pane-border-format
, например, вот так:источник
tmux
вам нужна какая-то команда извне,tmux
чтобы изменить это. Правильно? Или есть какая-то последовательность внутри, которая может его обновить?pane-border-format
для установки строки настраиваемого формата для отображения панели (обычный#{...}
формат). Я отредактировал ваш ответ, чтобы включить это.Поскольку
tmux 2.6
вы можете:Вы можете увидеть заголовок каждой панели в строке состояния с помощью:
Отключить строку состояния с помощью:
источник
cd $HOME
, заголовок изменяется на значение$HOME
. (Я вижу это на tmux 2.8.)set-window-option automatic-rename off
.set-option -g allow-rename off
в.tmux.conf
досье.pane-border-format
переменную, предоставленную пользователем (я не уверен, есть ли у этой функции официальное название), чтобы контролировать то, что отображается. Вот пример.Я работаю над панелью состояния панели для tmux - ticket. Мою ветку разработки можно найти здесь, на github: https://github.com/jonathanslenders/tmux
Прямо сейчас это уже добавляет рабочую команду заголовка панели переименования . Есть еще некоторые ошибки, и API будет улучшаться. Идея состоит в том, чтобы создать строку состояния для каждой панели, которая может иметь некоторое форматирование, например строку состояния сеанса. Как и в остальном tmux, все должно быть скриптовым и настраиваемым. После завершения и стабильной работы он, вероятно, будет включен в официальный tmux.
источник
Я использую tmux версии 2.3, я думаю, что стиль границы не поддерживается в предыдущих версиях. вот что сработало для меня:
Для каждой панели установите заголовок:
Затем:
источник
select-pane -T "my title"
делает это. Вы даже можете настроить привязку клавиш, так что вам просто нужно указать заголовок:bind-key T command-prompt -p "New title:" 'select-pane -T "%%"'
pane-border-status
параметра установлено что-то (top
илиbottom
).Гифка стоит тысячи слов. ( источник )
tmux-xpanes - это разделитель терминала на основе tmux, который поддерживает отображение заголовка для каждой панели с помощью недавно добавленной
-t
опции.источник
Да , есть такая команда:
tmux
. Дайте вашей сессии имя, и оно будет отображаться во внутренней строке состояния:источник
В краткосрочной перспективе это не поможет, но есть запрос функции для заголовков каждой панели в tmux: http://sourceforge.net/tracker/?func=detail&aid=3495916&group_id=200378&atid=973265#
Между тем, как уже упоминалось, вложение tmux работает прилично.
источник
TL; DR
Добавьте следующие конфигурации в свой файл конфигурации tmux (в моем случае
~/.tmux.conf.local
)затем запустите:
наслаждайся этим
Благодаря https://stackoverflow.com/a/37602055/5121972
источник