Terminal: Buka tab terminal baru di direktori yang sama dengan tab yang ada (OSC 7?)

Dibuat pada 11 Okt 2019  ·  39Komentar  ·  Sumber: microsoft/terminal

Deskripsi fitur/peningkatan baru

Miliki opsi (atau default) dari pembukaan tab terminal baru di direktori saat ini dari jendela tempat Anda menekan tombol pintas untuk membuka tab baru. Ini adalah cara standar kebanyakan terminal linux bekerja dan paling praktis. Saya sering bekerja di direktori di mana saya perlu meluncurkan beberapa proses terpisah, sulit untuk mengembalikan CD ke direktori setiap kali.

Detail implementasi teknis yang diusulkan (opsional)

Tekan hotkey tab baru, terminal baru kemudian harus berada di folder yang sama dengan yang sebelumnya.

Area-Settings Area-VT In-PR Issue-Feature Product-Conpty Product-Powershell Product-Terminal

Komentar yang paling membantu

Ini adalah fitur penting yang hilang.

Semua 39 komentar

Ada urutan pelarian "standar" (OSC 7 ; URI ST) untuk mengatur keyakinan emulator terminal tentang direktori saat ini. Itu berasal dari macOS Terminal.app, dan kemudian diadopsi oleh beberapa yang lain, termasuk Terminal GNOME dan sejauh yang saya tahu Konsole juga.

Pendekatan lain yang mungkin adalah melakukan beberapa peretasan khusus OS untuk memeriksa keadaan bagian dalam dari proses anak (atau bahkan lebih jauh ke turunan).

Namun kemungkinan lain adalah untuk mencampur keduanya, misalnya pergi ke direktori yang ditetapkan melalui OSC 7 jika pernah dipancarkan, jika tidak, gali prosesnya.

Keuntungan dari pendekatan OSC 7 adalah pintar mengenai kapan harus dan kapan tidak mengikuti proses anak. Misalnya Anda memulai subkulit bersarang lainnya, itu akan menjadi subdirektori dari subkulit itu yang diperhitungkan karena subkulit itu juga memancarkan urutan ini. Namun, luncurkan aplikasi yang secara internal mengubah direktori (misalnya make) dan itu – untungnya – tidak akan menjadi subdir internal make yang digunakan.

Kerugian dari OSC 7 adalah membutuhkan kerjasama dari shell, atau aplikasi lain yang penting.

Saya telah menolak permintaan fitur ini selama proyek ini open-source, dan saya tidak pernah belajar tentang OSC 7. Ini _sangat menarik._

Saya tidak senang merangkak melalui pohon proses untuk menggali CWD proses paling daun, tetapi saya sangat senang untuk mendukung OSC 7.

FYI saya bertanya tentang penanganan OSC 7 untuk Alacritty, yang akhirnya menyebabkan masalah ini dibuat di "Terminal WG" di gitlab: https://gitlab.freedesktop.org/terminal-wg/specifications/issues/20

Tidak banyak pergerakan pada tiket itu, tetapi Anda mungkin tertarik untuk mengikutinya. Terutama jika kalian memiliki pendapat tentang seperti apa spesifikasi "formal" untuk OSC 7 itu.

Jadi sebagai catatan, utas di https://github.com/jwilm/alacritty/pull/2937 memiliki diskusi yang cukup bagus.

Sejujurnya, saya cukup baik menggunakan standar de-facto yang sudah ada, mekanisme OSC 7 ; <URI> ST . Saya tidak begitu yakin perlu ada sesuatu yang lebih formal dari itu.


Tunggu tidak, aku punya pikiran buruk. Katakanlah bash dikonfigurasi untuk memancarkan itu, dan seseorang menjalankan bash di WSL. Apa yang harus kita lakukan ketika seseorang mencoba mengatur direktori kerja ke /home/zadjii ? Bagaimana kita:

  1. beri tahu bahwa ini adalah jalur WSL, bukan jalur Windows
  2. tahu dari distro WSL mana ini berasal?

Apakah kita perlu menambahkan beberapa properti di pihak kita yang menunjukkan "ini adalah distro WSL, bukan Windows exe"? Apa yang terjadi pada pengguna yang tidak menyetelnya, apakah fungsionalitas tab duplikat tidak berfungsi (secara efektif diam-diam)?

Kemudian bagian selanjutnya semakin sulit. Apa yang terjadi ketika perintah ini dikeluarkan melalui SSH? Terminal tidak dapat mengetahui bahwa jalurnya tidak ada di mesin ini lagi, bukan? Bagaimana Terminal.app menangani ini?

Mungkin ini memang membutuhkan lebih banyak spesifikasi

(Mati: Berapa lama sampai saya mencampuradukkan Anda berdua, D Howett dan D Hewitt? :))

Ini adalah fitur penting yang hilang.

Ini harus menjadi opsi konfigurasi untuk perintah yang berbeda. Misalnya, saya ingin ini untuk duplicateTab dan splitPane , tetapi tidak untuk newTab .

urutan pelarian didokumentasikan dalam preferensi mac os terminal.app seperti yang ditunjukkan oleh komentar ini alacritty/alacritty#2937(komentar)

Di macOS, urutan escape sebenarnya ditentukan di Terminal.app > Preferences... > Profiles > Tab69387948-67d69d00-0c95-11ea-881d-375672873fb4

Sebagai catatan, ada perdebatan sengit di https://gitlab.freedesktop.org/terminal-wg/specifications/merge_requests/7 tentang spesifikasi fitur ini. Saya ragu bahwa kami akan mendukung setiap subset fitur ini sampai ada proposal yang benar-benar diterima di sana - kami lebih suka tidak memperkenalkan implementasi lain yang berbeda sampai ada standar yang sebenarnya.

Saya akan merekomendasikan Anda untuk melakukan yang sebaliknya :)

Cukup banyak terminal yang berhasil mengimplementasikan OSC 7, saling menyalin, menghasilkan pengguna yang senang.

Dan ada seseorang di luar sana yang saat ini berpikir itu tidak cukup baik, menurutnya spesifikasi formal diperlukan; muncul dengan konsep yang penuh masalah, dan yang tidak bisa saya mengerti sama sekali, hanya bersedia mendokumentasikan satu dari dua bersaudara. (Catatan: Saya berhenti mengikuti utas itu beberapa hari yang lalu.)

Terminal-WG bukan otoritas formal, dokumennya tidak "resmi", bukan "standar" dengan cara apa pun secara de jure. Itu bahkan tidak memiliki prosedur yang tepat, orang-orang dengan tanggung jawab, hak suara, apa pun; tidak ada yang tahu apa yang diperlukan untuk mendapatkan dokumen "diterima" di sana, apa pun artinya status ini. Ini hanya kumpulan orang-orang acak yang tidak terorganisir yang mencoba menghasilkan sesuatu yang berguna. Jangan biarkan debat tidak resmi yang tertunda itu menghentikan Anda dari menerapkan fitur yang sudah lama terbukti.

Sebagai catatan, ada perdebatan sengit di https://gitlab.freedesktop.org/terminal-wg/specifications/merge_requests/7

saya mengomentarinya tentang masalah yang dirujuk dalam pr itu juga

Bagi siapa saja yang menggunakan Bash (dari Git untuk Windows), solusi sementara yang telah menyelamatkan saya, adalah menyimpan jalur baru setiap kali Anda mengubah dir (alias perintah cd ), lalu cd di sana ketika shell baru dimulai; ini ada di _.bashrc saya:_

if [ "${PWD,,}" = "/c/windows/system32" ]; then
    if [ -f /tmp/pwd ]; then
        cd "$(< /tmp/pwd)"
    else
        cd ~
    fi
fi

cd() {
    command cd "$@"
    pwd > /tmp/pwd
}

Saya sebenarnya menguji apakah saya memulai di System32 (lokasi awal default terminal saya), sehingga saya masih dapat mengetik wt di bilah alamat Explorer dan memulai di tempat lain, tetapi bit ini opsional dan harus disesuaikan jika shell Anda dimulai di folder yang berbeda.

Saya tidak cukup fasih dengan PowerShell atau shell lainnya, tapi saya rasa Anda bisa melakukan hal yang sama.

Ctrl+T akan membuka tab baru dengan shell yang sama dan direktori yang sama.

Tidak semua orang setuju dengan pernyataan itu.

Tidak semua orang setuju dengan pernyataan itu.

Mungkin banyak yang setuju. Begitulah cara kerja aplikasi terminal di sebagian besar desktop Linux.

Setidaknya bisa dijadikan pilihan.

Hai, saya yakin sudah jelas di utas ini bahwa banyak yang setuju bahwa ini adalah fitur yang berguna, dan tim Terminal Windows juga mengetahui hal ini. Dan juga jelas bahwa masalahnya di sini bukanlah mereka tidak ingin membuat ini dapat dikonfigurasi, tetapi mereka harus terlebih dahulu mencari tahu beberapa hal teknis yang mencegah fitur tersebut menjadi mungkin .

Saya mengikuti utas ini untuk mengikuti perkembangan fitur ini dan diskusi terkait, tetapi pesan seperti ini hanya mengacaukan antarmuka dan tidak membantu. Saya ingin meminta orang-orang untuk menahan diri dari memposting pesan yang tidak banyak melakukan selain mengulangi poin yang sudah diketahui.

Setidaknya bisa dijadikan pilihan

Inilah yang tidak saya mengerti tentang kekeraskepalaan. Jika Anda ingin menentang perilaku sebagian besar terminal, keren. Bahkan tidak memberikan pilihan? Di mana logikanya? Bahkan Ctrl+Shit+D yang mewakili menduplikasi tab sebenarnya tidak menduplikasinya karena menempelkan Anda di direktori default. Seperti Anda memiliki fitur duplikat yang bahkan tidak menduplikasi.

Apa "hal teknis" yang mencegah fitur ini menjadi mungkin? Kode sudah ada. Sudah ada tab duplikat di Ctrl+Shift+D. Itu hanya perlu diberi makan direktori kerja saat ini dan Anda memiliki perilaku yang biasa dilakukan kebanyakan orang dan yang diminta orang. Jadi saya bingung bagaimana "hal teknis" ini memblokirnya.

Saya menghargai jenis diskusi ini karena cukup jelas bahwa ada kekeraskepalaan yang terlibat yang berarti jenis diskusi ini diperlukan.

