Экран GNU: изменение имени нового окна

20

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

liewl
источник
Какую оболочку вы используете?
Марко
Я использую Bash.
liewl

Ответы:

21

Заставьте свою оболочку изменять заголовок окна каждый раз, когда он меняет каталог, или каждый раз, когда он отображает приглашение.

Для вашего ~/.bashrc:

if [[ "$TERM" == screen* ]]; then
  screen_set_window_title () {
    local HPWD="$PWD"
    case $HPWD in
      $HOME) HPWD="~";;
      $HOME/*) HPWD="~${HPWD#$HOME}";;
    esac
    printf '\ek%s\e\\' "$HPWD"
  }
  PROMPT_COMMAND="screen_set_window_title; $PROMPT_COMMAND"
fi

Или для вашего ~/.zshrc(для пользователей zsh):

precmd () {
  local tmp='%~'
  local HPWD=${(%)tmp}
  if [[ $TERM == screen* ]]; then
    printf '\ek%s\e\\' $HPWD
  fi
}

Для получения дополнительной информации найдите разделы « Динамические заголовки» в руководстве по экрану или «Разделы (окна имен)» на странице руководства.

Жиль "ТАК - перестань быть злым"
источник
Я скопировал bash один на мой .bashrc, и он выдаёт эти ошибки: bash: PROMPT_COMMAND: строка 0: синтаксическая ошибка рядом с неожиданным токеном ;' bash: PROMPT_COMMAND: line 0: ; screen_set_window_title '
liewl
@ Дэвид: Извините, смысл был в том, чтобы накапливать команды, PROMPT_COMMANDесли что-то уже было, но у меня были компоненты в неправильном порядке.
Жиль "ТАК - перестать быть злым"
2
Отличный трюк @Gilles. Для тех, кто любит держать заголовки окон короткими, вы можете оставить полный путь и оставить только базовое имя. Просто замените $HOME/*) HPWD="~${HPWD#$HOME}";;на*) HPWD=`basename "$HPWD"`;;
0

Вы можете поместить это в .bashrc, чтобы изменить имя терминала (имя окна) на последний каталог (или имя файла), в котором вы находитесь (работаете).

case "$TERM" in xterm*|rxvt*) PROMPT_COMMAND='echo -ne "\033]0;${PWD##*/}\007"' ;; *) ;; esac

подробнее описано здесь: ссылка

B.Kocis
источник