Terminal: افتح علامة تبويب المحطة الطرفية الجديدة في نفس الدليل مثل علامة التبويب الحالية (OSC 7؟)

تم إنشاؤها على ١١ أكتوبر ٢٠١٩  ·  39تعليقات  ·  مصدر: microsoft/terminal

وصف الميزة الجديدة / التحسين

احصل على خيار (أو افتراضي) لفتح علامة تبويب طرفية جديدة في الدليل الحالي للنافذة التي تضغط فيها على مفتاح الاختصار لفتح علامة تبويب جديدة. هذه هي الطريقة القياسية التي تعمل بها معظم محطات لينكس وهي سهلة الاستخدام. غالبًا ما أعمل في دليل حيث أحتاج إلى تشغيل عدة عمليات منفصلة ، وهو ألم لعودة القرص المضغوط إلى الدليل في كل مرة.

تفاصيل التنفيذ الفني المقترحة (اختياري)

اضغط على مفتاح التشغيل السريع لعلامة التبويب الجديدة ، يجب أن تكون المحطة الطرفية الجديدة في نفس المجلد مثل السابق.

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

التعليق الأكثر فائدة

هذه ميزة حاسمة مفقودة.

ال 39 كومينتر

هناك تسلسل هروب "قياسي" (OSC 7 ؛ URI ST) لتعيين اعتقاد محاكي المحطة الطرفية بالدليل الحالي. ينشأ من macOS Terminal.app ، وتم اعتماده لاحقًا من قبل بعض الأجهزة الأخرى ، بما في ذلك GNOME Terminal وبقدر ما أعرف Konsole أيضًا.

هناك طريقة أخرى محتملة تتمثل في القيام ببعض الاختراقات الخاصة بنظام التشغيل لفحص الحالة الداخلية لعملية الطفل (أو حتى الوصول إلى المتسللين).

هناك إمكانية أخرى وهي مزج الاثنين ، على سبيل المثال ، انتقل إلى الدليل الذي تم تعيينه عبر OSC 7 إذا تم إصداره ، وإلا قم بالبحث في العملية.

تتمثل ميزة نهج OSC 7 في أنه ذكي فيما يتعلق بوقت ووقت عدم متابعة عملية الطفل. على سبيل المثال ، إذا قمت ببدء مجموعة فرعية متداخلة أخرى ، فسيكون هذا هو الدليل الفرعي لتلك المجموعة الفرعية التي يتم أخذها في الاعتبار لأن هذا المجلد يصدر أيضًا هذا التسلسل. ومع ذلك ، قم بتشغيل تطبيق يغير الدليل داخليًا (مثل make) ولن يكون - لحسن الحظ - هو المجلد الفرعي الداخلي الذي يتم استخدامه.

عيب OSC 7 هو أنه يتطلب تعاونًا من shell أو التطبيقات الأخرى المهمة.

لقد كنت أرفض طلب الميزة هذا طالما كان هذا المشروع مفتوح المصدر ، ولم أعرف مطلقًا عن OSC 7. هذا _ مثير جدًا ._

لست سعيدًا بالزحف عبر شجرة العملية لاستخراج CWD لعملية أقصى الأوراق ، لكنني سعيد جدًا بدعم OSC 7.

لمعلوماتك ، سألت عن معالجة OSC 7 لـ Alacritty ، مما أدى في النهاية إلى إنشاء هذه المشكلة في "Terminal WG" على gitlab: https://gitlab.freedesktop.org/terminal-wg/specifications/issues/20

لم يكن هناك الكثير من الحركة على تلك التذكرة ، ولكن قد تكون مهتمًا بمتابعتها. خاصة إذا كان لديكم أي آراء بخصوص الشكل الذي قد تبدو عليه المواصفات "الرسمية" لـ OSC 7.

بالنسبة للسجل ، فإن الموضوع على https://github.com/jwilm/alacritty/pull/2937 يحتوي على مناقشة رائعة.

بصراحة ، أنا بخير تمامًا باستخدام معيار الأمر الواقع الموجود بالفعل ، آلية OSC 7 ; <URI> ST . لست متأكدًا حقًا من أنه يجب أن يكون هناك أي شيء رسمي أكثر من ذلك.


انتظر لا كان لدي فكرة سيئة. لنفترض أن bash مهيأ لإرسال ذلك ، وشغل شخص ما bash في WSL. ما الذي يفترض بنا فعله عندما يحاول شخص ما ضبط دليل العمل على /home/zadjii ؟ كيف نقوم بما يلي:

  1. اقول ان هذا هو مسار WSL ، وليس مسار Windows
  2. هل تعرف توزيعة WSL التي أتت من؟

