浏览代码

Revert Key class changes.

BDisp 8 月之前
父节点
当前提交
eb987071c8
共有 3 个文件被更改,包括 25 次插入22 次删除
  1. 11 1
      Terminal.Gui/ConsoleDrivers/WindowsDriver/WindowsDriver.cs
  2. 9 16
      Terminal.Gui/Input/Key.cs
  3. 5 5
      UnitTests/Input/KeyTests.cs

+ 11 - 1
Terminal.Gui/ConsoleDrivers/WindowsDriver/WindowsDriver.cs

@@ -817,11 +817,21 @@ internal class WindowsDriver : ConsoleDriver
                 // If (ShiftMask is on and CapsLock is off) or (ShiftMask is off and CapsLock is on) add the ShiftMask
                 if (char.IsUpper (keyInfo.KeyChar))
                 {
+                    if (keyInfo.KeyChar <= 'Z')
+                    {
+                        return (KeyCode)keyInfo.Key | KeyCode.ShiftMask;
+                    }
+
                     // Always return the KeyChar because it may be an Á, À with Oem1, etc
-                    return (KeyCode)keyInfo.KeyChar | KeyCode.ShiftMask;
+                    return (KeyCode)keyInfo.KeyChar;
                 }
             }
 
+            if (keyInfo.KeyChar <= 'z')
+            {
+                return (KeyCode)keyInfo.Key;
+            }
+
             // Always return the KeyChar because it may be an á, à with Oem1, etc
             return (KeyCode)keyInfo.KeyChar;
         }

+ 9 - 16
Terminal.Gui/Input/Key.cs

@@ -1,6 +1,5 @@
 using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
-using Terminal.Gui.ConsoleDrivers;
 
 namespace Terminal.Gui;
 
@@ -209,13 +208,13 @@ public class Key : EventArgs, IEquatable<Key>
         get => _keyCode;
         init
         {
-//#if DEBUG
-//            if (GetIsKeyCodeAtoZ (value) && (value & KeyCode.Space) != 0)
-//            {
-//                throw new ArgumentException ($"Invalid KeyCode: {value} is invalid.", nameof (value));
-//            }
+#if DEBUG
+            if (GetIsKeyCodeAtoZ (value) && (value & KeyCode.Space) != 0)
+            {
+                throw new ArgumentException ($"Invalid KeyCode: {value} is invalid.", nameof (value));
+            }
 
-//#endif
+#endif
             _keyCode = value;
         }
     }
@@ -289,10 +288,7 @@ public class Key : EventArgs, IEquatable<Key>
             return false;
         }
 
-        // A to Z may have á, à, ã, â, with Oem1, etc
-        ConsoleKeyInfo cki = ConsoleKeyMapping.GetConsoleKeyInfoFromKeyCode (keyCode);
-
-        if (cki.Key is >= ConsoleKey.A and <= ConsoleKey.Z)
+        if ((keyCode & ~KeyCode.Space & ~KeyCode.ShiftMask) is >= KeyCode.A and <= KeyCode.Z)
         {
             return true;
         }
@@ -525,12 +521,9 @@ public class Key : EventArgs, IEquatable<Key>
         // Handle special cases and modifiers on their own
         if (key != KeyCode.SpecialMask && (baseKey != KeyCode.Null || hasModifiers))
         {
-            // A to Z may have á, à, ã, â, with Oem1, etc
-            ConsoleKeyInfo cki = ConsoleKeyMapping.GetConsoleKeyInfoFromKeyCode (baseKey);
-
-            if ((key & KeyCode.SpecialMask) != 0 && cki.Key is >= ConsoleKey.A and <= ConsoleKey.Z)
+            if ((key & KeyCode.SpecialMask) != 0 && (baseKey & ~KeyCode.Space) is >= KeyCode.A and <= KeyCode.Z)
             {
-                sb.Append (((char)(baseKey & ~KeyCode.Space)).ToString ());
+                sb.Append (baseKey & ~KeyCode.Space);
             }
             else
             {

+ 5 - 5
UnitTests/Input/KeyTests.cs

@@ -17,7 +17,7 @@ public class KeyTests
             { "Alt+A", Key.A.WithAlt },
             { "Shift+A", Key.A.WithShift },
             { "A", Key.A.WithShift },
-            { "â", new ((KeyCode)'Â') },
+            { "â", new ((KeyCode)'â') },
             { "Shift+â", new ((KeyCode)'â' | KeyCode.ShiftMask) },
             { "Shift+Â", new ((KeyCode)'Â' | KeyCode.ShiftMask) },
             { "Ctrl+Shift+CursorUp", Key.CursorUp.WithShift.WithCtrl },
@@ -342,10 +342,10 @@ public class KeyTests
     [InlineData ((KeyCode)'{', "{")]
     [InlineData ((KeyCode)'\'', "\'")]
     [InlineData ((KeyCode)'ó', "ó")]
-    [InlineData ((KeyCode)'Ó' | KeyCode.ShiftMask, "Ó")]
-    [InlineData ((KeyCode)'ó' | KeyCode.ShiftMask, "Ó")]
+    [InlineData ((KeyCode)'Ó' | KeyCode.ShiftMask, "Shift+Ó")]
+    [InlineData ((KeyCode)'ó' | KeyCode.ShiftMask, "Shift+ó")]
     [InlineData ((KeyCode)'Ó', "Ó")]
-    [InlineData ((KeyCode)'ç' | KeyCode.ShiftMask | KeyCode.AltMask | KeyCode.CtrlMask, "Ctrl+Alt+Shift+Ç")]
+    [InlineData ((KeyCode)'ç' | KeyCode.ShiftMask | KeyCode.AltMask | KeyCode.CtrlMask, "Ctrl+Alt+Shift+ç")]
     [InlineData ((KeyCode)'a', "a")] // 97 or Key.Space | Key.A
     [InlineData ((KeyCode)'A', "a")] // 65 or equivalent to Key.A, but A-Z are mapped to lower case by drivers
     [InlineData (KeyCode.ShiftMask | KeyCode.A, "A")]
@@ -468,7 +468,7 @@ public class KeyTests
     [InlineData ("Alt+A", KeyCode.A | KeyCode.AltMask)]
     [InlineData ("Shift+A", KeyCode.A | KeyCode.ShiftMask)]
     [InlineData ("A", KeyCode.A | KeyCode.ShiftMask)]
-    [InlineData ("â", (KeyCode)'Â')]
+    [InlineData ("â", (KeyCode)'â')]
     [InlineData ("Shift+â", (KeyCode)'â' | KeyCode.ShiftMask)]
     [InlineData ("Shift+Â", (KeyCode)'Â' | KeyCode.ShiftMask)]
     [InlineData ("Ctrl+Shift+CursorUp", KeyCode.ShiftMask | KeyCode.CtrlMask | KeyCode.CursorUp)]