Як я можу автоматично оновити назву на запущеному екрані xterm?


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?


Ви знайшли рішення, яке працювало для вас ще?
Мисливець Трей

Ні. Я спробував запропоновані відповіді, але вони не спрацювали. Тому я ні їх не прийняв, ні відмовив.
Натан Фелман

Відповіді:


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 є eval'd перед тим, як з'явиться запит.

(у вашому .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, вона схожа.


1
це не працюватиме, якщо всередині gnuscreen. принаймні, це не працює для мене. ось чому я тут :)
gcb


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}]'

Знайдено за цим посиланням .


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

1
Але це оновить заголовок під час запускуscreen
Натан Феллман

1
Це чудово працює з екраном 4.00.02 + tcsh 6.12.00. Це припускає, що у вас встановлена ​​відповідна екранна hardstatusзмінна відповідно та підтримує термін cap / terminfo hs|ts|fs|ds.
Зал Даррена

що тут грає hardstatus?
gcb

2

Ця сторінка (з якою було пов’язано вище) - це рішення, однак вам потрібно переконатися, що термінальний рядок входу врівень з рядком id вашого термінала (тобто; для чого встановлена ​​змінна TERM), інакше це не матиме ніякого ефекту.

Ось підсумок того, що я зробив, що працювало для мене через роки, не вкладаючи достатньо часу, щоб зрозуміти це:

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

    echo $TERM
    

    Це, ймовірно, скаже щось на кшталт "xterm" або "linux" або "rxvt".

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

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

    Ключ полягає в тому, щоб переконатися, що "xterm" - це ідентифікаційний рядок терміна, який ви отримали вище. Ви можете зробити кілька рядків для кожного типу терміна, який ви використовуєте.

Наприклад, я маю це як мій файл .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'

Сподіваємось, це допомагає і є абсолютно снарядним. Пам'ятайте, що якщо ви запускаєте екран як root, вам потрібно буде змінити ~ root / .screenrc на додаток до власного файлу ~ / .screenrc, подібного до цього.


1

Інструкції тут дозволили мені оновити заголовок у rxvt з bash для мене - що, можливо, не допоможе, але я подумав, що це варто вивчити (розділ Інформаційна панель стану, якщо посилання не перейде на праву частину сторінки)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.