Tela GNU: nova mudança de nome de janela

20

Eu posso mudar o nome de uma janela com Ctrl-a Shift-a. Em vez de editar vários nomes de janelas manualmente, existe uma maneira de nomeá-los automaticamente para o diretório atual?

liewl
fonte
Qual shell você usa?
Marco
Estou usando o bash.
Llll

Respostas:

21

Faça com que o seu shell altere o título da janela sempre que mudar de diretório ou sempre que exibir um prompt.

Para o seu ~/.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

Ou para o seu ~/.zshrc(para usuários zsh):

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

Para obter mais informações, procure em títulos dinâmicos no manual da tela ou em "títulos (nomeando janelas)" na página de manual.

Gilles 'SO- parar de ser mau'
fonte
I copypasted o bash em meu .bashrc e está emitindo estes erros: bash: PROMPT_COMMAND: Linha 0: erro de sintaxe próximo inesperado sinal ;' bash: PROMPT_COMMAND: line 0: ; screen_set_window_title'
liewl
@ David: Desculpe, o ponto era acumular comandos PROMPT_COMMANDse já houvesse algo, mas eu tinha os componentes na ordem errada.
Gilles 'SO- stop be evil'
2
Grande truque @Gilles. Para quem gosta de manter os títulos das janelas curtos, é possível descartar o caminho completo e manter apenas o nome da base. Apenas substitua $HOME/*) HPWD="~${HPWD#$HOME}";;por*) HPWD=`basename "$HPWD"`;;
0

Você pode colocar isso no .bashrc para alterar o nome do terminal (nome da janela) para o último diretório (ou nome do arquivo) em que está (trabalhando).

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

mais descrito aqui: link

B.Kocis
fonte