Назад | Перейти на главную страницу

Выравнивание текста по правому краю в заголовке экрана GNU или в строке состояния

У меня это в моем .screenrc

caption always "%{= Kw} [%0c] %-Lw%{= KW}[%50>%n%f* %t]%{= Kw}%+Lw%=| %l | ${FULLHOST}"

Обычно он отображает что-то вроде этого:

[01:06] 0$ vim  1$ top  2-$ tail  [3$* ~]          | 0.26 0.54 0.36 | machine.domain.com

Однако, когда у меня открыто много окон, данные справа отодвигаются от края и усекаются:

[01:07] 0$ vim  1$ top  2$ tail  3$ ~  4$ ~  5$ ~  6-$ ~  [7$* ~] | 0.21 0.46 0.34 | mac

Как я могу изменить команду заголовка, чтобы она при необходимости обрезала список окон, а не выталкивала нужную информацию за край? Бонусные баллы, если активное окно тоже всегда отображается.

Другое решение, которое я сейчас использую. Вместо «% =», как в исходной строке, или «% -30 =» в метке изгиба (которая соответствует отметке -30% (также известной как 70%)), я использую «% -043 =» (которая выравнивает до знака -43 символа). Но, конечно, у него та же проблема, что и у Bender, где мне нужно компенсировать изменения для каждого сервера. Решение состоит в том, чтобы отредактировать файл .screenrc для каждого сервера с помощью такой команды:

sed -i "s/043/0$(( 19 + $#FULLHOST ))/" ~/.screenrc

(19 - это количество символов, используемых при отображении нагрузки и интервале)

Так как мой .screenrc генерируется файлом .rc моей оболочки, если его там нет, я могу сразу запустить эту команду после этого и получить правильное выравнивание смещения для каждого сервера. Не элегантно, но работает!

Остальные проблемы, которые мне не нужны, чтобы решить:

  • Список окон (и все, что находится слева, включая время) теперь сдвигается влево. Решил это снятием часов.
  • Если имя хоста машины изменится, мне нужно регенерировать .screenrc, что включает в себя его удаление и запуск новой оболочки.

Я использую:

caption always "%-Lw%{= Yk}%50>%n%f*%t%{-}%+Lw%<%-12= %?%F%?%{b}%c %m/%d%?"

Это отображает что-то вроде:

0*bender@armitage  1 bender@rikki  2 bender@gibson     15:11 05/30

Это сохраняет время и дату в строке состояния и в активном окне в списке по мере увеличения размера списка окон. Магический бит, который вам не хватает, - это определенная ширина для той части, которую вы хотите оставить с правой стороны. Это директива ширины "% -12 =" в моей команде заголовка.

Попробуйте что-нибудь вроде:

caption always "%{= Kw} [%0c] %-Lw%{= KW}[%50>%n%f* %t]%{= Kw}%+Lw%-30=| %l | ${FULLHOST}"

Вам нужно будет поиграть с шириной (% -30 = выше), чтобы отобразить полное имя хоста.