هل نحتاج إلى إضافة بعض الخصائص من جانبنا والتي تشير إلى "هذا توزيعة WSL ، وليس Windows exe"؟ ماذا يحدث للمستخدمين الذين لم يضبطوا ذلك ، هل وظيفة علامة التبويب المكررة لا تعمل (بصمت بشكل فعال)؟

ثم يصبح الجزء التالي أكثر صعوبة. ماذا يحدث عندما يتم إخراج هذا الأمر عبر SSH؟ لا يمكن للمحطة معرفة أن المسار لم يعد موجودًا على هذا الجهاز ، أليس كذلك؟ كيف يتعامل Terminal.app مع هذا؟

ربما هذا يحتاج إلى مزيد من المواصفات 😨

(إيقاف: كم من الوقت سيستغرق حتى أخلط بينكما ، D Howett و D Hewitt؟ :))

هذه ميزة حاسمة مفقودة.

يجب أن يكون هذا خيار تكوين للأوامر المختلفة. على سبيل المثال ، أرغب في الحصول على هذا مقابل duplicateTab و splitPane ، لكن ليس مقابل newTab .

تم توثيق تسلسل الهروب في تفضيلات mac os terminal.app كما هو موضح في هذا التعليق alacritty / alacritty # 2937 (تعليق)

في نظام macOS ، يتم تحديد تسلسل الهروب بالفعل في Terminal.app> تفضيلات ...> ملفات التعريف> علامة التبويب69387948-67d69d00-0c95-11ea-881d-375672873fb4

للتسجيل ، هناك جدل ساخن في https://gitlab.freedesktop.org/terminal-wg/specifications/merge_requests/7 حول مواصفات هذه الميزة بالضبط. أشك في أننا سندعم أي مجموعة فرعية من هذه الميزة حتى يكون هناك اقتراح مقبول بالفعل هناك - نفضل عدم تقديم تطبيق آخر متباين حتى يكون هناك معيار فعلي.

أوصيك أن تفعل العكس :)

نجح عدد غير قليل من المحطات في تنفيذ OSC 7 بنجاح ، والنسخ من بعضها البعض ، مما أدى إلى مستخدمين سعداء.

وهناك شخص ما هناك حاليًا يعتقد أنه ليس جيدًا بما يكفي ، ويعتقد أنه يلزم تحديد مواصفات رسمية ؛ يأتي بمسودة مليئة بالمشاكل ، وما لا أستطيع فهمه على الإطلاق ، هو فقط على استعداد لتوثيق واحد من شقيقين. (ملاحظة: لقد توقفت عن متابعة هذا الموضوع منذ يومين.)

Terminal-WG ليست سلطة رسمية ، ووثائقها ليست "رسمية" ، وليست "معايير" بأي طريقة قانونية. ليس لديها حتى الإجراءات المناسبة ، الأشخاص الذين لديهم مسؤوليات ، حقوق التصويت ، أيا كان ؛ لا أحد يعرف ما الذي يتطلبه الأمر للحصول على "قبول" مستند هناك ، مهما كان معنى هذه الحالة على الإطلاق. إنها مجرد مجموعة من الأشخاص العشوائيين غير المنظمين الذين يحاولون التوصل إلى شيء مفيد. لا تدع تلك المناقشات المعلقة غير الرسمية تمنعك من تطبيق ميزة مثبتة منذ زمن طويل.

للتسجيل ، هناك جدل محتدم في https://gitlab.freedesktop.org/terminal-wg/specifications/merge_requests/7

لقد علقت عليه على القضية المشار إليها في تلك العلاقات أيضًا 😉

بالنسبة لأي شخص يستخدم Bash (من Git لنظام التشغيل Windows) ، فإن الحل المؤقت الذي تم توفيره لي ، هو تخزين المسار الجديد في كل مرة تقوم فيها بتغيير dir (الاسم المستعار للأمر cd ) ، ثم القرص المضغوط هناك عند وجود قذيفة جديدة لقد بدءت؛ هذا في _.بشرك: _

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

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

أقوم بالفعل باختبار ما إذا كنت قد بدأت في System32 (موقع البدء الافتراضي للمحطة الطرفية) ، بحيث لا يزال بإمكاني كتابة wt في شريط عنوان Explorer والبدء في مكان آخر ، ولكن هذا الجزء اختياري ويجب تخصيصه إذا يبدأ قشرتك في مجلد مختلف.

أنا لست بطلاقة بما فيه الكفاية مع PowerShell أو الأصداف الأخرى ، لكن أعتقد أنه يمكنك فعل شيء مماثل.

يجب أن يفتح Ctrl + T علامة تبويب جديدة بنفس الغلاف ونفس الدليل.

لا يتفق الجميع مع هذا التأكيد.

لا يتفق الجميع مع هذا التأكيد.

ربما يتفق الكثير. هذه هي الطريقة التي يعمل بها تطبيق Terminal على معظم سطح مكتب Linux.

يمكن جعله على الأقل كخيار.

مرحبًا ، أعتقد أنه من الواضح بالفعل في هذا الموضوع أن الكثيرين يتفقون على أن هذه ميزة مفيدة ، كما أن فريق Windows Terminal يعي ذلك أيضًا. ومن الواضح أيضًا أن المشكلة هنا ليست أنهم لا يريدون جعل هذا قابلاً للتكوين ، لكنهم بحاجة أولاً إلى اكتشاف بعض الأشياء التقنية التي تمنع الميزة من أن تكون ممكنة .

أتبع هذا الموضوع لأبقى على اطلاع دائم بهذه الميزة والمناقشات ذات الصلة ، لكن الرسائل مثل هذه تشوش الواجهة فقط ولا تساعد. أريد أن أطلب من الناس الامتناع عن نشر الرسائل التي لا تفعل شيئًا سوى تكرار النقاط المعروفة بالفعل.

يمكن جعله على الأقل كخيار

هذا ما لا أفهمه عن العناد. إذا كنت تريد أن تتعارض مع سلوك معظم المحطات الطرفية ، فهذا أمر رائع. لا حتى إعطاء خيار بالرغم من ذلك؟ أين المنطق في ذلك؟ حتى Ctrl + Shit + D الذي يمثل تكرار علامة تبويب لا يكررها في الواقع لأنه يعلقك في الدليل الافتراضي. كما لو كان لديك ميزة مكررة لا تتكرر حتى.

ما هي "الأشياء التقنية" التي تمنع هذه الميزة من أن تكون ممكنة؟ الرمز موجود بالفعل. توجد بالفعل علامة تبويب مكررة في Ctrl + Shift + D. يحتاج فقط إلى تغذية دليل العمل الحالي ولديك السلوك الذي اعتاد عليه معظم الناس والذي يطلبه الأشخاص. لذلك أنا في حيرة من أمري كيف أن هذا يحتوي على "عناصر تقنية" تمنعه.

أنا أقدر هذا النوع من المناقشة لأنه من الواضح تمامًا أن هناك عنادًا مما يعني أن هذا النوع من المناقشة ضروري.

