Terminal: La forma del cursor se revierte al estilo heredado después de ocultar el cursor y luego hacerlo visible nuevamente en la ventana de la consola

Creado en 6 ene. 2020  ·  3Comentarios  ·  Fuente: microsoft/terminal

Ambiente

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

Any other software? No

pasos para reproducir

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

Comportamiento esperado

La configuración de Console.CursorVisible no debe revertir la forma del cursor.

Comportamiento real

La forma del cursor se revierte de Solid Box al estilo heredado ( Underline ):
linux

Asuntos relacionados

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

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.

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

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:

Todos 3 comentarios

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:

¿Fue útil esta página
0 / 5 - 0 calificaciones