Windows build number: Microsoft Windows [Version 10.0.18363.535]
Windows Terminal version (if applicable): NA
Any other software? No
Après avoir défini la forme du curseur dans Properties->Terminal
, masquer puis afficher le curseur en définissant Console.CursorVisible
sur false
puis true
provoque la restauration de la forme du curseur le style hérité dans l'hôte de la console.
Le programme C # simple suivant peut montrer le problème:
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
}
}
}
}
Le réglage de Console.CursorVisible
ne doit pas inverser la forme du curseur.
La forme du curseur passe de Solid Box
au style hérité ( Underline
):
Ces 2 problèmes ont été signalés dans le contexte PowerShell + PSReadLine. PSReadLine dépend de Console.CursorVisible
pour masquer et afficher le curseur pendant le rendu, de sorte que la forme du curseur est inversée.
Eh bien, diable.
Comme expliqué dans # 409, le problème est que l'appel de SetConsoleCursorInfo
définit la taille du curseur, et la définition de la taille du curseur force la forme du curseur à revenir au style hérité (car c'est la seule forme pour laquelle la taille est applicable AFAIK ).
C'est assez facile à «réparer». Nous pourrions simplement supprimer cette ligne de la méthode SetCursorInformation
:
https://github.com/microsoft/terminal/blob/6f667f48ae109d4291cda1f8d4e977315c0dae8a/src/host/screenInfo.cpp#L1778
Mais c'est un changement de comportement pour une API publique, et il est possible que certaines applications s'appuient sur ce comportement (bien que je pense que cela est peu probable).
Idéalement, la propriété Console.CursorVisible
devrait utiliser une API qui définit simplement la visibilité et rien d'autre, mais je ne pense pas qu'il existe une telle chose. Le mieux que vous puissiez faire est d'utiliser une séquence VT, mais cela ne fonctionnera évidemment pas avec les anciennes versions de Windows.
: tada: Ce problème a été résolu dans # 5251, qui a maintenant été publié avec succès sous le nom Windows Terminal Preview v0.11.1121.0
.: tada:
Liens utiles:
Commentaire le plus utile
: tada: Ce problème a été résolu dans # 5251, qui a maintenant été publié avec succès sous le nom
Windows Terminal Preview v0.11.1121.0
.: tada:Liens utiles: