Windows build number: Microsoft Windows [Version 10.0.18363.535]
Windows Terminal version (if applicable): NA
Any other software? No
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
}
}
}
}
Menyetel Console.CursorVisible
seharusnya tidak mengembalikan bentuk kursor.
Bentuk kursor akan dikembalikan dari Solid Box
ke gaya lama ( Underline
):
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.
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:
Komentar yang paling membantu
: tada: Masalah
Windows Terminal Preview v0.11.1121.0
.: tada:Tautan yang berguna: