Pourquoi Terminal ne respecte-t-il pas les préférences?

Dec 10 2020

Au cours de la semaine dernière, mon terminal a cessé d'honorer le paramètre «Nouveaux onglets ouverts avec: Même répertoire de travail». Le test avec "Nouvelles fenêtres ..." a donné le même résultat.

Mon shell est zsh.

J'ai pu faire fonctionner cela en suivant une réponse ici de Dan Rosenstark https://apple.stackexchange.com/a/340778/398648

# http://superuser.com/a/315029/4952
# Set Apple Terminal.app to resume directory... still necessary 2018-10-26
if [[ $TERM_PROGRAM == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]] {
  function chpwd {
    local SEARCH=' '
    local REPLACE='%20'
    local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
    printf '\e]7;%s\a' "$PWD_URL"
  }
  chpwd
}

Mais: je ne sais pas comment j'aurais pu déterminer cela moi-même, ou comment j'aurais pu déboguer un problème similaire .

Tous les trucs ou astuces pour comprendre quelles sont ces étapes initiales de Terminal seraient grandement appréciés.

Les choses qui n'ont pas fonctionné:

  • Basculer les paramètres pour Nouvel onglet ou Nouvelle fenêtre
  • Renommer ou ajouter returnà la première ligne de .zshrc, .zsh*fichiers
  • Toutes les suggestions de l' onglet Ouvrir un nouveau terminal dans le répertoire de travail actuel ne fonctionnent pas

Autres informations potentiellement utiles:

  • Les paramètres «Même profil» / «Profil par défaut» sont respectés lorsqu'ils sont modifiés
  • L'ajout pwdcomme première ligne de .zshrcmontre que le répertoire est déjà/home/<myuser>
  • J'ai installé et désinstallé certains outils et projets impliquant nixrécemment (y compris nix-darwin)

Métadonnées:

OS        macOS Catalina 10.15.7 (19H2)
Terminal  2.10 (433)
zsh       5.7.1 (x86_64-apple-darwin19.0)

Réponses

3 MarlonRichert Dec 28 2020 at 03:43

Si vous cliquez sur «Échapper à la séquence…» dans cette capture d'écran, vous voyez ce qui suit:

Ce que cela ne vous dit pas, cependant, c'est que cela est normalement pris en charge dans le fichier /etc/zshrc_Apple_Terminal, qui est appelé à partir de /etc/zshrc. Il y a plusieurs choses qui peuvent empêcher /etc/zshrc_Apple_Terminald'être appelé ou qui peuvent remplacer ce qu'il essaie de faire:

  • Vous démarrez Zsh avec zsh -dou zsh -f.
  • Vous avez un dossier ${ZDOTDIR:-$HOME}/.zshenvou ${ZDOTDIR:-$HOME}/.zprofiledans lequel vous avez setopt NO_rcsousetopt NO_globalrcs
  • Le paramètre $TERM_PROGRAMn'a pas la valeur Apple_Terminal.
  • Zsh n'a pas d'accès en lecture à /etc/zshrc_Apple_Terminal.
  • Lorsqu'il /etc/zshrc_Apple_Terminalest obtenu, le paramètre $INSIDE_EMACSest différent de zéro.
  • Vous définissez une fonction precmdquelque temps après /etc/zshrc_Apple_Terminal avoir obtenu la source, qui remplace alors celle définie par add-zsh-hook.

Ce que vous pouvez faire pour déboguer:

  • Démarrez un sous-shell sans fichiers de configuration non globaux et voyez si le bogue s'y produit également:
    cd $(mktemp -d); HOME=$PWD ZDOTDIR=$PWD zsh
    
    Si le problème ne se produit pas dans ce sous-shell, cela signifie que le problème se trouve quelque part dans vos fichiers dot non globaux. Vous pouvez obtenir une liste de ces fichiers en faisant
    ls ${ZDOTDIR:-$HOME}/.z(log(in|out)|profile|sh(env|rc))(-^/)
    
  • Redémarrez Zsh avec exec zsh -vxet étudiez la sortie depuis le début pour voir si la /etc/zshrc_Apple_Terminalsource est obtenue et si quelque chose plus tard remplace le precmdhook qu'il configure.