Управляющие коды являются другим внутренним экраном.
Это за пределами экрана:
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
эквивалентно этому внутреннему экрану:
PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME}: ${PWD}\033\\"'
Изменение Вашего $ случая {ТЕРМИН} = "экранирует" строку заголовка к
TITLEBAR='\[\033_\u@\h > ${NEW_PWD}\033\\\]'
решит Вашу проблему.
crb является видом права, но
a) управляющий код, который он использует, не работает на меня. Это должно быть \033k
вместо \033_
. Посмотрите screen (1)
под "TITLES (naming windows)"
. Таким образом, это должно быть:
PROMPT_COMMAND='echo -ne "\033k${USER}@${HOSTNAME}: ${PWD}\033\\"'
b) этот вид выхода только используется для установки заголовка экранного окна. Один экземпляр экрана может иметь несколько окон, у каждого из них есть имя, именно это отображен в hardstatus
и caption
с t
escape-последовательность.
c) нормальный выход удара работает при установке права terminfo для xterm в .screenrc
:
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
(это также works on my machine
для шпаклевки)
Таким образом, для установки правильного заголовка и для экранного окна и для putty/xterm заголовка, я использую что-то как:
XTERM_TITLE="${USER}@${HOSTNAME}: ${PWD}"
SCREEN_TITLE="${PWD}"
PROMPT_COMMAND='echo -ne "\033]0;$XTERM_TITLE\007\033k$SCREEN_TITLE\033\\"'
для ссылки: http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x395.html
На самом деле, есть способ отправлять управляющие последовательности непосредственно в xterm, проходя через screen. Его было нелегко найти, но, судя по экранному коду (src / ansi.c), я думаю, что он существует с 2005 года. У меня он работает в xterm, Gnome Terminal и putty. Я нашел примечание в источнике mintty, указывающее, что он там не работает просто потому, что они не обрабатывают DCS (если он не был исправлен недавно).
Из документации для экрана ниже (на http: //www.gnu .org / software / screen / manual / html_node / Control-Sequences.html )
ESC P (A) Device Control String
Outputs a string directly to the host terminal without interpretation.
ANSI DCS (строка управления устройством) - это escape-код, который используется для отправки непосредственно на терминал (я думаю, что это был его первоначальное назначение много лет назад). Такая строка заканчивается escape-кодом ST (терминатор строки).
Оберните строку, чтобы установить терминал ' s заголовок окна внутри блока DCS..ST, и он проходит через весь экран и обновляется правильно, даже с hardstatus alwayslastline.
DCS = \ 033P, ST = \ 033 \
Пример - чтобы обновить заголовок окна с помощью текущий рабочий каталог, используйте
NEW_TITLE="\033]0;${PWD/$HOME/~}\007"
echo -ne "\033P${NEW_TITLE}\033\\"
Лучше поздно, чем никогда! Надеюсь, это кому-то поможет.
На случай, если я ошибаюсь насчет изменений источника экрана: я использую последнюю версию git из screen-session, которая, в свою очередь, использует почти последнюю версию git из screen (с некоторыми изменениями, относящимися к screen -сессия). Но сообщения журнала датированы экраном 2005 года (вы можете увидеть изменения, внесенные в этот коммит в отношении обработки DCS, если клонируете репозиторий экрана git и используете команду ниже).
git clone git://git.savannah.gnu.org/screen.git
git difftool e6618a14^! src/ansi.c
Я не собираюсь отвечать на вопрос полностью, но позвольте предложить способ решения проблемы. Многие оконные менеджеры поддерживают спецификацию EWMH . Существует также инструмент командной строки wmctrl
, который может взаимодействовать с ними. Используя этот инструмент, можно легко изменить заголовок активного окна с помощью следующей команды:
wmctrl -r :ACTIVE: -T "FooTitle"
Также можно изменить значок окна, макет и другие свойства. Инструмент, вероятно, не будет работать для PuTTY, поскольку Windows не поддерживает EWMH, но большинство систем Linux должны его принять.
При использовании этого метода не имеет значения, используете ли вы screen
или нет.
За последние 2 недели я искал во многих форумах и не нашел ответа на вопрос:
Как получить вывод всех команд в заголовок Putty?
Нужно было, чтобы другие программы знали, когда выполняются некоторые задания на сервере, и правильно ли это сделано или неправильно. Plink stdout и stdin не работали, я использовал много настроек с задержкой ожидания и для некоторых команд, которые не работали для других. XSEL и XCLIP не могли быть установлены на этом сервере.
Так что вот решение:
На шпаклевочном клиенте и сервере suse это выглядит так:
ls /home | grep domagaja > logutoit.txt
echo -e "\033]0\\;$(cat logutoit.txt)\\007\\c"
Надеюсь, кто-нибудь сможет этим воспользоваться. Конечно, это будет работать не для всех типов серверов и настроек putty client, но идея должна сработать.
hardstatus alwayslastline
, поскольку я делаю дляscreen
, предотвращаетscreen
от установкиxterm
заголовок. Теперь, если я могу просто выяснить, как сделать обоих одновременно. – James Sumners 6 July 2009 в 22:47screen
, который устанавливает заголовок окна и затем запускает программу. И затем просто разочаруйтесь в динамических терминальных заголовках при использованииscreen
.:( – James Sumners 7 July 2009 в 15:17