Ah Anda benar, diskusi aslinya hilang, karena tidak pernah terhubung ke utas ini. Saya menyalin konten posting lain (https://github.com/microsoft/terminal/issues/2427#issuecomment-521307534) di sini untuk referensi:


https://github.com/microsoft/terminal/issues/1756#issuecomment -520048598

Hanya menimpali;

_ (profil, direktori kerja, var lingkungan, dll)._

Apa pun tentang _proses aktual_ di ujung yang lain, dalam kasus umum, tidak mungkin untuk ditiru. Proses yang terhubung dapat berupa ssh.exe , yang variabel lingkungan dan direktori kerjanya tidak ada hubungannya dengan lingkungan yang dapat dideteksi dan direktori kerja dari sisi terminal. Hal yang sama sebenarnya, cukup aneh, berlaku untuk WSL. Itu tidak menggunakan "direktori kerja" dan tidak mengekspos variabel lingkungannya ke proses Windows yang tertarik dengan cara apa pun.

Powershell bahkan tidak _set_ direktori kerja saat ini, jadi direktorinya juga tidak dapat dideteksi (!).

https://github.com/microsoft/terminal/issues/2315#issuecomment -519317472

Ini adalah salah satu hal yang tidak mungkin dalam kasus umum tetapi _secara teknis mungkin_. Ada banyak seluk-beluk di sini, seperti:

powershell
cd d:\users

baik, PowerShell bukanlah proses pertama yang kami luncurkan. kami akan mengabaikan jalur d:\users

(in powershell)
cd d:\users

kami akan mengabaikan d:\users karena powershell _tidak benar-benar mengatur direktori kerja saat ini_ (!!)

Jika "shell" Anda adalah ssh [email protected] (di mana kami secara ketat mendefinisikan shell sebagai "proses pertama yang dihasilkan Terminal atas nama Anda"), direktori kerjanya akan selalu menjadi C:\windows\system32 terlepas dari apa direktori kerja jarak jauh adalah.

Saya lebih suka tidak menyediakan fitur daripada menyediakan fitur dengan begitu banyak peringatan sehingga mereka akan mengisi halaman dokumentasi. ️ maaf.

https://github.com/microsoft/terminal/issues/1536#issuecomment -519107586

Tidak, karena itu hampir tidak mungkin dilakukan secara umum. Bagaimana kita menduplikasi instance vim misalnya? Bagaimana jika proses latar depan telah membuka semacam file untuk akses eksklusif - bagaimana kita bisa menduplikasi proses itu?

Jika ada cara untuk melakukan ini dengan aman dan secara umum saya siap untuk solusi teknis yang diusulkan, tetapi saya tidak berpikir itu adalah sesuatu yang mungkin, jadi saya tidak akan menyelidikinya.


Bahkan jika Powershell _did_ mengatur direktori kerja, kami masih tidak yakin bahwa _secara teknis_ mungkin pada Windows untuk mendapatkan CWD dari proses lain. Jadi itulah hal "teknis" yang mencegahnya bekerja. Saya ingin menambahkan ini sebagai pengaturan. Tapi pasti masih ada pertanyaan teknis yang perlu dijawab.

Solusi yang sedang dibahas di utas ini melibatkan penambahan dukungan untuk urutan VT lain ke Terminal, yang dapat dipancarkan _shell_ untuk memberi petunjuk Terminal ke jalur apa itu. Urutan VT ini tidak didefinisikan dengan sangat baik, dan memiliki kasus tepi yang masih perlu diselesaikan. Yaitu:

  • Apa yang terjadi ketika shell WSL mengatakan "CWD saya adalah /home/foo ? Tidak ada cara bagi Terminal untuk mengetahui bahwa jalur tersebut adalah jalur WSL, atau bahkan distro mana ia berada, jadi menduplikasi tab ini kemungkinan akan berakhir di C:\home\foo (jika ada)
  • Apa yang terjadi ketika Anda terhubung ke komputer lain melalui SSH? Terminal tidak akan dapat membedakan jalur tersebut dari jalur di mesin lokal Anda sendiri, jadi sekali lagi, menduplikasi jalur itu akan menjadi perilaku yang salah
  • Setiap pengguna perlu menyesuaikan prompt mereka untuk berbagai shell _manual_ untuk bekerja sama dengan perilaku ini. Ini bukan pemblokir, tetapi ini berarti ini akan menjadi pengaturan yang tidak akan berhasil begitu saja.

Anda mencoba untuk menduplikasi proses yang sedang berjalan? Mari kita lihat Linux misalnya. Jika Anda menjalankan SSH di terminal Anda dan membuka tab baru, tab baru tidak membuka koneksi SSH dan menjelajah ke tempat Anda berada di koneksi SSH. Ini membuka tab baru di mana Anda berada di mesin Anda. Bahkan jika prosesnya lokal dan bukan SSH, prosesnya tidak berjalan. Yang diduplikasi hanyalah tab, bukan proses yang berjalan.

Sepertinya ini terlalu rumit. Anda tidak menduplikasi VIM atau SSH atau aplikasi lain yang sedang berjalan. Anda menduplikasi terminal dan itu menjawab kasus Edge:

  • Untuk WSL Anda tidak menjelajahi lokal Anda. Jika pengembaliannya adalah /home/foo, itulah lokasinya. Jika lokasinya adalah C:\home\foo itu akan mengembalikan /mnt/c/home/foo.
  • SSH adalah sebuah proses. Ini berjalan di dalam cangkang. Anda tidak menduplikasi proses. Terminal lain tidak. Anda menduplikasi tab.
  • Saya tidak yakin apa yang harus disesuaikan oleh pengguna, tetapi sejak kapan penyesuaian menjadi masalah?

Tidak ada yang salah dengan menduplikasi proses. Saya yakin beberapa akan menyukainya. Hanya saja akan ada opsi lain di atas opsi untuk menduplikasi tab. Seharusnya tidak menjadi penghalang jalan. Itu ekstra dan opsional.

@PandaClone mungkin mengejutkan Anda mengetahui bahwa _some people menetapkan ssh.exe sebagai hal pertama yang diluncurkan profil, tanpa menjalankannya dari shell_.

Seperti tidak, sebenarnya tidak ada cara bagi Terminal untuk menginterogasi wsl.exe , aplikasi pembungkus yang berkomunikasi dengan proses Linux, untuk membuatnya mengatakan apa direktori kerja saat ini dari proses pertama dalam prosesnya pohon.
Karena tidak menggunakan infrastruktur direktori kerja windows, yang menyimpan WD di blok lingkungan proses, hanya menggunakan API Windows lama yang membosankan _tidak cukup untuk mengetahui apa direktori kerjanya._

Ini adalah masalah teknis yang harus kita selesaikan. Jika tidak, kami menulis fitur yang hanya berfungsi untuk, seperti, 25% orang.

Jika terbukti mudah: kami selalu bersedia menerima kontribusi komunitas.

  • Untuk WSL Anda tidak menjelajahi lokal Anda. Jika pengembaliannya adalah /home/foo, itulah lokasinya. Jika lokasinya adalah C:\home\foo itu akan mengembalikan /mnt/c/home/foo.

Ah tapi lihat, cara fitur ini bekerja seperti yang ditentukan, Terminal tidak tahu siapa atau apa yang mengatakan "Direktori kerja saat ini adalah /home/foo ". Ini bisa menjadi cmd.exe - lalu ya, pengguna menginginkan C:\home\foo . Ini bisa jadi distro Ubuntu mereka, atau distro Fedora mereka, atau ini bisa ssh terhubung ke centos atau kemungkinan lainnya. Yang didapat terminal hanyalah string yang mengatakan "ini adalah direktori kerja sekarang".

  • Saya tidak yakin apa yang harus disesuaikan oleh pengguna, tetapi sejak kapan penyesuaian menjadi masalah?

Hampir setiap shell yang dijalankan pengguna perlu dikonfigurasi secara manual untuk mengaktifkan pengiriman urutan ini. Untuk pengguna cmd , mereka harus mengonfigurasi %PROMPT% secara manual untuk menyertakan urutan $e]7;$P$e . bash pengguna perlu mengaturnya di PS1 . PowerShell pasti akan memiliki cara lain untuk melakukannya. Masalah mendasar di sini adalah bahwa shell _don't_ memancarkan urutan ini secara default.

SSH bukan cangkang. Anda dapat mengatur profil Anda untuk menjalankannya terlebih dahulu, tetapi masih dijalankan dari shell. Hanya saja profil Anda sedang diinstruksikan untuk segera menjalankan aplikasi. Aplikasi itu bisa apa saja. Tidak harus SSH. Anda dapat menginstruksikan profil Anda untuk menjalankan shell lain jika Anda mau.

Dan bahkan jika tidak ada terminal, apa masalahnya? Selalu ada pengecualian. Default ke direktori home ketika tidak ada direktori untuk pergi baik-baik saja. Itu bukan masalah di mana Anda hanya "oh ini tidak bisa dilakukan".

Juga, ini adalah fitur yang standar di sebagian besar terminal dengan tab. Jalankan distro Linux apa pun yang memiliki cita rasa terminalnya sendiri dan semuanya menunjukkan perilaku membuka tab baru ini. Ini bukan fitur yang akan menjadi keajaiban untuk Terminal Windows. Ini adalah fitur standar.

Terminal tidak hanya menelurkan cangkang. Ini benar-benar memanggil CreateProcess pada hal yang Anda berikan di konfigurasi profil. SSH tidak berjalan di, atau dimunculkan oleh, shell.

Dengar, kami berdebat tentang kemungkinan fitur ini. Bisakah kita setuju bahwa _kita menginginkan ini, semua orang menginginkannya, dan jika kita memiliki cara yang masuk akal yang berhasil di sebagian besar kasus penggunaan yang dipedulikan pengguna_ bahwa kita pasti sudah melakukannya? Saya mencoba untuk mengurangi berapa kali kita harus mengatakan "itu tidak bisa dilakukan" dengan beberapa perencanaan dan pekerjaan desain di muka.

Ini bukan keajaiban yang inovatif, ini hanya rumit oleh model proses Windows dan WSL dan kami pikir itu akan gagal dalam beberapa keadaan. Tidak ada yang mengatakan lebih dari itu.

  • Untuk WSL Anda tidak menjelajahi lokal Anda. Jika pengembaliannya adalah /home/foo, itulah lokasinya. Jika lokasinya adalah C:\home\foo itu akan mengembalikan /mnt/c/home/foo.

Ah tapi lihat, cara fitur ini bekerja seperti yang ditentukan, Terminal tidak tahu siapa atau apa yang mengatakan "Direktori kerja saat ini adalah /home/foo ". Ini bisa menjadi cmd.exe - lalu ya, pengguna menginginkan C:\home\foo . Ini bisa jadi distro Ubuntu mereka, atau distro Fedora mereka, atau ini bisa ssh terhubung ke centos atau kemungkinan lainnya. Yang didapat terminal hanyalah string yang mengatakan "ini adalah direktori kerja sekarang".

Bagaimana ia tidak tahu siapa atau apa yang dikatakan direktori kerja saat ini? Kaulah yang memintanya. Anda tahu apakah itu Command Prompt atau WSL atau PowerShell. Anda tahu dari mana asalnya sehingga Anda tahu cara memformat lokasi.

  • Saya tidak yakin apa yang harus disesuaikan oleh pengguna, tetapi sejak kapan penyesuaian menjadi masalah?

Hampir setiap shell yang dijalankan pengguna perlu dikonfigurasi secara manual untuk mengaktifkan pengiriman urutan ini. Untuk pengguna cmd , mereka harus mengonfigurasi %PROMPT% secara manual untuk menyertakan urutan $e]7;$P$e . bash pengguna perlu mengaturnya di PS1 . PowerShell pasti akan memiliki cara lain untuk melakukannya. Masalah mendasar di sini adalah bahwa shell _don't_ memancarkan urutan ini secara default.

Bagaimana itu masalah? Ini tidak akan menjadi aplikasi pertama yang memerlukan konfigurasi dan tidak akan menjadi yang terakhir. Tidak semuanya plug and play dan itu bisa dimengerti. Jika satu-satunya cara untuk membuat ini berfungsi adalah agar pengguna memerlukan konfigurasi, bagaimana titik pemberhentian itu?

Apa yang terjadi ketika shell WSL mengatakan "CWD saya adalah /home/foo? Tidak ada cara bagi Terminal untuk mengetahui bahwa jalur tersebut adalah jalur WSL, atau bahkan milik distro mana, jadi menduplikasi tab ini kemungkinan akan berakhir di C: \home\foo (jika ada)

Saya hanya dapat benar-benar berbicara untuk diri saya sendiri, tetapi jika saya membuka tab menggunakan satu profil, menavigasi ke suatu tempat tertentu, dan kemudian membuka tab baru di profil yang berbeda, itu tidak akan mengejutkan atau mengecewakan saya sedikit pun jika direktori yang berfungsi tidak carry over, dan default digunakan sebagai gantinya.

Saya pikir Anda mengerti bahwa kebanyakan orang yang meminta fitur ini tidak memiliki perilaku di terminal seperti yang disertakan dengan GNOME dan macOS. Terminal-terminal itu tidak harus berurusan dengan kerumitan yang sama seperti ini, tetapi pada saat yang sama, saya tidak berpikir ada orang yang mengharapkan Anda untuk mencoba dan dengan cerdas menangani kasus-kasus Edge yang sama sekali tidak ada dalam perangkat lunak mereka. menggunakan sebagai titik referensi.

Kedengarannya seperti tugas yang cukup sulit bahkan jika Anda mengurangi cakupannya. Saya harap dapat ditemukan cara untuk menyertakan beberapa versi fitur ini, karena ini adalah penghemat waktu yang bagus.

Bisakah kasus penggunaan ini ditangani oleh #4472 dalam jangka pendek? Saya pribadi akan puas dengan beberapa varian cmd.exe /c "wt.exe" new-tab -p "Ubuntu-20.04" -d $(pwd) (mungkin terikat ke makro Bash) yang akan membuka tab baru di jendela yang paling baru difokuskan (yang hampir pasti merupakan jendela tempat saya mengetik perintah ).

