
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.sh
no 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 ~/.zshrc
que 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-pwd
com 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-terminal
começ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 cd
e 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.sh
que 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.sh
em~/.zshrc
funciona 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)