Windows build number: Microsoft Windows [Version 10.0.18363.535]
Windows Terminal version (if applicable): NA
Any other software? No
Depois de definir a forma do cursor em Properties->Terminal
, ocultar e mostrar o cursor definindo Console.CursorVisible
como false
e então true
faz com que a forma do cursor seja restaurada para o estilo legado no host do console.
O seguinte programa C # simples pode mostrar o problema:
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
}
}
}
}
Definir Console.CursorVisible
não deve reverter a forma do cursor.
A forma do cursor é revertida de Solid Box
para o estilo legado ( Underline
):
Esses 2 problemas foram relatados no contexto do PowerShell + PSReadLine. PSReadLine depende de Console.CursorVisible
para ocultar e mostrar o cursor durante a renderização, de forma que a forma do cursor seja revertida.
Bem, que diabo.
Conforme explicado em # 409, o problema é que chamar SetConsoleCursorInfo
define o tamanho do cursor, e definir o tamanho do cursor força a forma do cursor de volta ao estilo legado (porque essa é a única forma para a qual o tamanho é aplicável AFAIK )
É bastante fácil de "consertar". Poderíamos simplesmente deletar esta linha do método SetCursorInformation
:
https://github.com/microsoft/terminal/blob/6f667f48ae109d4291cda1f8d4e977315c0dae8a/src/host/screenInfo.cpp#L1778
Mas isso é uma mudança no comportamento de uma API pública, e é possível que alguns aplicativos possam realmente depender desse comportamento (embora eu ache isso improvável).
Idealmente, a propriedade Console.CursorVisible
deveria estar usando uma API que apenas define a visibilidade e nada mais, mas não acho que exista tal coisa. O melhor que você pode fazer é usar uma sequência VT, mas isso obviamente não funcionará com versões anteriores do Windows.
: tada: Este problema foi resolvido em # 5251, que agora foi lançado com sucesso como Windows Terminal Preview v0.11.1121.0
.: tada:
Links úteis:
Comentários muito úteis
: tada: Este problema foi resolvido em # 5251, que agora foi lançado com sucesso como
Windows Terminal Preview v0.11.1121.0
.: tada:Links úteis: