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
)に戻ります。
これらの2つの問題は、PowerShell + PSReadLineコンテキストで報告されました。 PSReadLineは、レンダリング中にカーソルを表示および非表示にするためにConsole.CursorVisible
に依存しているため、カーソルの形状が元に戻ります。
まあ、一体。
#409で説明したように、問題は、 SetConsoleCursorInfo
を呼び出すとカーソルサイズが設定され、カーソルサイズを設定すると、カーソルの形状が強制的にレガシースタイルに戻ることです(サイズが適用できる唯一の形状であるため) )。
「修正」するのは簡単です。 SetCursorInformation
メソッドからこの行を削除するだけで済みます。
https://github.com/microsoft/terminal/blob/6f667f48ae109d4291cda1f8d4e977315c0dae8a/src/host/screenInfo.cpp#L1778
しかし、これはパブリックAPIの動作の変更であり、一部のアプリケーションが実際にその動作に依存している可能性があります(ただし、その可能性は低いと思います)。
理想的には、 Console.CursorVisible
プロパティは、可視性のみを設定するAPIを使用する必要がありますが、そのようなことはないと思います。 最善の方法はVTシーケンスを使用することですが、それは明らかに古いバージョンのWindowsでは機能しません。
: tada:この問題は#5251で解決され、 Windows Terminal Preview v0.11.1121.0
として正常にリリースされました。:tada:
便利なリンク:
最も参考になるコメント
: tada:この問題は#5251で解決され、
Windows Terminal Preview v0.11.1121.0
として正常にリリースされました。:tada:便利なリンク: