Отображать заголовок экрана в первой строке терминала

8

Когда я запускаю новый терминал, приглашение появляется в первой строке. После некоторого времени работы (или запуска команды, которая выдает какой-либо вывод), подсказка находится в последней строке. Там он будет находиться во время остальной части сессии , если я не нажимайте Ctrl- l, бег clearили resetили что - то подобное.

Для того, чтобы получить некоторую меру непрерывности в работе, я использую screenс трюком , чтобы отобразить имя сеанса в заголовке (я использую последний с двумя screenкомандами в .screenrc).

Чтобы избежать когнитивных издержек из-за загромождения рабочей области, я бы хотел, чтобы этот заголовок отображался в верхней части терминала.

l0b0
источник

Ответы:

3

Тебе повезло, экран выполняет команды сохранения и восстановления. Так что с bash это можно сделать.

Это дает инструкции, как перемещать курсор с помощью специальных escape-последовательностей. Вы можете написать "Hello World!" в верхнем левом углу с этим:

echo -e "\033[s\033[2;0HHello World!            \n                        \033[u"

Объяснено: Персонаж \033[sсохраняет текущую позицию курсора, чего мы и хотим, так как размеры экранных терминалов могут сильно различаться. Затем \033[2;0перемещает курсор в третью строку к первому символу (мы начинаем считать в верхнем левом углу и с 0). Затем идет текст и небольшая иллюстрация того, что возможно. Наконец, код \033[uвозвращает курсор туда, где он \033[sбыл извлечен.

В этом примере курсор перемещается во вторую строку, потому что при выдаче команды выводятся 2 новых строки, так что текущая третья строка будет первой строкой.

Вы можете использовать это вместе с заголовком сеанса, который вы уже можете получить по объяснению, которое вы уже связали.

Bananguin
источник
2
Вы можете использовать tputэто для независимого от терминала способа, без необходимости жестко кодировать эти управляющие коды. Например:echo -n "$(tput sc)$(tput cup 0 0)----Hello, world----$(tput rc)"
Джим Пэрис
Я уверен, что в каждой оболочке есть способ испускания этих символов, но я знаю только bash :-) Спасибо за ввод tput, я не знал об этом.
Bananguin
@ user1129682: Я попробовал screen $SHELL -c 'echo -n "$(tput sc)$(tput cup 0 0)${STY}$(tput rc)"'и , screen $SHELL -c 'screen -X caption always "$(tput sc)$(tput cup 0 0)${STY}$(tput rc)"'но ни один не работал. Любые идеи?
10
Зависит от того, что ты хочешь. Если вы просто хотите, чтобы заголовок текущего сеанса отображался в заголовке экрана, вы бы это сделали screen -X caption always; screen -X caption string "%t". Если вы хотите, чтобы текущий заголовок находился в верхнем левом углу, вам нужно изменить PS1переменную окружения, чтобы включить tputмагию.
Bananguin
@ l0b0: и при повторном прочтении tput cup 0 0 вполне может иметь проблему с двойной новой строкой, поэтому я помещаю свой текст в третью строку, а не в первую. Вы пробовали tput cup 2 0 или 0 2 ... еще не читали tput ...
Bananguin