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

11741
Nathan Fellman

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

14
Вы уже нашли решение, которое сработало для вас? Trey Hunner 14 лет назад 0
Я попробовал предложенные ответы, но они не сработали. Вот почему я не принял их и не проголосовал против них. Nathan Fellman 14 лет назад 0

6 ответов на вопрос

4
Trey Hunner

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

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

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

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

3
wawawawa

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

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

(в вашем .bashrc):

export PROMPT_COMMAND='history -a && echo -ne "\033]0;$@$:$\007'

Объяснение:

'history -a'

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

'echo -ne "\033]0;$@$:$\007"'

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

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

это не будет работать, когда внутри gnuscreen. по крайней мере, это не работает для меня. Вот почему я здесь :) gcb 10 лет назад 1
Это помогает? http://aperiodic.net/screen/faq#how_can_screen_use_xterm_s_title_bar wawawawa 10 лет назад 0
2
quack quixote

Это должно работать в любой оболочке, но это грязный взлом .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}[%%H%][%= %{= kw}%?%-Lw%?%(%%n*%f%t%?(%u)%?%)%%?%+Lw%?%?%= %][%%C%a %M.%d%]' 

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

2
SirDice
setenv TITLE "%{\033]0;%n@%m:%~\007%}" set prompt = "$%n@%m:%~%#" 
Но будет ли это обновлять заголовок при запуске `screen` Nathan Fellman 13 лет назад 1
Это прекрасно работает с экраном 4.00.02 + tcsh 6.12.00. Это предполагает, что у вас есть переменная `hardstatus` экрана, установленная соответствующим образом, и termcap / terminfo поддерживает` hs | ts | fs | ds`. Darren Hall 12 лет назад 1
что играет хардстатус здесь? gcb 10 лет назад 0
2
Adam Strohl

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

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

Похожие вопросы