vte.sh no mantiene mi directorio gnome-terminal en una nueva pestaña

vte.sh no mantiene mi directorio gnome-terminal en una nueva pestaña

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.shen 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 ~/.zshrcque 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. \cdse 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-pwdcon 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-terminaldesde 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 cdy 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.shel 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.shse 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.shen ~/.zshrcfunciona 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)

información relacionada