Как автоматически обновить заголовок на экране запущенного xterm?

Как автоматически обновить заголовок на экране запущенного xterm?

Это своего рода продолжениеэтот вопросЯ работаю втчшв GNUэкранвxterm.

У меня в .cshrc есть следующее:

alias res_t 'xtset -t %h:%d "(%u:%g)" %e'       # reset titlebar
res_t                                           # reset title right now
alias precmd res_t

И это отлично работает!

Однако, когда я запускаю screen, я вижу, что заголовок не обновляется с текущим каталогом. Как мне заставить screen обновить заголовок xterm?

решение1

Вы можете задать заголовок окна xterm, добавив его к своему .tcshrcпсевдониму .cshrc(замените текущий precmdпсевдоним):

alias precmd 'echo -n "\033]0;${PWD}\a"'

Убедитесь, что это единственный псевдоним precmd в ваших .cshrcи .tcshrcфайлах при использовании этого. Этот метод отображает текущий каталог как заголовок окна для меня в xterm и gnome-terminal независимо от того, открыт ли сеанс GNU screen.

Мой ответ был основан наэтот.

решение2

Это должно работать в любой оболочке, но это грязный хак .screenrc. Он использует вашу строку hardstatus для работы, что может быть неприемлемо для некоторых пользователей. Но это работает вgnome-терминална последней версии Ubuntu, даже безtermcapinfoстрока ниже. В некоторых ситуациях могут потребоваться более глубокие настройки (например, я не тестировал на PuTTY).

# enable xterm title setting; may not be necessary on some platforms
termcapinfo xterm*|rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

# dirty hack: put xterm title escapes in the hardstatus
# this example will yield "user@host || screen Win#:(windowtitle)
defhstatus "$USER@^EH || screen ^E:(^Et)"
# now turn it off so it doesn't print in the hardstatus line
hardstatus off

# and finally, use caption as a replacement hardstatus
caption always '%{= kG}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'

Найдено вэта ссылка.

решение3

Я понимаю, что вы используете tcsh, так что это, скорее всего, не сработает... На всякий случай, если кто-то ищет способ сделать это с помощью bash.

Если ваши системы (локальные / удаленные) работают под управлением bash, то вы можете использовать переменную окружения "PROMPT_COMMAND" для установки заголовка окна. PROMPT_COMMAND оценивается перед отображением приглашения.

(в вашем .bashrc):

export PROMPT_COMMAND='history -a && echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

Объяснение:

'history -a'

Это заставит оболочку добавлять данные в файл истории каждый раз после завершения команды, а не после завершения всей оболочки. (Это не относится к данному примеру).

'echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

Это перекликается с escape-кодом "\033]0;", который устанавливает заголовок окна с переменными "user" @ "host" (удаляя самое длинное совпадение справа до первого "."), а затем рабочий каталог (заменяя "~" на "$HOME").

Вышеуказанный трюк будет работать с любым терминальным приложением, которое поддерживает динамическое изменение заголовка окна (что делают iTerm, Terminal.app, urxvt, aterm, eTerm. xterm и т. д.). Вы также можете посмотреть на переменную оболочки "TITLEBAR" в документации bash, она похожа.

решение4

Эта страница(ссылка на которую приведена выше) является решением, однаковам необходимо убедиться, что строка терминала записи совпадает со строкой идентификатора вашего терминала(т.е. то, чему равна переменная TERM), в противном случае это не будет иметь никакого эффекта.

Вот краткое изложение того, что я сделал и что сработало для меня после многих лет отсутствия времени на то, чтобы разобраться в этом вопросе:

  1. Узнайте строку идентификатора вашего терминала, выполнив:

    echo $TERM
    

    Вероятно, там будет написано что-то вроде «xterm», «linux» или «rxvt».

  2. Теперь добавьте следующую строку в файл .screenrc (или создайте его, если его нет), расположенный в вашем домашнем каталоге (~/.screenrc):

    termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
    

    Ключ в том, чтобы убедиться, что 'xterm' — это строка идентификатора вашего TERM, которую вы получили выше. Вы можете сделать несколько строк для каждого типа термина, который вы используете.

Например, у меня это файл .screenrc, потому что я использую как xterms, так и тип термина «linux» при SSh-подключении к ящику:

termcapinfo linux 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

Надеюсь, это поможет, и это полностью не зависит от оболочки. Помните, если вы запускаете screen как root, вам нужно будет изменить ~root/.screenrc в дополнение к вашему собственному файлу ~/.screenrc, как здесь.

Связанный контент