Terminal: カーソルを非表示にしてコンソールウィンドウに再び表示すると、カーソルの形状が従来のスタイルに戻ります。

作成日 2020年01月06日  ·  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.CursorVisiblefalse 、次に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

これらの2つの問題は、PowerShell + PSReadLineコンテキストで報告されました。 PSReadLineは、レンダリング中にカーソルを表示および非表示にするためにConsole.CursorVisibleに依存しているため、カーソルの形状が元に戻ります。

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

最も参考になるコメント

tada:この問題は#5251で解決され、 Windows Terminal Preview v0.11.1121.0として正常にリリースされました。:tada:

便利なリンク:

全てのコメント3件

まあ、一体。

#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:

便利なリンク:

このページは役に立ちましたか?
0 / 5 - 0 評価