آه ، أنت محق ، لقد فقدت المناقشة الأصلية ، لأنه لم يتم ربطها أبدًا بهذا الموضوع. أنا أنسخ محتوى منشور آخر (https://github.com/microsoft/terminal/issues/2427#issuecomment-521307534) هنا للرجوع إليه:


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

فقط دق في ؛

_ (الملف الشخصي ، مسار العمل ، بيئة التشغيل ، إلخ) ._

أي شيء يتعلق بالعملية الفعلية على الطرف الآخر ، في الحالة العامة ، من المستحيل تكراره. يمكن أن تكون العملية المتصلة ssh.exe ، والتي لا تؤثر متغيرات البيئة الخاصة بها ودليل العمل على البيئة القابلة للاكتشاف ودليل العمل من الجانب الطرفي. نفس الشيء في الواقع ، غريب بما فيه الكفاية ، ينطبق على WSL. لا يستخدم "دليل العمل" ولا يعرض متغيرات بيئته لعمليات Windows المهتمة بأي شكل من الأشكال.

لا يعمل Powershell حتى على _set_ دليل العمل الحالي ، لذلك لا يمكن اكتشاف دليله (!) أيضًا.

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

هذا هو أحد تلك الأشياء المستحيلة في الحالة العامة ولكنه ممكن تقنيًا. هناك الكثير من التعقيدات هنا ، مثل:

powershell
cd d:\users

حسنًا ، بوويرشيل ليست العملية الأولى التي أطلقناها. كنا نتجاهل المسار d:\users

(in powershell)
cd d:\users

كنا نتجاهل d:\users لأن بوويرشيل _ لا يقوم بالفعل بتعيين دليل العمل الحالي_ (!!)

إذا كانت "shell" الخاصة بك هي ssh [email protected] (حيث نعرّف shell بشكل صارم بأنها "أول عملية تفرخ طرفية نيابة عنك") ، فسيكون دليل عملها دائمًا C:\windows\system32 بغض النظر عن ماهية دليل العمل عن بعد هو.

أفضل عدم توفير الميزة بدلاً من تزويد الميزة بالعديد من التحذيرات التي قد تملأ صفحة التوثيق. ☹️ آسف.

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

لا ، لأنه من المحتمل أن يكون من المستحيل القيام بذلك بالمعنى العام. كيف نكرر مثيل vim على سبيل المثال؟ ماذا لو فتحت عملية المقدمة نوعًا من الملفات للوصول الحصري - كيف يمكننا تكرار هذه العملية؟

إذا كانت هناك طريقة يمكن من خلالها القيام بذلك بأمان وعمومًا فأنا جميعًا آذان صاغية للحلول التقنية المقترحة ، لكنني لا أعتقد أنه شيء ممكن ، لذلك لن أقوم بالتحقيق في ذلك.


حتى إذا قام Powershell _did_ بتعيين دليل العمل ، ما زلنا غير متأكدين من أنه من الممكن من الناحية الفنية على Windows الحصول على CWD لعملية أخرى. هذه هي الأشياء "التقنية" التي تمنع هذا من العمل. أود أن أضيف هذا كإعداد. ولكن لا تزال هناك بالتأكيد أسئلة فنية تحتاج إلى إجابة.

الحل الذي تتم مناقشته في هذا الخيط يتضمن إضافة دعم لتسلسل VT آخر إلى المحطة الطرفية ، بحيث يمكن للقذيفة أن ترسلها لتوضيح المسار الذي تتواجد فيه. تسلسل VT هذا غير محدد جيدًا ، ولديه الحالات المتطورة التي لا تزال بحاجة إلى حل. يسمى:

  • ماذا يحدث عندما تقول قذيفة WSL "CWD الخاص بي هو /home/foo ؟ لا توجد طريقة لكي تعرف Terminal أن المسار هو مسار WSL ، أو حتى التوزيعة التي تنتمي إليها ، لذا من المحتمل أن ينتهي تكرار علامة التبويب هذه في C:\home\foo (إن وجد)
  • ماذا يحدث عندما تكون متصلاً بجهاز آخر عبر SSH؟ لن تتمكن المحطة الطرفية من التمييز بين تلك المسارات والمسارات الموجودة على جهازك المحلي ، لذا مرة أخرى ، فإن تكرار هذا المسار سيكون سلوكًا خاطئًا
  • سيحتاج كل مستخدم إلى تخصيص موجهه لمختلف القذائف _ يدويًا_ للتعاون مع هذا السلوك. هذا ليس مانعًا ، لكن هذا يعني أنه سيكون إعدادًا لن يعمل فقط خارج الصندوق.

أنت تحاول تكرار العمليات الجارية؟ لنلق نظرة على Linux على سبيل المثال. إذا كنت تقوم بتشغيل SSH في جهازك الطرفي وفتحت علامة تبويب جديدة ، فلن تفتح علامة التبويب الجديدة اتصال SSH وتتصفح حتى تصل إلى اتصال SSH. يفتح علامة تبويب جديدة حيث تكون على جهازك. حتى لو كانت العملية محلية وليست SSH ، فإنها لا تقوم بتشغيل العملية. كل ما يتم تكراره هو علامة التبويب ، وليس العمليات الجارية.

يبدو أن هذا معقد للغاية. أنت لا تقوم بتكرار VIM أو SSH أو أي تطبيق آخر قيد التشغيل. أنت تقوم بتكرار المحطة وهذا يجيب على حالات الحافة:

  • بالنسبة إلى WSL ، فأنت لا تتصفح ملفاتك المحلية. إذا كان العائد هو / home / foo فهذا هو الموقع. إذا كان الموقع C: \ home \ foo ، فسيتم إرجاع / mnt / c / home / foo.
  • SSH هي عملية. إنه يعمل في القشرة. أنت لا تكرر العمليات. المحطات الأخرى لا تفعل ذلك. أنت تقوم بتكرار علامة التبويب.
  • لست متأكدًا مما يجب على المستخدم تخصيصه ، ولكن منذ متى أصبح التخصيص مشكلة؟

لا حرج في تكرار العمليات. أنا متأكد من أن البعض سيحب ذلك. سيكون هذا مجرد خيار آخر أعلى خيار تكرار علامات التبويب. لا ينبغي أن يكون حاجزًا. هذا إضافي واختياري.

PandaClone قد يفاجئك أن تعرف أن _بعض الأشخاص قاموا بتعيين ssh.exe كأول شيء يتم تشغيل ملف التعريف ، دون تشغيله من shell_.

كما لم يكن الأمر كذلك ، لا توجد طريقة فعلاً للمحطة لاستجواب wsl.exe ، التطبيق المجمع الذي يتواصل مع عمليات Linux ، لجعله يقول ما هو دليل العمل الحالي من العملية الأولى في عمليته شجرة.
نظرًا لأنه لا يستخدم البنية التحتية لدليل عمل Windows ، والتي تخزن WD في كتلة بيئة العملية ، فإن استخدام واجهات برمجة التطبيقات القديمة لنظام التشغيل Windows ليس كافيًا لتحديد دليل العمل الخاص به.

هذه مشكلات فنية يتعين علينا حلها. بخلاف ذلك ، نكتب ميزة لا تصلح إلا لـ 25٪ من الأشخاص.

إذا ثبت أنه سهل: فنحن دائمًا على استعداد لقبول مساهمات المجتمع.

  • بالنسبة إلى WSL ، فأنت لا تتصفح ملفاتك المحلية. إذا كان العائد هو / home / foo فهذا هو الموقع. إذا كان الموقع C: \ home \ foo ، فسيتم إرجاع / mnt / c / home / foo.

آه ولكن انظر ، الطريقة التي تعمل بها هذه الميزة كما هو محدد ، لا تعرف المحطة الطرفية من أو ماذا قال "دليل العمل الحالي هو /home/foo ". قد يكون هذا cmd.exe - إذن نعم ، يريد المستخدم C:\home\foo . قد يكون هذا هو توزيعة Ubuntu الخاصة بهم ، أو توزيعة Fedora الخاصة بهم ، أو قد يكون هذا متصلاً بـ Centos أو أي احتمال آخر. كل ما تحصل عليه المحطة عبارة عن سلسلة تقول "هذا هو دليل العمل الآن".

  • لست متأكدًا مما يجب على المستخدم تخصيصه ، ولكن منذ متى أصبح التخصيص مشكلة؟

سيحتاج المستخدم إلى حد كبير إلى تكوينه يدويًا لتمكين إرسال هذا التسلسل. بالنسبة لمستخدمي cmd ، سيحتاجون إلى تكوين٪ PROMPT٪ يدويًا لتضمين التسلسل $e]7;$P$e . سيحتاج المستخدمون bash إلى إعداده في PS1 . سيكون لدى PowerShell بالتأكيد طريقة أخرى للقيام بذلك. لكن المشكلة الأساسية هنا هي أن الأصداف _ لا_ تصدر هذا التسلسل افتراضيًا.

SSH ليس قذيفة. يمكنك تعيين ملف التعريف الخاص بك لتشغيله أولاً ، لكنه لا يزال قيد التشغيل من shell. يتم توجيه ملف التعريف الخاص بك فقط لتشغيل تطبيق على الفور. يمكن أن يكون هذا التطبيق أي شيء. ليس من الضروري أن يكون SSH. يمكنك توجيه ملفك الشخصي لتشغيل shell آخر إذا أردت ذلك.

وحتى في حالة عدم وجود محطة ، كيف تكون هذه مشكلة؟ هناك دائما استثناءات. يعد التقصير في الدليل الرئيسي في حالة عدم وجود دليل للانتقال إليه أمرًا جيدًا. هذه ليست مشكلة حيث "لا يمكن فعل هذا".

أيضًا ، هذه ميزة قياسية في معظم المحطات الطرفية ذات علامات التبويب. قم بتشغيل أي توزيعة Linux لها نكهاتها الطرفية الخاصة وكلها تظهر سلوك فتح علامة تبويب جديدة. هذه ليست ميزة ستكون بمثابة كسر سحري لـ Windows Terminal. إنها ميزة قياسية.

المحطة لا تفرخ القذائف فقط. إنه يستدعي حرفياً CreateProcess على الشيء الذي تقدمه في تكوين الملف الشخصي. SSH لا يعمل في قذيفة أو يولدها.

انظر ، نحن نتجادل حول مدى إمكانية هذه الميزة. هل يمكننا أن نتفق فقط على أننا نريد هذا ، ويريده الجميع ، وإذا كان لدينا طريقة معقولة للمضي قدمًا نجحت في الغالبية العظمى من حالات الاستخدام التي يهتم بها المستخدمون - والتي كنا سنقوم بها بالفعل؟ أحاول تقليل عدد المرات التي يجب أن نقول فيها "لا يمكن فعل ذلك" ببعض التخطيط المسبق وأعمال التصميم.

إنه ليس سحرًا رائدًا ، إنه معقد فقط من خلال نموذج عملية Windows و WSL ونعتقد أنه سينهار في بعض الظروف. لا أحد يقول أي شيء أكثر من ذلك.

  • بالنسبة إلى WSL ، فأنت لا تتصفح ملفاتك المحلية. إذا كان العائد هو / home / foo فهذا هو الموقع. إذا كان الموقع C: \ home \ foo ، فسيتم إرجاع / mnt / c / home / foo.

آه ولكن انظر ، الطريقة التي تعمل بها هذه الميزة كما هو محدد ، لا تعرف المحطة الطرفية من أو ماذا قال "دليل العمل الحالي هو /home/foo ". قد يكون هذا cmd.exe - إذن نعم ، يريد المستخدم C:\home\foo . قد يكون هذا هو توزيعة Ubuntu الخاصة بهم ، أو توزيعة Fedora الخاصة بهم ، أو قد يكون هذا متصلاً بـ Centos أو أي احتمال آخر. كل ما تحصل عليه المحطة عبارة عن سلسلة تقول "هذا هو دليل العمل الآن".

كيف لا يعرف من أو ما قاله دليل العمل الحالي؟ أنت من يطلبها. أنت تعرف ما إذا كان موجه الأوامر أو WSL أو PowerShell. أنت تعرف من أين أتت حتى تعرف كيفية تنسيق الموقع.

  • لست متأكدًا مما يجب على المستخدم تخصيصه ، ولكن منذ متى أصبح التخصيص مشكلة؟

سيحتاج المستخدم إلى حد كبير إلى تكوينه يدويًا لتمكين إرسال هذا التسلسل. بالنسبة لمستخدمي cmd ، سيحتاجون إلى تكوين٪ PROMPT٪ يدويًا لتضمين التسلسل $e]7;$P$e . سيحتاج المستخدمون bash إلى إعداده في PS1 . سيكون لدى PowerShell بالتأكيد طريقة أخرى للقيام بذلك. لكن المشكلة الأساسية هنا هي أن الأصداف _ لا_ تصدر هذا التسلسل افتراضيًا.

كيف يكون ذلك مشكلة؟ لن يكون هذا هو التطبيق الأول الذي يتطلب التكوين ولن يكون الأخير. ليس كل شيء يتم توصيله وتشغيله وهذا أمر مفهوم. إذا كانت الطريقة الوحيدة لإنجاز هذا العمل هي أن يطلب المستخدم تكوينًا ، فكيف تكون نقطة التوقف هذه؟

ماذا يحدث عندما تقول قذيفة WSL "CWD الخاص بي هو / home / foo؟ لا توجد طريقة لكي تعرف Terminal أن المسار هو مسار WSL ، أو حتى التوزيعة التي تنتمي إليها ، لذلك من المحتمل أن ينتهي تكرار علامة التبويب هذه في C: \ home \ foo (إن وجد)

لا يمكنني التحدث إلا عن نفسي حقًا ، ولكن إذا كان لديّ علامة تبويب مفتوحة باستخدام ملف تعريف واحد ، وتصفح في مكان محدد ، ثم فتحت علامة تبويب جديدة في ملف تعريف مختلف ، فلن يفاجئني أو يخيب ظني على الإطلاق إذا لم يفعل دير العمل ترحيل ، وتم استخدام الافتراضي بدلاً من ذلك.

أعتقد أنك تدرك أن معظم الأشخاص الذين يطلبون هذه الميزة يفتقدون السلوك في الأجهزة الطرفية مثل تلك المضمنة في GNOME و macOS. لا يتعين على هذه المحطات التعامل مع نفس التعقيدات التي يحدثها هذا ، ولكن في نفس الوقت ، لا أعتقد أن أي شخص يتوقع منك محاولة التعامل بذكاء مع الحالات المتطورة التي لا توجد ببساطة في البرنامج الذي هم عليه باستخدام كنقطة مرجعية.

يبدو أنها مهمة صعبة للغاية حتى لو قمت بتقليص النطاق إلى حد ما. آمل أن يتم العثور على طريقة لتضمين بعض إصدارات هذه الميزة ، لأنها توفر وقتًا رائعًا.

هل يمكن التعامل مع حالة الاستخدام هذه بواسطة # 4472 على المدى القصير؟ أنا شخصياً سأكون راضيًا عن بعض المتغيرات من cmd.exe /c "wt.exe" new-tab -p "Ubuntu-20.04" -d $(pwd) (من المحتمل أن تكون مرتبطة بماكرو Bash) من شأنها أن تفتح علامة تبويب جديدة في أحدث نافذة مركزة (وهي بالتأكيد النافذة التي كتبت فيها الأمر ).

سأخرج عن أحد الأطراف ونقول إن تنفيذ الكشف عن الدليل الحالي لعملية الجذر أسهل من تنفيذ التحكم عن بعد في سطر الأوامر و IPC للحصول على WT لفتح علامات التبويب في نفس النافذة: ابتسامة:

واو ، لقد جئت للتو إلى هنا وأدركت أن الأمر يبدو بحاجة إلى رحلة طويلة :)

وجدنا أنه في windows terminal ، يمكننا تقسيم نوافذ shell عن طريق الضغط على الاختصار alt + shift + D ، لكنه لم يتم تعيينه على نفس الدليل

لقد جئت مع حل بديل: تغيير دليل البداية.

ضع هذه الوظيفة في $PROFILE (تأكد من ضبط $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
}

.. وستكون قادرًا على فتح علامة تبويب جديدة في نفس الدليل تقريبًا دون أي متاعب ، فقط تأكد من كتابة sd قبل فتح علامة تبويب جديدة.

بالطبع ، العيب هو أن startingDirectory يتغير في كل مرة يتم استدعاء الوظيفة.

وسيكون من الأفضل استخدام هذا النهج مع مفتاح إعادة معين، بحيث عندما Ctrl+T يسمى الضغط على وظيفة تلقائيا، وعندما Ctrl+F4 الضغط startingDirectory وعادت العودة إلى قيمتها الأصلية.

حل بديل

داخل أي ملف تعريف تستخدمه على سبيل المثال profile.sh أو .zshrc ، قم بإنشاء ملف ~ / paths.sh داخل دليل $ HOME الخاص بك. سيتم تحديث المسارات كلما اتصلت بـ setCWD

يتجاوز هذا الحل دليل البدء تمامًا. عندما تفرخ مجموعة اتصال طرفية جديدة setCWD قبل تفريخ المحطة وسيبدأ دائمًا في آخر اتصال مباشر قمت باستدعاء

لاحظ أنني فعلت ذلك في حدود .zshrc

رمز:

source ~/paths.sh

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

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

قد تحتاج إلى إنشاء ملف أولي لذلك فقط اتصل بـ setCWD .

راجع للشغل إذا كنت تستخدم autohotkey ، فإليك نصًا لطيفًا وسريعًا لتشغيل الأشياء

قم بإنشاء ملف يسمى windows-terminal.ahk ثم الصق هذا الرمز أدناه. قم بتشغيل الملف وأنت على أتم استعداد. (أوصي بنقل هذا الملف إلى قسم بدء التشغيل بحيث يتم إعادة تطبيق هذه الوظيفة عند إعادة تشغيلها.

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

يا رفاق ، هذا مهم جدًا للإنتاجية ، تقريبًا كما لو كان فوق كل شيء آخر. يرجى إصلاح هذا الأمر ، وسيسعدني أنا وأصدقائي بالتخلي عن جميع المحاكيات الطرفية الأدنى الأخرى.

يبدو أن محاولة "توحيد" OSC 7 في Terminal-wg قد توقفت .

هل لا يزال هناك اهتمام بتطبيق OSC 7 بشكل أساسي كما هو الحال في Terminal.app ؟

بالنظر إلى ذلك ، سيكون لدينا "مضيف حالي و CWD" لمحطة معينة ، والتي تقوم فقط بإلغاء مناقشة "عملية القرصنة" ؛ وبعد ذلك يمكن أن تقرر / تنفذ سلوكيات المستخدم للاستفادة من تلك المعلومات ، على سبيل المثال:

  • أمر "علامة تبويب جديدة في الدليل الحالي" ؛
  • جعل "الانقسام" يفعل ذلك بشكل افتراضي ؛
  • شيء سحري يميز جلسة WSL عن جلسة Windows (إذا أبلغوا عن نفس اسم المضيف؟ لم أنظر ...) ؛
  • خيار تكوين لـ "منع OSC 7" في الملفات الشخصية حيث _ تعرف_ أنه سيرسل OSC 7 يبدو صالحًا والذي لا تريد استخدامه ، مثل الإرسال إلى جهاز بعيد يطالب بنفس اسم المضيف مثل مضيف Windows الخاص بك ؛
  • تعريض القيمة إلى شيء يمكنك التمسك به في سطر الأوامر ، بحيث تظهر جلسة ssh أو wsl _can_ في نفس دليل العمل كدليل قمت بنسخه للتو.

ركزت هذه المناقشة بشكل كبير على الجزء الأول (الحصول على CWD الحالي) ولكني أشك في أن الجزء الثاني هو الجزء الذي يحتاج إلى مزيد من الدراسة ، بناءً على التعليقات الموجودة أعلاه حتى الآن. حتى بالنسبة لقائمة الأفكار هذه ، أنا متأكد من وجود اعتراض معقول على كل واحد منهم.

بالنسبة لأولئك الذين ما زالوا مهتمين بهذا الموضوع ، قمت بعمل علاقات عامة مبكرة في # 7668. هذا هو ping ودية. أود حقًا أن أسمع من الجميع عنها.

ما هو الهدف من علامات التبويب المتعددة ، وخاصة التكرار السريع ، إذا لم ترث الدليل الحالي؟ هذه ميزة مهمة. لماذا لا تضيف حلًا بديلًا "اختراقًا" في الوقت الحالي؟ لا أرى حقًا مشكلة في استخراج CWD من عملية على Windows إذا زادت الإنتاجية لجميع المستخدمين ، مع الأخذ في الاعتبار أن Windows نفسه قد احتوى على العديد من هذه الحلول لأكثر من 20 عامًا.

لا أستطيع أن أفهم لماذا هذه الميزة ليست هي الافتراضية. أنا محير حقًا بسبب عدم وجود طريقة لتمكين هذه الميزة. هذا هو أكبر منتقص لتجربة المستخدم لدي مع Terminal: من منظور نفعي ، أفضل خدمتي من خلال عدم استخدام Terminal وبدلاً من ذلك استخدام المستكشف والنقر بزر الماوس الأيمن في الدليل الذي أريد فتح الصدفة واختيار "فتح نافذة PowerShell هنا" لأنه أسرع من الوصول إلى alt+shift+d ثم الاضطرار إلى الوصول إلى المكان الصحيح cd .

تضيف المحطة الطرفية الكثير من جودة الحياة لمطوري Windows. ستكون هذه الميزة قفزة كبيرة للأمام بالنسبة لي (وأظن الآخرين). سأضيف صوتي في الدعوة إلى أن تكون هذه الميزة أولوية قصوى.

لا أستطيع أن أفهم لماذا هذه الميزة ليست هي الافتراضية.

لا أستطيع أن أفهم لماذا لا يمكن إزعاج الناس لقراءة كل التحقيقات التي تم إجراؤها في هذا الموضوع ، في # 7668 ، # 8214 ، # 8166 ، وغيرها من سلاسل الرسائل المرتبطة ، لفهم سبب كون هذه مشكلة صعبة في الواقع يحل. اتضح أنه لا يمكنك جعل تطبيق العميل يقوم فقط بإصدار مساره - لأن المحطة الطرفية لن تعرف _ بالضرورة _ ما إذا كان هذا هو Windows أو WSL أو مسار cygwin.

إنه لأمر جيد أن لدينا مجموعة من المساهمين الموهوبين الذين يعملون بجد لاكتشاف الطريقة الصحيحة لتنفيذ الدعم لهذه الميزة ، دون كسر التوافق مع الإصدارات السابقة للتطبيقات الأخرى. لقد توصلنا _ هذا الأسبوع فقط_ إلى حل نسعد به ، ولا ينبغي أن يمر وقت طويل قبل تنفيذه.

شكرا @ zadjii-msft!

في إعادة قراءة تعليقي ، أدركت أنه يأتي باتهامًا شديدًا ولم يكن هذا هدفي. جئت إلى هنا لأقول هذا:

تضيف المحطة الطرفية الكثير من جودة الحياة لمطوري Windows. ستكون هذه الميزة قفزة كبيرة للأمام بالنسبة لي (وأظن الآخرين). سأضيف صوتي في الدعوة إلى أن تكون هذه الميزة أولوية قصوى.

وأن تجربة المستخدم الخاصة بي حتى الآن كانت على النحو التالي:

لا أستطيع أن أفهم لماذا هذه الميزة ليست هي الافتراضية. أنا محير حقًا بسبب عدم وجود طريقة لتمكين هذه الميزة. هذه أكبر تجربة للمستخدم ... إلخ

ربما كان علي أن أضع عبارة "كمستخدم" في بداية فقرتي الأولى.

أعتذر عن أي إهانة وجهتها.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات