14

Это немного продолжение этого вопроса. Я работаю в tcsh на экране 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

И это прекрасно работает!

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

6 ответов6

4

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

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

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

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

3

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

Если ваши системы (локальные / удаленные) работают под управлением 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"'

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

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

2

Это должно работать в любой оболочке, но это грязный взлом .screenrc. Он работает над строкой hardstatus, что может быть неприемлемо для некоторых пользователей. Но он работает в gnome-Terminal на последней версии 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}]'

Нашел по этой ссылке.

2
setenv TITLE "%{\033]0;%n@%m:%~\007%}"
set prompt = "${TITLE}%n@%m:%~%#"
2

Эта страница (которая была связана выше) является решением, однако вам необходимо убедиться, что строка терминала в строке совпадает со строкой идентификатора вашего терминала (т. Е. Для переменной 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' при SShing в коробку:

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, например так.

1

Приведенные здесь инструкции позволили мне обновить заголовок в rxvt из bash для меня - что, вероятно, не поможет, но я подумал, что это стоит изучить (раздел «Информационная строка состояния», если ссылка не переходит на правую часть страницы)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .