Gnome-terminal et Zsh: garder le répertoire actuel dans un nouvel onglet / fenêtre


12

J'utilise gnome 3.10.1 sur Arch avec Zsh. Je suis confronté à ce problème que lorsque je crée un nouvel onglet ou une nouvelle fenêtre à partir d'une fenêtre de terminal, il réinitialise le répertoire en cours dans mon répertoire d'origine.

J'ai déjà essayé ceci: gnome-terminal: garder une trace du répertoire dans le nouvel onglet , mais cela n'a pas fonctionné.

J'ai pensé que cela pourrait être une configuration sur mon .zshrcfichier, alors je l'ai nettoyé et j'ai mis la ligne suivante:

. /etc/profile.d/vte.sh

Cependant, cela n'a pas fonctionné comme prévu.

Oui, ce fichier existe et voici son contenu:

# Copyright © 2006 Shaun McCance <shaunm@gnome.org>
# Copyright © 2013 Peter De Wachter <pdewacht@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# Not bash or zsh?
[ -n "$BASH_VERSION" -o -n "$ZSH_VERSION" ] || return 0

# Not an interactive shell?
[[ $- == *i* ]] || return 0

# Not running under vte?
[ "${VTE_VERSION:-0}" -ge 3405 ] || return 0

__vte_urlencode() (
  # This is important to make sure string manipulation is handled
  # byte-by-byte.
  LC_ALL=C
  str="$1"
  while [ -n "$str" ]; do
    safe="${str%%[!a-zA-Z0-9/:_\.\-\!\'\(\)~]*}"
    printf "%s" "$safe"
    str="${str#"$safe"}"
    if [ -n "$str" ]; then
      printf "%%%02X" "'$str"
      str="${str#?}"
    fi
  done
)

# Print a warning so that anyone who's added this manually to his PS1 can adapt.
# The function will be removed in a later version.
__vte_ps1() {
  echo -n "(__vte_ps1 is obsolete)"
}

__vte_osc7 () {
  printf "\033]7;file://%s%s\a" "${HOSTNAME:-}" "$(__vte_urlencode "${PWD}")"
}

__vte_prompt_command() {
  printf "\033]0;%s@%s:%s\007%s" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}" "$(__vte_osc7)"
}

case "$TERM" in
  xterm*|vte*)
    [ -n "$BASH_VERSION" ] && PROMPT_COMMAND="__vte_prompt_command" 
    [ -n "$ZSH_VERSION"  ] && chpwd_functions+=(__vte_osc7)
    ;;
esac

true

Cela me dérange vraiment ...

y-a-t'il une solution?


2
Il est lié à gnome-terminal, pas à zsh. Il semble que ce soit un bogue signalé , bien que le bogue derrière le lien soit le bogue d'ubuntu-gnome.
Risto Salminen

1
as-tu essayé terminator?
RSFalcon7

Oui, le terminateur fonctionne bien, mais, par exemple, l' nautilus-open-terminalextension toujours ouverte gnome-terminal, je n'ai pas pu le changer ...
Henrique Barcelos

1
Je voulais juste souligner que je devais redémarrer gnome-terminal après avoir acheté vte.sh dans mon fichier rc. N'a pas fonctionné simplement en l'enregistrant et en ouvrant un nouvel onglet / fenêtre .. (en utilisant bash / arch / gnome3.10)
The Silent Boatman

Réponses:


16

Je ne sais pas si vous rencontrez toujours ce problème, mais j'ai trouvé que mon problème était que j'exécutais / bin / zsh en tant que commande personnalisée dans mon profil de terminal. Désactiver cela a résolu le problème pour moi - et j'ai toujours gardé zsh comme shell principal.

Profil du terminal


Exactement résolu le problème pour moi en utilisant Fedora, merci beaucoup!
Sven Hager

1
changer cela signifierait utiliser le bash par défaut au lieu de zsh. alors comment cela résout-il le problème?
Alfie

@Alfie L'utilisateur n'utilise pas son shell par défaut (probablement bash). Cela signifie que la commande exécutée pour définir l'invite (configurée lors de la connexion /etc/profile.d/vte.sh) n'est pas la bonne et que le terminal n'a pas connaissance du répertoire actuel du shell.
xhienne

La capture d'écran n'est plus à jour. La deuxième option n'existe plus; cocher le premier a fait l'affaire. C'est la valeur par défaut, mais vous devez définir ZSH comme shell par défaut avec chsh, je suppose.
slhck

4

Il semble que vous devez activer l' option "Exécuter la commande en tant que shell de connexion" afin de le faire fonctionner comme il se doit.

Le soufflet d'impression est en portugais, mais c'est la configuration que je dois faire fonctionner.

Capture d'écran


cela fonctionnerait, car vous n'utilisez pas zsh
Alfie
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.