vte.sh não mantém meu diretório gnome-terminal em uma nova aba

vte.sh não mantém meu diretório gnome-terminal em uma nova aba

Eu costumava manter meu diretório de trabalho ao abrir uma nova aba no gnome-terminal e quero restaurar essa funcionalidade. Minha pesquisa me indicou o sourcing /etc/profile.d/vte.shno meu ~/.zshrc(eu uso Z shell), porém isso não muda o problema, minhas novas abas ainda são abertas em ~.

Como posso restaurar esta funcionalidade? Pode ser um hack sujo, se necessário.

Minhas versões

~$ uname -a
Linux konradslaptop2 3.17.2-1-ARCH #1 SMP PREEMPT Thu Oct 30 20:49:39 CET 2014 x86_64 GNU/Linux
~$ gnome-terminal --version
GNOME-Terminal 3.14.2
~$ zsh --version
zsh 5.0.7 (x86_64-unknown-linux-gnu)

Meu ~/.zshrc (exemplo mínimo)

. /etc/profile.d/vte.sh
# auto generated by .zsh installation
if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then       
    function zle-line-init () {
        printf '%s' "${terminfo[smkx]}"
    }
    function zle-line-finish () {
        printf '%s' "${terminfo[rmkx]}"
    }
    zle -N zle-line-init
    zle -N zle-line-finish
fi

Responder1

Uma solução muito simples para você seria incluir uma função no seu ~/.zshrcque lembra o diretório de trabalho e muda para ele ao abrir o zsh:

cd $(<>/dev/shm/$USER-pwd)

__cd(){
    \cd "$@"
    pwd >/dev/shm/$USER-pwd
}
alias cd=__cd

Nós usamos/dev/shmem vez de/tmppara evitar gravações em disco, embora/tmpjá poderia ser umtmpfsem seu sistema. \cdé usado para evitarbomba de garfo.

Se desejar esse recurso apenas para o gnome-terminal, você pode incluir uma instrução if para verificar seu terminal atual ou janela ativa. Além disso, se você estiver preocupado com a possibilidade de outros usuários descobrirem qual foi seu último diretório, você pode modificar as permissões $USER-pwdcom chmod:

if xprop -id $(xprop -root 32x ' $0' _NET_ACTIVE_WINDOW | awk '{print $NF}') WM_CLASS | grep -q gnome-terminal; then
    cd    $(<>/dev/shm/$USER-pwd)
    chmod 600 /dev/shm/$USER-pwd

    __cd(){
        \cd "$@"
        pwd >/dev/shm/$USER-pwd
    }
    alias cd=__cd
fi

Responder2

Não tenho certeza do que exatamente você deseja restaurar (veja abaixo);

Se você quiser abrir gnome-terminalcomeçando em um diretório diferente, existe uma opção para especificar o diretório:

gnome-terminal --working-directory=/tmp

Você certamente poderia usar um script como comando de inicialização personalizado, que executa um cde inicia o shell - mas isso não parece uma boa abordagem.


Se for sobre o diretório padrão do shell em uma nova guia sendo definido como o diretório atual da guia que era atual quando a ação da nova guia foi acionada: Isso funciona para mim, então só posso dar dicas - eu executo um versão mais antiga, GNOME Terminal 3.6.2.

Tenho certeza de que não é o script /etc/profile.d/vte.shque define o diretório; Na minha versão - onde funciona bem - o script não contém código relacionado a isso e nunca o usei.

O próprio programa terminal pode simplesmente definir o diretório antes de bifurcar o processo shell.
Mas, na verdade, nem é necessário fazer isso - você deseja ter o mesmo diretório de antes. Tudo o que é necessário é não mexer no diretório.

Dito isto, há um bug que descreve este problema:
gnome-terminal: Bug 697475 - A nova aba não é aberta no mesmo diretório da aba anterior
A discussão é muito longa, não tenho um resumo; vte.shé discutido lá e, ao pular, parece que pode ser corrigido, mas ainda não foi totalmente lançado.

Responder3

Atualização de 2022:

  • incluir /etc/profile.d/vte.shem ~/.zshrcfunciona agora, porém apenas para novosguias, não para novojanelas
  • a solução alternativa de @admirabilis repetida abaixo costumava funcionar, mas agora interrompe a conclusão do diretório com a tecla tab
  • ambos os pontos acima são verdadeiros ao configurar o zsh como um "comando personalizado" no Terminal Gnome, bem como ao definir o zsh como shell padrão usando chsh
cd $(<>/dev/shm/$USER-pwd)

__cd(){
    \cd "$@"
    pwd >/dev/shm/$USER-pwd
}
alias cd=__cd

Versões

Curiosamente, tanto o Gnome Terminal quanto o ZSH ainda estão na mesma versão principal de 8 anos antes.

~$ uname -a
Linux archlinux 5.19.5-arch1-1 #1 SMP PREEMPT_DYNAMIC Mon, 29 Aug 2022 15:51:05 +0000 x86_64 GNU/Linux
~$ gnome-terminal --version
# GNOME Terminal 3.44.1 using VTE 0.68.0 +BIDI +GNUTLS +ICU +SYSTEMD
~$ zsh --version
zsh 5.9 (x86_64-pc-linux-gnu)

informação relacionada