Windows build number: Microsoft Windows [Version 10.0.18363.535]
Windows Terminal version (if applicable): NA
Any other software? No
Nachdem Sie die Cursorform in Properties->Terminal
, wird die Cursorform wiederhergestellt, indem Sie den Cursor ausblenden und dann anzeigen, indem Sie Console.CursorVisible
auf false
und dann true
der Legacy-Stil im Konsolenhost.
Das folgende einfache C # -Programm kann das Problem anzeigen:
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
}
}
}
}
Das Setzen von Console.CursorVisible
sollte die Cursorform nicht zurücksetzen.
Die Cursorform wird von Solid Box
auf den Legacy-Stil zurückgesetzt ( Underline
):
Diese beiden Probleme wurden im PowerShell + PSReadLine-Kontext gemeldet. PSReadLine hängt von Console.CursorVisible
, um den Cursor während des Renderns auszublenden und anzuzeigen, sodass die Cursorform zurückgesetzt wird.
Zum Teufel.
Wie in # 409 erläutert, besteht das Problem darin, dass durch Aufrufen von SetConsoleCursorInfo
die Cursorgröße festgelegt wird und durch Festlegen der Cursorgröße die Cursorform auf den alten Stil zurückgesetzt wird (da dies die einzige Form ist, für die die Größe AFAIK gilt ).
Es ist einfach genug, "zu reparieren". Wir könnten diese Zeile einfach aus der SetCursorInformation
-Methode löschen:
https://github.com/microsoft/terminal/blob/6f667f48ae109d4291cda1f8d4e977315c0dae8a/src/host/screenInfo.cpp#L1778
Dies ist jedoch eine Verhaltensänderung für eine öffentliche API, und es ist möglich, dass sich einige Anwendungen tatsächlich auf dieses Verhalten verlassen (obwohl ich dies für unwahrscheinlich halte).
Idealerweise sollte die Eigenschaft Console.CursorVisible
eine API verwenden, die nur die Sichtbarkeit und nichts anderes festlegt, aber ich glaube nicht, dass es so etwas gibt. Das Beste, was Sie tun können, ist die Verwendung einer VT-Sequenz, aber das funktioniert offensichtlich nicht mit älteren Windows-Versionen.
: tada: Dieses Problem wurde in # 5251 Windows Terminal Preview v0.11.1121.0
.: tada:
Praktische Links:
Hilfreichster Kommentar
: tada: Dieses Problem wurde in # 5251
Windows Terminal Preview v0.11.1121.0
.: tada:Praktische Links: