Mengapa Terminal tidak menghormati preferensi?

Dec 10 2020

Suatu saat di minggu lalu Terminal saya berhenti menerima pengaturan "Tab baru dibuka dengan: Direktori Kerja yang Sama". Pengujian dengan "Jendela baru ..." memberikan hasil yang sama.

Shell saya adalah zsh.

Saya bisa mendapatkan ini untuk bekerja dengan mengikuti jawaban di sini dari 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
}

Tapi: Saya tidak tahu bagaimana saya bisa menentukan ini untuk diri saya sendiri, atau bagaimana saya bisa men-debug masalah serupa .

Tip atau trik apa pun untuk mengetahui langkah-langkah awal Terminal akan sangat dihargai.

Hal-hal yang tidak berhasil:

  • Beralih setelan untuk Tab Baru atau Jendela Baru
  • Mengganti nama atau menambahkan returndi baris pertama .zshrc, .zsh*file
  • Semua saran di Buka tab Terminal baru di direktori kerja saat ini tidak berfungsi

Info lain yang mungkin berguna:

  • Pengaturan "Profil Sama" / "Profil Default" akan diterapkan saat diubah
  • Menambahkan pwdsebagai baris pertama .zshrcmenunjukkan direktori sudah/home/<myuser>
  • Saya telah menginstal dan menghapus beberapa alat dan proyek yang melibatkan nixbaru - baru ini (termasuk nix-darwin)

Metadata:

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

Jawaban

3 MarlonRichert Dec 28 2020 at 03:43

Jika Anda mengklik "Escape sequence ..." di screenshot itu, Anda akan melihat yang berikut ini:

Namun, hal ini tidak memberi tahu Anda bahwa ini biasanya ditangani dalam file /etc/zshrc_Apple_Terminal, yang dipanggil dari /etc/zshrc. Ada beberapa hal yang dapat mencegah /etc/zshrc_Apple_Terminalpemanggilan atau yang dapat mengesampingkan apa yang coba dilakukannya:

  • Anda memulai Zsh dengan zsh -datau zsh -f.
  • Anda memiliki file ${ZDOTDIR:-$HOME}/.zshenvatau ${ZDOTDIR:-$HOME}/.zprofiledi mana Anda memiliki setopt NO_rcsatausetopt NO_globalrcs
  • Parameter $TERM_PROGRAMtidak memiliki nilai Apple_Terminal.
  • Zsh tidak memiliki akses baca ke /etc/zshrc_Apple_Terminal.
  • Saat /etc/zshrc_Apple_Terminalbersumber, parameternya $INSIDE_EMACSbukan nol.
  • Anda mendefinisikan fungsi precmdbeberapa saat setelah /etc/zshrc_Apple_Terminal bersumber, yang kemudian menggantikan fungsi yang ditentukan oleh add-zsh-hook.

Apa yang dapat Anda lakukan untuk men-debug:

  • Mulai subkulit tanpa file konfigurasi non-global dan lihat apakah bug juga terjadi di sana:
    cd $(mktemp -d); HOME=$PWD ZDOTDIR=$PWD zsh
    
    Jika masalah tidak terjadi di subkulit ini, itu berarti masalahnya ada di suatu tempat di dotfiles non-global Anda. Anda bisa mendapatkan daftar file ini dengan melakukan
    ls ${ZDOTDIR:-$HOME}/.z(log(in|out)|profile|sh(env|rc))(-^/)
    
  • Mulai ulang Zsh dengan exec zsh -vxdan pelajari output dari awal untuk melihat apakah /etc/zshrc_Apple_Terminalbersumber dan apakah nanti ada yang menimpa precmdpengait yang dibuatnya.