Terminal: Bentuk kursor akan dikembalikan ke gaya lama setelah menyembunyikan kursor dan membuatnya terlihat lagi di jendela konsol

Dibuat pada 6 Jan 2020  ·  3Komentar  ·  Sumber: microsoft/terminal

Lingkungan Hidup

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

Any other software? No

Langkah-langkah untuk mereproduksi

Setelah menyetel bentuk kursor di Properties->Terminal , sembunyikan lalu tampilkan kursor dengan menyetel Console.CursorVisible menjadi false lalu true menyebabkan bentuk kursor dipulihkan ke gaya lama di host konsol.

Program C # sederhana berikut dapat menunjukkan masalah tersebut:

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
            }
        }
    }
}

Perilaku yang diharapkan

Menyetel Console.CursorVisible seharusnya tidak mengembalikan bentuk kursor.

Perilaku sebenarnya

Bentuk kursor akan dikembalikan dari Solid Box ke gaya lama ( Underline ):
linux

Masalah terkait

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

2 masalah tersebut dilaporkan dalam konteks PowerShell + PSReadLine. PSReadLine bergantung pada Console.CursorVisible untuk menyembunyikan dan menampilkan kursor selama rendering, sehingga bentuk kursor akan dikembalikan.

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

Komentar yang paling membantu

: tada: Masalah Windows Terminal Preview v0.11.1121.0 .: tada:

Tautan yang berguna:

Semua 3 komentar

Nah, sial.

Seperti dijelaskan di # 409, masalahnya adalah memanggil SetConsoleCursorInfo menyetel ukuran kursor, dan menyetel ukuran kursor akan memaksa bentuk kursor kembali ke gaya lama (karena itulah satu-satunya bentuk yang ukurannya dapat diterapkan AFAIK ).

Cukup mudah untuk "memperbaikinya". Kami hanya dapat menghapus baris ini dari metode SetCursorInformation :
https://github.com/microsoft/terminal/blob/6f667f48ae109d4291cda1f8d4e977315c0dae8a/src/host/screenInfo.cpp#L1778

Tapi itu adalah perubahan perilaku untuk API publik, dan mungkin saja beberapa aplikasi benar-benar mengandalkan perilaku itu (meskipun menurut saya itu tidak mungkin).

Idealnya properti Console.CursorVisible harus menggunakan API yang hanya mengatur visibilitas dan tidak ada yang lain, tapi saya rasa tidak ada hal seperti itu. Hal terbaik yang dapat Anda lakukan adalah menggunakan urutan VT, tetapi itu jelas tidak akan berfungsi dengan versi Windows yang lebih lama.

: tada: Masalah Windows Terminal Preview v0.11.1121.0 .: tada:

Tautan yang berguna:

Apakah halaman ini membantu?
0 / 5 - 0 peringkat