Perché Terminal non rispetta le preferenze?

Dec 10 2020

Qualche volta nell'ultima settimana il mio terminale ha smesso di onorare l'impostazione "Nuove schede aperte con: stessa directory di lavoro". Il test con "Nuove finestre ..." ha dato lo stesso risultato.

La mia shell è zsh.

Sono stato in grado di farlo funzionare seguendo una risposta qui da 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
}

Ma: non so come avrei potuto determinarlo da solo, o come avrei potuto eseguire il debug di un problema simile .

Eventuali suggerimenti o trucchi per capire quali sono questi passaggi iniziali di Terminal sarebbero molto apprezzati.

Cose che non hanno funzionato:

  • Commutazione delle impostazioni per Nuova scheda o Nuova finestra
  • Rinominare o l'aggiunta returnalla prima linea di .zshrc, .zsh*file
  • Tutti i suggerimenti nella scheda Apri nuovo terminale nella directory di lavoro corrente non funzionano

Altre informazioni potenzialmente utili:

  • Le impostazioni "Stesso profilo" / "Profilo predefinito" vengono rispettate quando vengono modificate
  • Aggiungendo pwdcome prima riga di .zshrcspettacoli la directory è già/home/<myuser>
  • Ho installato e disinstallato alcuni strumenti e progetti che coinvolgono nixrecentemente (incluso nix-darwin)

Metadati:

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

Risposte

3 MarlonRichert Dec 28 2020 at 03:43

Se fai clic su "Sequenza di escape ..." in quella schermata, vedrai quanto segue:

Ciò che questo non ti dice, però, è che questo è normalmente curato nel file /etc/zshrc_Apple_Terminal, che viene chiamato da /etc/zshrc. Ci sono diverse cose che possono impedire /etc/zshrc_Apple_Terminaldi essere chiamato o che possono sovrascrivere ciò che tenta di fare:

  • Stai iniziando Zsh con zsh -do zsh -f.
  • Hai un file ${ZDOTDIR:-$HOME}/.zshenvo ${ZDOTDIR:-$HOME}/.zprofilein cui hai setopt NO_rcsosetopt NO_globalrcs
  • Il parametro $TERM_PROGRAMnon ha il valore Apple_Terminal.
  • Zsh non ha accesso in lettura a /etc/zshrc_Apple_Terminal.
  • Quando /etc/zshrc_Apple_Terminalviene acquisito, il parametro $INSIDE_EMACSè diverso da zero.
  • Si definisce una funzione precmdqualche tempo dopo che /etc/zshrc_Apple_Terminal viene originata, che quindi sovrascrive quella definita da add-zsh-hook.

Cosa puoi fare per eseguire il debug:

  • Avvia una subshell senza file di configurazione non globali e verifica se il bug si verifica anche lì:
    cd $(mktemp -d); HOME=$PWD ZDOTDIR=$PWD zsh
    
    Se il problema non si verifica in questa subshell, significa che il problema è da qualche parte nei tuoi dotfile non globali. Puoi ottenere un elenco di questi file facendo
    ls ${ZDOTDIR:-$HOME}/.z(log(in|out)|profile|sh(env|rc))(-^/)
    
  • Riavvia Zsh con exec zsh -vxe studia l'output dall'inizio per vedere se /etc/zshrc_Apple_Terminalviene prelevato e se qualcosa in seguito sovrascrive l' precmdhook impostato.