Как правильно установить Экран GNU для отображения в настоящее время запускающей программы в hardstatus

В ударе, для отображения названия текущей программы в Экране GNU hardstatus строка берет только две строки конфигурации. Во-первых, скажите экран, на что обычно похож конец Вашей подсказки, и предоставьте заголовок по умолчанию для окна, когда Вы сидите в в оболочке:

shelltitle "$ |bash"

Затем, поместите эту escape-последовательность в переменную PS1 перед символами, которые обычно завершают подсказку '$ ' в этом случае: \033k\033\\

Эта техника работы, к точке. hardstatus заголовок окна обновляется к названию в настоящее время запускающей программы и затем переключается назад на заголовок по умолчанию вскоре после того, как выполнение будет закончено. Одна основная проблема, однако, состоит в том, что этой строки Escape не оставляют самой, вызывая переносящие строку проблемы с командами дольше, чем начальная строка.

Это было раздражающим, таким образом, я изложил поиск решения. Оказывается, просто выход из предыдущей escape-последовательности исправляет обертывание строки: \[\033k\]\[\033\\\]

Отлично! Мой hardstatus заголовок окна все еще обновляет к названию в настоящее время запускающей программы, и теперь мои более длительные команды переносятся к второй строке правильно. Однако с этой новой escape-последовательностью в моем PS1, экран обновляет заголовок окна к фактической команде, которую я ввожу, не просто название текущей программы, после того как это выполняется.

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

3
задан 15.11.2010, 23:29

1 ответ

Я не думаю, что экран является правильным местом для обновления той копии. Действительно легко сделать от Ваших конфигураций оболочки. Можно определить a preexec() функционируйте в своем shellrc файле, который отсылает детали того, что он собирается выполнить, прежде чем он сделает это. Можно распечатать оттуда, чтобы сказать экрану изменять текущий заголовок окна. Я использую zsh, не колотят, таким образом, Ваш пробег будет варьироваться, но я знаю, что то же самое возможно там также. Для ссылки в моем zshrc файле у меня есть что-то вроде этого:

# If running in screen, set the window title to the command about to be executed
preexec() {
    [ -n "$WINDOW" ] && print -Pn "^[k$2^[\\"
}

# If in screen, blank the window title when displaying the prompt
premd() {
    [ -n "$WINDOW" ] && print -Pn "^[k ^[\\"
}

В действительности я делаю некоторую очистку команды прежде, чем отобразить его как заголовок. Например, Вы могли использовать print -Pn "^[k`echo $2|perl -pne 's!\s.*/! !g'|cut -c1-16`^[\\" в предварительном должностном лице () выше для проявления намного более чистой информации, о какой собирается быть выполненным. Это снимает изоляцию с путей только к последнему компоненту и нескольких приемов ниндзя.

4
ответ дан 08.12.2019, 00:06

Теги

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