Terminal: يتم إرجاع شكل المؤشر إلى النمط القديم بعد إخفاء المؤشر ثم جعله مرئيًا مرة أخرى في نافذة وحدة التحكم

تم إنشاؤها على ٦ يناير ٢٠٢٠  ·  3تعليقات  ·  مصدر: microsoft/terminal

بيئة

Windows build number: Microsoft Windows [Version 10.0.18363.535]
Windows Terminal version (if applicable): NA

Any other software? No

خطوات التكاثر

بعد تعيين شكل المؤشر في Properties->Terminal ، يؤدي الإخفاء ثم إظهار المؤشر عن طريق تعيين Console.CursorVisible إلى false ثم true إلى استعادة شكل المؤشر إلى النمط القديم في مضيف وحدة التحكم.

يمكن لبرنامج C # البسيط التالي إظهار المشكلة:

using System;
using System.Text;

namespace cursorShape
{
    class Program
    {
        static void Main(string[] args)
        {
            const string prompt = "PROMP> ";
            StringBuilder sb = new StringBuilder();
            int top = Console.CursorTop;

            Console.OutputEncoding = Encoding.UTF8;
            Console.Write(prompt);

            while (true)
            {
                var key = Console.ReadKey();
                if (key.Key == ConsoleKey.Q)
                {
                    break;
                }

                sb.Append(key.KeyChar);

                Console.CursorVisible = false;   // Hide the cursor before rewriting
                Console.SetCursorPosition(0, top);
                Console.Write($"{prompt}{sb}");
                Console.SetCursorPosition(Console.CursorLeft, top);
                Console.CursorVisible = true;    // Show the cursor afterwards
            }
        }
    }
}

سلوك متوقع

يجب ألا يؤدي تعيين Console.CursorVisible إرجاع شكل المؤشر.

السلوك الفعلي

يتم إرجاع شكل المؤشر من Solid Box إلى النمط القديم ( Underline ):
linux

القضايا ذات الصلة

409 و # 1145 و https://github.com/PowerShell/PSReadLine/issues/903

تم الإبلاغ عن هاتين المشكلتين في سياق PowerShell + PSReadLine. يعتمد PSReadLine على Console.CursorVisible لإخفاء المؤشر وإظهاره أثناء العرض ، بحيث يتم إرجاع شكل المؤشر.

Area-Settings Issue-Bug Needs-Tag-Fix Product-Conhost Resolution-Fix-Committed

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

: tada: تمت معالجة Windows Terminal Preview v0.11.1121.0 .: tada:

روابط مفيدة:

ال 3 كومينتر

حسنا هيك.

كما هو موضح في # 409 ، فإن المشكلة تكمن في أن استدعاء SetConsoleCursorInfo يعين حجم المؤشر ، وتعيين حجم المؤشر يجبر شكل المؤشر على العودة إلى النمط القديم (لأن هذا هو الشكل الوحيد الذي ينطبق عليه الحجم AFAIK ).

من السهل "الإصلاح". يمكننا حذف هذا السطر من طريقة SetCursorInformation :
https://github.com/microsoft/terminal/blob/6f667f48ae109d4291cda1f8d4e977315c0dae8a/src/host/screenInfo.cpp#L1778

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

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

: tada: تمت معالجة Windows Terminal Preview v0.11.1121.0 .: tada:

روابط مفيدة:

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