Ekran GNU: zmiana nazwy nowego okna

20

Mogę zmienić nazwę okna za pomocą Ctrl-a Shift-a. Czy zamiast ręcznie edytować kilka nazw okien, istnieje możliwość automatycznego nadania im nazw po bieżącym katalogu?

liewl
źródło
Jakiej powłoki używasz?
marco
Używam bash.
liewl

Odpowiedzi:

21

Spraw, aby powłoka zmieniała tytuł okna za każdym razem, gdy zmienia katalog lub za każdym razem, gdy wyświetla monit.

Dla twojego ~/.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

Lub dla twoich ~/.zshrc(dla użytkowników Zsh):

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

Aby uzyskać więcej informacji, zapoznaj się z sekcjami Dynamiczne tytuły w Podręczniku ekranu lub w sekcji „Tytuły (okna nazw)” na stronie podręcznika.

Gilles „SO- przestań być zły”
źródło
Skopiowałem bash jeden na moim .bashrc i daje on następujące błędy: bash: PROMPT_COMMAND: linia 0: błąd składniowy w pobliżu nieoczekiwanego tokena ;' bash: PROMPT_COMMAND: line 0: ; screen_set_window_title '
liewl
@ David: Przepraszam, chodziło o gromadzenie poleceń, PROMPT_COMMANDjeśli coś już było, ale miałem komponenty w niewłaściwej kolejności.
Gilles „SO- przestań być zły”,
2
Świetna sztuczka @Gilles. Dla tych, którzy lubią krótkie tytuły okien, możesz upuścić pełną ścieżkę i zachować tylko nazwę basename. Wystarczy wymienić $HOME/*) HPWD="~${HPWD#$HOME}";;z*) HPWD=`basename "$HPWD"`;;
0

Możesz umieścić to w .bashrc, aby zmienić nazwę terminala (nazwę okna) na ostatni katalog (lub nazwę pliku), w którym jesteś (pracujesz).

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

więcej opisano tutaj: link

B.Kocis
źródło