
Solía conservar mi directorio de trabajo cuando abría una nueva pestaña en gnome-terminal y quiero restaurar esta funcionalidad. Mi investigación me indicó que buscara fuentes /etc/profile.d/vte.sh
en mi ~/.zshrc
(uso Z Shell), sin embargo, eso no cambia el problema, mis nuevas pestañas aún se abren en formato ~
.
¿Cómo puedo restaurar esta funcionalidad? Puede ser un truco sucio si es necesario.
mis versiones
~$ 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)
Mi ~/.zshrc (ejemplo 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
Respuesta1
Una solución muy simple para usted sería incluir una función en su ~/.zshrc
que recuerde el directorio de trabajo y cambie a él al abrir zsh:
cd $(<>/dev/shm/$USER-pwd)
__cd(){
\cd "$@"
pwd >/dev/shm/$USER-pwd
}
alias cd=__cd
Usamos/dev/shmen lugar de/tmppara evitar escrituras en el disco, aunque/tmpya podría ser untmpfsen su sistema. \cd
se utiliza para evitar unbomba de tenedor.
Si desea esta característica solo para gnome-terminal, puede incluir una declaración if para verificar su terminal actual o ventana activa. Además, si le preocupa que otros usuarios puedan descubrir cuál fue su último directorio, puede modificar los permisos $USER-pwd
con 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
Respuesta2
No estoy seguro de qué es exactamente lo que desea restaurar (ver más abajo);
Si desea abrir gnome-terminal
desde un directorio diferente, existe una opción para especificar el directorio:
gnome-terminal --working-directory=/tmp
Ciertamente, podría usar una secuencia de comandos como comando de inicio personalizado, que realiza un comando cd
y luego inicia el shell, pero eso no parece un buen enfoque.
Si se trata de que el directorio predeterminado del shell en una nueva pestaña se establezca en el directorio actual de la pestaña que estaba actual cuando se activó la acción de nueva pestaña: Eso simplemente funciona para mí, por lo que solo puedo dar sugerencias: ejecuto un versión antigua, GNOME Terminal 3.6.2
.
Estoy bastante seguro de que no es el script /etc/profile.d/vte.sh
el que establece el directorio; En mi versión, donde funciona bien, el script no contiene código relacionado con eso y nunca lo he usado.
El programa de terminal en sí puede simplemente configurar el directorio antes de bifurcar el proceso de shell.
Pero en realidad, ni siquiera es necesario hacer eso: desea tener el mismo directorio que antes. Todo lo que se necesita es no tocar el directorio en absoluto.
Dicho esto, hay un error que describe este problema:
gnome-terminal: Error 697475: la nueva pestaña no se abre en el mismo directorio que la pestaña anterior
La discusión es muy larga, no tengo un resumen; vte.sh
se analiza allí y, al saltarlo, parece que se puede solucionar, pero aún no se ha publicado por completo.
Respuesta3
Actualización a partir de 2022:
- incluido
/etc/profile.d/vte.sh
en~/.zshrc
funciona ahora, sin embargo, solo para nuevospestañas, no para nuevoventanas - la solución alternativa de @admirabilis que se repite a continuación solía funcionar pero ahora interrumpe la finalización del directorio con la tecla de tabulación
- Ambos puntos anteriores son ciertos cuando se configura zsh como un "comando personalizado" en Gnome Terminal, así como cuando se configura zsh como shell predeterminado usando chsh
cd $(<>/dev/shm/$USER-pwd)
__cd(){
\cd "$@"
pwd >/dev/shm/$USER-pwd
}
alias cd=__cd
Versiones
Curiosamente, tanto Gnome Terminal como ZSH todavía tienen la misma versión principal que hace 8 años.
~$ 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)