Dlaczego Terminal nie przestrzega preferencji?

Dec 10 2020

Gdzieś w zeszłym tygodniu mój terminal przestał przestrzegać ustawienia „Otwieraj nowe karty z: tym samym katalogiem roboczym”. Testowanie z "Nowe okna ..." dało ten sam wynik.

Moja powłoka to zsh.

Udało mi się to uruchomić, podążając za odpowiedzią tutaj od Dana Rosenstarka 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
}

Ale: nie wiem, jak mogłem to ustalić samodzielnie lub jak mogłem zdebugować podobny problem .

Wszelkie wskazówki lub sztuczki, aby dowiedzieć się, jakie są te początkowe kroki Terminalu, będą bardzo mile widziane.

Rzeczy, które nie zadziałały:

  • Przełączanie ustawień nowej karty lub nowego okna
  • Zmiana nazwy lub dodanie returnw pierwszej linii .zshrc, .zsh*pliki
  • Wszystkie sugestie na karcie Otwórz nowy terminal w bieżącym katalogu roboczym nie działają

Inne potencjalnie przydatne informacje:

  • Ustawienia „Ten sam profil” / „Profil domyślny” są uwzględniane po zmianie
  • Dodanie pwdjako pierwsza linia .zshrcpokazuje, że katalog już istnieje/home/<myuser>
  • Zainstalowałem i odinstalowałem niektóre narzędzia i projekty dotyczące nixostatnio (w tym nix-darwin)

Metadane:

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

Odpowiedzi

3 MarlonRichert Dec 28 2020 at 03:43

Jeśli klikniesz „Sekwencję ucieczki…” na tym zrzucie ekranu, zobaczysz:

Nie mówi to jednak, że normalnie zajmuje się tym plik /etc/zshrc_Apple_Terminal, który jest wywoływany from /etc/zshrc. Jest kilka rzeczy, które mogą zapobiec /etc/zshrc_Apple_Terminalwywołaniu lub które mogą zastąpić to, co próbuje zrobić:

  • Rozpoczynasz Zsh z zsh -dlub zsh -f.
  • Masz plik ${ZDOTDIR:-$HOME}/.zshenvlub ${ZDOTDIR:-$HOME}/.zprofilew którym masz setopt NO_rcslubsetopt NO_globalrcs
  • Parametr $TERM_PROGRAMnie ma wartości Apple_Terminal.
  • Zsh nie ma dostępu do odczytu /etc/zshrc_Apple_Terminal.
  • Gdy /etc/zshrc_Apple_Terminaljest pozyskiwany, parametr $INSIDE_EMACSjest różny od zera.
  • Definiujesz funkcję precmdjakiś czas po /etc/zshrc_Apple_Terminal pobraniu źródła, która następnie zastępuje funkcję zdefiniowaną przez add-zsh-hook.

Co możesz zrobić, aby debugować:

  • Uruchom podpowłokę bez nieglobalnych plików konfiguracyjnych i zobacz, czy błąd też tam występuje:
    cd $(mktemp -d); HOME=$PWD ZDOTDIR=$PWD zsh
    
    Jeśli problem nie występuje w tej podpowłoce, oznacza to, że problem występuje gdzieś w Twoich nieglobalnych plikach dot. Możesz uzyskać listę tych plików, wykonując
    ls ${ZDOTDIR:-$HOME}/.z(log(in|out)|profile|sh(env|rc))(-^/)
    
  • Zrestartuj Zsh za pomocą exec zsh -vxi przestudiuj dane wyjściowe od początku, aby zobaczyć, czy /etc/zshrc_Apple_Terminaljest pozyskiwane i czy coś później zastępuje precmdpodłączenie, które ustawia.