private static readonly string[,] s_fgbgAndColorStrings = new string[2, 16]; // 2 == fg vs bg, 16 == ConsoleColor values public static bool TryGetSpecialConsoleKey(char[] givenChars, int startIndex, int endIndex, out ConsoleKeyInfo key, out int keyLength) { int unprocessedCharCount = endIndex - startIndex; int minRange = TerminalFormatStrings.Instance.MinKeyFormatLength; if (unprocessedCharCount >= minRange) { int maxRange = Math.Min(unprocessedCharCount, TerminalFormatStrings.Instance.MaxKeyFormatLength); for (int i = maxRange; i >= minRange; i--) { var currentString = new StringOrCharArray(givenChars, startIndex, i); // Check if the string prefix matches. if (TerminalFormatStrings.Instance.KeyFormatToConsoleKey.TryGetValue(currentString, out key)) { keyLength = currentString.Length; return(true); } } } key = default(ConsoleKeyInfo); keyLength = 0; return(false); }
private static readonly string[,] s_fgbgAndColorStrings = new string[2, 16]; // 2 == fg vs bg, 16 == ConsoleColor values public static bool TryGetSpecialConsoleKey(char[] givenChars, int startIndex, int endIndex, out ConsoleKeyInfo key, out int keyLength) { int unprocessedCharCount = endIndex - startIndex; // First process special control character codes. These override anything from terminfo. if (unprocessedCharCount > 0) { // Is this an erase / backspace? char c = givenChars[startIndex]; if (c != s_posixDisableValue && c == s_veraseCharacter) { key = new ConsoleKeyInfo(c, ConsoleKey.Backspace, shift: false, alt: false, control: false); keyLength = 1; return(true); } } // Then process terminfo mappings. int minRange = TerminalFormatStrings.Instance.MinKeyFormatLength; if (unprocessedCharCount >= minRange) { int maxRange = Math.Min(unprocessedCharCount, TerminalFormatStrings.Instance.MaxKeyFormatLength); for (int i = maxRange; i >= minRange; i--) { var currentString = new StringOrCharArray(givenChars, startIndex, i); // Check if the string prefix matches. if (TerminalFormatStrings.Instance.KeyFormatToConsoleKey.TryGetValue(currentString, out key)) { keyLength = currentString.Length; return(true); } } } // Otherwise, not a known special console key. key = default(ConsoleKeyInfo); keyLength = 0; return(false); }
private static readonly string[,] s_fgbgAndColorStrings = new string[2, 16]; // 2 == fg vs bg, 16 == ConsoleColor values public static bool TryGetSpecialConsoleKey(char[] givenChars, int startIndex, int endIndex, out ConsoleKeyInfo key, out int keyLength) { int unprocessedCharCount = endIndex - startIndex; int minRange = TerminalFormatStrings.Instance.MinKeyFormatLength; if (unprocessedCharCount >= minRange) { int maxRange = Math.Min(unprocessedCharCount, TerminalFormatStrings.Instance.MaxKeyFormatLength); for (int i = maxRange; i >= minRange; i--) { var currentString = new StringOrCharArray(givenChars, startIndex, i); // Check if the string prefix matches. if (TerminalFormatStrings.Instance.KeyFormatToConsoleKey.TryGetValue(currentString, out key)) { keyLength = currentString.Length; return true; } } } key = default(ConsoleKeyInfo); keyLength = 0; return false; }
private static readonly string[,] s_fgbgAndColorStrings = new string[2, 16]; // 2 == fg vs bg, 16 == ConsoleColor values public static bool TryGetSpecialConsoleKey(char[] givenChars, int startIndex, int endIndex, out ConsoleKeyInfo key, out int keyLength) { int unprocessedCharCount = endIndex - startIndex; // First process special control character codes. These override anything from terminfo. if (unprocessedCharCount > 0) { // Is this an erase / backspace? char c = givenChars[startIndex]; if (c != s_posixDisableValue && c == s_veraseCharacter) { key = new ConsoleKeyInfo(c, ConsoleKey.Backspace, shift: false, alt: false, control: false); keyLength = 1; return true; } } // Then process terminfo mappings. int minRange = TerminalFormatStrings.Instance.MinKeyFormatLength; if (unprocessedCharCount >= minRange) { int maxRange = Math.Min(unprocessedCharCount, TerminalFormatStrings.Instance.MaxKeyFormatLength); for (int i = maxRange; i >= minRange; i--) { var currentString = new StringOrCharArray(givenChars, startIndex, i); // Check if the string prefix matches. if (TerminalFormatStrings.Instance.KeyFormatToConsoleKey.TryGetValue(currentString, out key)) { keyLength = currentString.Length; return true; } } } // Otherwise, not a known special console key. key = default(ConsoleKeyInfo); keyLength = 0; return false; }