Как отобразить текущее имя «сеанса» или «sockname» сеанса экрана в строке состояния? - PullRequest
24 голосов
/ 19 марта 2010

Я запускаю несколько сеансов экрана, каждый из которых создается с именем 'screen -S * ', и я хотел бы иметь возможность отображать в строке состояния имя Я использовал для создания текущего сеанса экрана.

Однако я не могу этого достичь. Есть идеи?

Ответы [ 7 ]

37 голосов
/ 05 апреля 2012

Самый простой способ отобразить имя сеанса -

  C-a : 
  sessionname

(без указания имени после sessionname)

См. Раздел «НАСТРОЙКА» в man screen

18 голосов
/ 27 марта 2010

screen имеет две строки состояния: строку заголовка и строку жесткого состояния, каждая из которых использует экранирование строки, указанное в разделе «STRING ESCAPES» man screen . К сожалению, нет выхода, который напрямую ссылается на имя сеанса.

Однако, есть взлом, который позволит вам сделать это.

screen передает имя сеанса в оболочку с помощью переменной $STY. Когда оболочка пытается установить заголовок окна (используя один из этих методов ) screen перехватывает эту попытку и сохраняет ее в чем-то, что вводит в заблуждение «hardstatus окна», у которого есть выход можно использовать: %h.

Таким образом, если у вас есть строка заголовка или hardstatus, включающая %h, и попытка оболочки установить заголовок окна на $STY, тогда %h будет заменен именем сеанса, когда строка отображается.

9 голосов
/ 10 августа 2015

В текущих версиях screen есть флаг %S для строки hardstatus.

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

Здесь отображается имя сеанса без идентификатора (например, ${STY#*.}).

(тот же ответ на другие вопросы здесь и здесь для полноты).

2 голосов
/ 16 июня 2014

перефразируя от https://superuser.com/a/212520/151988,, поместите это в ваш ~ / .screenrc;

screen 
screen $SHELL -c 'screen -X caption always "$STY"'
2 голосов
/ 07 ноября 2012

Super User имеет ответ на этот вопрос, который не требует $STY, вместо этого используйте команду backtick screen config и screen -ls: https://superuser.com/a/212520

1 голос
/ 26 января 2017

Если больше ничего не работает (как для меня), в качестве обходного пути вы можете создать окно с номером 0 и установить заголовок для вашего отображаемого имени:

screen -S myscreen
C^a :title "myscreen"
0 голосов
/ 05 января 2013

Как сказано в max_cantor в ответе SuperUser , к версии 4.1.0 следует добавить escape-символ для имени сеанса. Похоже, функция escape-символа была добавлена ​​с относительно небольшим патчем еще в 2008 году. Поэтому, если вы чувствуете себя смелым, вы можете получить копию версии для разработчиков 4.1.0 и попробовать ее.

Я попробую это с версией для разработчиков, когда у меня будет шанс.

...