Windows build number: Microsoft Windows [Version 10.0.18363.535]
Windows Terminal version (if applicable): NA
Any other software? No
Después de configurar la forma del cursor en Properties->Terminal
, ocultar y luego mostrar el cursor configurando Console.CursorVisible
en false
y luego true
hace que la forma del cursor se restaure a el estilo heredado en el host de la consola.
El siguiente programa simple de C # puede mostrar el 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
}
}
}
}
La configuración de Console.CursorVisible
no debe revertir la forma del cursor.
La forma del cursor se revierte de Solid Box
al estilo heredado ( Underline
):
Esos 2 problemas se informaron en el contexto de PowerShell + PSReadLine. PSReadLine depende de Console.CursorVisible
para ocultar y mostrar el cursor durante el renderizado, por lo que la forma del cursor se revierte.
Bueno, diablos.
Como se explica en # 409, el problema es que llamar a SetConsoleCursorInfo
establece el tamaño del cursor, y al establecer el tamaño del cursor, la forma del cursor vuelve al estilo heredado (porque esa es la única forma para la que el tamaño es aplicable AFAIK ).
Es bastante fácil de "arreglar". Podríamos eliminar esta línea del método SetCursorInformation
:
https://github.com/microsoft/terminal/blob/6f667f48ae109d4291cda1f8d4e977315c0dae8a/src/host/screenInfo.cpp#L1778
Pero ese es un cambio en el comportamiento de una API pública, y es posible que algunas aplicaciones realmente dependan de ese comportamiento (aunque creo que es poco probable).
Idealmente, la propiedad Console.CursorVisible
debería usar una API que solo establezca la visibilidad y nada más, pero no creo que exista tal cosa. Lo mejor que puede hacer es usar una secuencia VT, pero obviamente eso no funcionará con versiones anteriores de Windows.
: tada: este problema se abordó en # 5251, que ahora se ha publicado con éxito como Windows Terminal Preview v0.11.1121.0
.: tada:
Enlaces útiles:
Comentario más útil
: tada: este problema se abordó en # 5251, que ahora se ha publicado con éxito como
Windows Terminal Preview v0.11.1121.0
.: tada:Enlaces útiles: