Экран GNU не может ( пока ) поместить запрошенный вами контент в верх вашего просмотра, но он может поместить его в внизу с использованием caption
, который включает в себя строку жесткого статуса (заголовок окна):
% print 'caption always "%h"\nterm $TERM' > ~/.screenrc
% screen
% precmd() { print -Pn "\e]0;[%~] "; print -Rn "$1"; print -Pn "\e\\"; }
% preexec() { precmd "$1"; }
Будьте осторожны: первая строка перезапишет ваш ~/.screenrc
, и вы, возможно, не захотите этого делать.
Это даст вам инвертированную цветом строку состояния в нижней части вашего терминала, которая содержит путь в квадратных скобках, а затем текущую команду выполнения (если она есть). Попробуйте это в вашем домашнем каталоге, например, с cd /tmp; sleep 1
. Он покажет [~] cd /tmp; sleep 1
на секунду, а затем изменится на [/tmp]
.
precmd()
и preexec()
являются функциями zsh hook . ZSH запускает precmd()
прямо перед отображением вашего приглашения. Непосредственно перед выполнением команды zsh запускает preexec()
с $1
, установленным для всей команды. (Используйте $2
для просмотра псевдонимов.)
Вышеупомянутый precmd()
имеет три print
вызова, чтобы гарантировать, что коды выхода ограничены из командной строки (-R
подавляет интерполяцию escape-последовательности, -P
включает расширение переменной пути, а -n
подавляет завершающий перевод строки) , \e]0;
- это один из нескольких способов запуска строки состояния, а \e\\
- один из нескольких способов ее завершения. Выше preexec()
передает команду в precmd()
.
После того, как вы сохранили ~/.screenrc
, вы можете поместить в ~/.zshrc
следующее, чтобы это всегда происходило:
if [ -z "$STY" ]; then screen -r 2>/dev/null || screen; fi
precmd() { print -Pn "\e]0;[%~] "; print -Rn "$1"; print -Pn "\e\\"; }
preexec() { precmd "$1"; }
Первая строка запускает screen
, если вы еще не находитесь в таком сеансе (он пытается возобновить отдельный сеанс, если он есть, или запускает новый сеанс). Вторые две строки описаны выше.
Будьте осторожны, если вы закроете терминалы, не выходя из оболочки (и, следовательно, экрана), сеансы экрана будут работать без заголовка. Это особенность, когда речь идет об удаленных сеансах SSH, которые отключаются, но не так полезны локально.