Akan mengambil risiko dan mengatakan bahwa menerapkan deteksi untuk direktori proses root saat ini lebih mudah daripada menerapkan remote commandline dan IPC untuk membuat WT membuka tab di jendela yang sama :smile:

wow, saya baru saja datang ke sini dan menyadari bahwa sepertinya perlu perjalanan panjang :)

Kami menemukan bahwa di terminal windows kami dapat membagi shell windows dengan menekan pintasan alt+shift+D, tetapi tidak disetel ke direktori yang sama

Saya datang dengan solusi: ubah direktori awal.

Masukkan fungsi ini ke $PROFILE (pastikan untuk menyesuaikan $path )

function sd {
    $path = 'C:\Users\Admin\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json'
     ((Get-Content -path $path) -replace '"startingDirectory":.*', ("`"startingDirectory`": `"$pwd`"") -replace "\\", "\\") | Set-Content -Path $path
}

.. dan Anda akan dapat membuka tab baru di direktori yang sama hampir tanpa kesulitan, pastikan untuk mengetik sd sebelum membuka tab baru.

Tentu saja, kekurangannya adalah startingDirectory berubah setiap kali fungsi dipanggil.

Sebaiknya gunakan pendekatan ini dengan key re-mapper, sehingga ketika Ctrl+T ditekan, fungsi dipanggil secara otomatis, dan ketika Ctrl+F4 ditekan startingDirectory dikembalikan kembali ke nilai aslinya.

Solusi alternatif

Di dalam profil apa pun yang Anda gunakan misalnya profile.sh atau .zshrc buat file ~/paths.sh yang terletak di dalam direktori $HOME Anda. Jalur akan diperbarui setiap kali Anda memanggil setCWD

Solusi ini mengesampingkan startingDirectory sepenuhnya. Setiap kali Anda menelurkan terminal baru, panggil setCWD sebelum menelurkan terminal dan itu akan selalu dimulai secara langsung yang terakhir Anda panggil setCWD .

Perhatikan bahwa saya melakukan ini dalam .zshrc

Kode:

source ~/paths.sh

if [[ $SAVED_PWD != $PWD  ]]
then
  cd $SAVED_PWD
fi

function setCWD(){
  echo export SAVED_PWD=$(pwd) > ~/paths.sh
}

Anda mungkin perlu membuat file awal, jadi panggil saja setCWD .

BTW jika Anda menggunakan autohotkey, inilah skrip yang bagus dan cepat untuk membuat semuanya berfungsi

Buat file bernama windows-terminal.ahk lalu paste kode ini di bawah ini. Jalankan file dan Anda sudah siap. (Saya sarankan memindahkan file ini ke bagian startup sehingga ketika Anda me-restart fungsi ini diterapkan kembali.

#IfWinActive, ahk_exe WindowsTerminal.exe
  ^t::
    Send, setCWD {enter}
    Send, ^t

Kawan, ini sangat penting untuk produktivitas, hampir seperti di atas segalanya. Tolong perbaiki ini, saya dan teman-teman saya akan dengan senang hati meninggalkan semua emulator terminal inferior lainnya.

Sepertinya upaya untuk 'menstandarkan' OSC 7 di terminal-wg telah terhenti .

Apakah masih ada minat untuk mengimplementasikan OSC 7 pada dasarnya seperti yang ada di Terminal.app ?

Mengingat itu, kami akan memiliki "host dan CWD saat ini" untuk terminal tertentu, yang hanya membahas diskusi 'peretasan proses'; dan kemudian dapat memutuskan/menerapkan perilaku pengguna untuk menggunakan informasi itu, misalnya,:

  • perintah "Tab baru di direktori saat ini";
  • membuat "split" melakukan ini secara default;
  • sesuatu yang ajaib untuk membedakan sesi WSL dari sesi Windows (jika mereka bahkan melaporkan nama host yang sama? Saya belum melihat...);
  • opsi konfigurasi untuk "menekan OSC 7" pada profil di mana Anda _tahu_ itu akan mengirim OSC 7 yang tampak valid yang tidak ingin Anda gunakan, seperti sshing ke mesin jarak jauh yang mengklaim nama host yang sama dengan host Windows Anda;
  • mengekspos nilai menjadi sesuatu yang dapat Anda tempel di baris perintah, sehingga sesi ssh atau wsl Anda _can_ muncul di direktori kerja yang sama dengan yang baru saja Anda duplikat.

Diskusi ini sangat terfokus pada bagian pertama (mendapatkan CWD saat ini) tetapi saya menduga bagian kedua adalah yang perlu lebih dipertimbangkan, berdasarkan komentar yang ada selama ini di atas. Bahkan untuk daftar ide itu, saya yakin ada keberatan yang masuk akal untuk _setiap satu_ dari mereka.

Bagi yang masih penasaran dengan topik ini, saya membuat PR awal di #7668 . Ini adalah ping yang ramah. Saya sangat ingin mendengar dari semua orang tentang hal itu.

Apa gunanya banyak tab, terutama duplikasi cepat, jika mereka tidak mewarisi direktori saat ini? Ini adalah fitur yang sangat penting. Mengapa tidak menambahkan solusi "retas" untuk saat ini? Saya benar-benar tidak melihat masalah mengekstraksi CWD dari proses di Windows jika itu meningkatkan produktivitas untuk semua pengguna, mengingat Windows sendiri telah berisi beberapa solusi seperti itu selama lebih dari 20 tahun.

Saya tidak mengerti mengapa fitur ini bukan default. Saya benar-benar bingung mengapa tidak ada cara untuk mengaktifkan fitur ini. Ini adalah pencela pengalaman pengguna terbesar yang saya miliki dengan Terminal: dari perspektif kebijaksanaan saya lebih baik dilayani dengan tidak menggunakan Terminal dan alih-alih menggunakan Explorer dan mengklik kanan di direktori Saya ingin membuka shell dan memilih "Buka jendela PowerShell di sini" karena itu lebih cepat daripada memukul alt+shift+d kemudian harus cd ke tempat yang tepat.

Terminal menambahkan banyak kualitas hidup untuk pengembang Windows. Fitur ini akan menjadi lompatan besar bagi saya (dan saya mencurigai orang lain). Saya akan menambahkan suara saya dalam mengadvokasi fitur ini menjadi prioritas utama.

Saya tidak mengerti mengapa fitur ini bukan default.

Saya tidak mengerti mengapa orang tidak mau repot membaca semua investigasi yang telah dilakukan di utas ini, di #7668, #8214, #8166, dan utas terkait lainnya, untuk memahami mengapa ini sebenarnya masalah yang sulit untuk menyelesaikan. Ternyata Anda tidak bisa hanya meminta aplikasi klien memancarkan jalurnya - karena Terminal tidak akan _tentu_ tahu apakah itu jalur Windows atau WSL atau cygwin.

Untung kami memiliki banyak kontributor berbakat yang bekerja keras untuk menemukan cara yang tepat dalam menerapkan dukungan untuk fitur ini, tanpa merusak kompatibilitas mundur untuk aplikasi lain. Kami _baru saja minggu ini_ menemukan solusi yang kami senangi, tidak lama lagi akan diterapkan.

Terima kasih @zadjii-msft !

Saat membaca ulang komentar saya, saya menyadari bahwa komentar itu sangat menuduh dan itu bukan maksud saya. Saya datang ke sini untuk mengatakan ini:

Terminal menambahkan banyak kualitas hidup untuk pengembang Windows. Fitur ini akan menjadi lompatan besar bagi saya (dan saya mencurigai orang lain). Saya akan menambahkan suara saya dalam mengadvokasi fitur ini menjadi prioritas utama.

Dan pengalaman pengguna saya sejauh ini adalah:

Saya tidak mengerti mengapa fitur ini bukan default. Saya benar-benar bingung mengapa tidak ada cara untuk mengaktifkan fitur ini. Ini adalah pengalaman pengguna terbesar... dll

Saya mungkin harus meletakkan "sebagai pengguna," di awal paragraf pertama saya.

Saya minta maaf atas segala pelanggaran yang saya berikan.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat