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
):
تم الإبلاغ عن هاتين المشكلتين في سياق PowerShell + PSReadLine. يعتمد PSReadLine على Console.CursorVisible
لإخفاء المؤشر وإظهاره أثناء العرض ، بحيث يتم إرجاع شكل المؤشر.
حسنا هيك.
كما هو موضح في # 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:
روابط مفيدة:
التعليق الأكثر فائدة
: tada: تمت معالجة
Windows Terminal Preview v0.11.1121.0
.: tada:روابط مفيدة: