Por que o Terminal não respeita as preferências?

Dec 10 2020

Em algum momento da semana passada, meu Terminal parou de respeitar a configuração "Novas guias abertas com: Mesmo diretório de trabalho". O teste com "Novas janelas ..." deu o mesmo resultado.

Meu shell é zsh.

Consegui fazer isso funcionar seguindo uma resposta aqui 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
}

Mas: Eu não sei como eu poderia ter determinado isso por mim mesmo, ou como poderia ter depurado um problema semelhante .

Quaisquer dicas ou truques para descobrir quais são essas etapas iniciais do Terminal seriam muito apreciados.

Coisas que não funcionaram:

  • Alternando configurações para nova guia ou nova janela
  • Renomear ou adicionar returnna primeira linha de .zshrc, .zsh*arquivos
  • Todas as sugestões em Abrir nova guia Terminal no diretório de trabalho atual não funcionam

Outras informações potencialmente úteis:

  • As configurações de "Mesmo perfil" / "Perfil padrão" são respeitadas quando alteradas
  • Adicionando pwdcomo a primeira linha de .zshrcmostra o diretório já está/home/<myuser>
  • Eu instalei e desinstalei algumas ferramentas e projetos envolvendo nixrecentemente (incluindo nix-darwin)

Metadados:

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

Respostas

3 MarlonRichert Dec 28 2020 at 03:43

Se você clicar em "Sequência de escape ..." nessa captura de tela, verá o seguinte:

O que isso não indica, porém, é que normalmente isso é feito no arquivo /etc/zshrc_Apple_Terminal, que é chamado de /etc/zshrc. Existem várias coisas que podem impedir /etc/zshrc_Apple_Terminalde ser chamado ou que podem substituir o que ele tenta fazer:

  • Você está iniciando o Zsh com zsh -dou zsh -f.
  • Você tem um arquivo ${ZDOTDIR:-$HOME}/.zshenvou ${ZDOTDIR:-$HOME}/.zprofileno qual você tem setopt NO_rcsousetopt NO_globalrcs
  • O parâmetro $TERM_PROGRAMnão possui o valor Apple_Terminal.
  • Zsh não tem acesso de leitura a /etc/zshrc_Apple_Terminal.
  • Quando /etc/zshrc_Apple_Terminalobtém fonte, o parâmetro $INSIDE_EMACSé diferente de zero.
  • Você define uma função precmdalgum tempo depois de /etc/zshrc_Apple_Terminal obter a fonte, que então substitui aquela definida por add-zsh-hook.

O que você pode fazer para depurar:

  • Inicie um subshell sem arquivos de configuração não globais e veja se o bug também acontece lá:
    cd $(mktemp -d); HOME=$PWD ZDOTDIR=$PWD zsh
    
    Se o problema não ocorrer neste subshell, isso significa que o problema está em algum lugar em seus dotfiles não globais. Você pode obter uma lista desses arquivos fazendo
    ls ${ZDOTDIR:-$HOME}/.z(log(in|out)|profile|sh(env|rc))(-^/)
    
  • Reinicie o Zsh com exec zsh -vxe estude a saída desde o início para ver se /etc/zshrc_Apple_Terminalobtém origem e se algo mais tarde substitui o precmdgancho que ele configurou.