private void AddPrefixKey(TermInfo.Database db, string extendedNamePrefix, ConsoleKey key) { AddKey(db, extendedNamePrefix + "3", key, shift: false, alt: true, control: false); AddKey(db, extendedNamePrefix + "4", key, shift: true, alt: true, control: false); AddKey(db, extendedNamePrefix + "5", key, shift: false, alt: false, control: true); AddKey(db, extendedNamePrefix + "6", key, shift: true, alt: false, control: true); AddKey(db, extendedNamePrefix + "7", key, shift: false, alt: false, control: true); }
private void AddKey(TermInfo.Database db, string extendedName, ConsoleKey key, bool shift, bool alt, bool control) { string keyFormat = db.GetExtendedString(extendedName); if (!string.IsNullOrEmpty(keyFormat)) { KeyFormatToConsoleKey[keyFormat] = new ConsoleKeyInfo('\0', key, shift, alt, control); } }
private void AddKey(TermInfo.Database db, TermInfo.WellKnownStrings keyId, ConsoleKey key, bool shift, bool alt, bool control) { string keyFormat = db.GetString(keyId); if (!string.IsNullOrEmpty(keyFormat)) { KeyFormatToConsoleKey[keyFormat] = new ConsoleKeyInfo('\0', key, shift, alt, control); } }
private static string GetTitle(TermInfo.Database db) { // Try to get the format string from tsl/fsl and use it if they're available string tsl = db.GetString(TermInfo.WellKnownStrings.ToStatusLine); string fsl = db.GetString(TermInfo.WellKnownStrings.FromStatusLine); if (tsl != null && fsl != null) { return(tsl + "%p1%s" + fsl); } string term = db.Term; if (term == null) { return(string.Empty); } if (term.StartsWith("xterm", StringComparison.Ordinal)) // normalize all xterms to enable easier matching { term = "xterm"; } switch (term) { case "aixterm": case "dtterm": case "linux": case "rxvt": case "xterm": return("\x1B]0;%p1%s\x07"); case "cygwin": return("\x1B];%p1%s\x07"); case "konsole": return("\x1B]30;%p1%s\x07"); case "screen": return("\x1Bk%p1%s\x1B"); default: return(string.Empty); } }
private void AddKey(TermInfo.Database db, TermInfo.WellKnownStrings keyId, ConsoleKey key) { AddKey(db, keyId, key, shift: false, alt: false, control: false); }
public TerminalFormatStrings(TermInfo.Database db) { if (db == null) { return; } KeypadXmit = db.GetString(TermInfo.WellKnownStrings.KeypadXmit); Foreground = db.GetString(TermInfo.WellKnownStrings.SetAnsiForeground); Background = db.GetString(TermInfo.WellKnownStrings.SetAnsiBackground); Reset = db.GetString(TermInfo.WellKnownStrings.OrigPairs) ?? db.GetString(TermInfo.WellKnownStrings.OrigColors); Bell = db.GetString(TermInfo.WellKnownStrings.Bell); Clear = db.GetString(TermInfo.WellKnownStrings.Clear); Columns = db.GetNumber(TermInfo.WellKnownNumbers.Columns); Lines = db.GetNumber(TermInfo.WellKnownNumbers.Lines); CursorVisible = db.GetString(TermInfo.WellKnownStrings.CursorVisible); CursorInvisible = db.GetString(TermInfo.WellKnownStrings.CursorInvisible); CursorAddress = db.GetString(TermInfo.WellKnownStrings.CursorAddress); CursorLeft = db.GetString(TermInfo.WellKnownStrings.CursorLeft); Title = GetTitle(db); Debug.WriteLineIf(db.GetString(TermInfo.WellKnownStrings.CursorPositionReport) != CursorPositionReport, "Getting the cursor position will only work if the terminal supports the CPR sequence," + "but the terminfo database does not contain an entry for it."); int maxColors = db.GetNumber(TermInfo.WellKnownNumbers.MaxColors); MaxColors = // normalize to either the full range of all ANSI colors, just the dark ones, or none maxColors >= 16 ? 16 : maxColors >= 8 ? 8 : 0; KeyFormatToConsoleKey = new Dictionary <StringOrCharArray, ConsoleKeyInfo>(); AddKey(db, TermInfo.WellKnownStrings.KeyF1, ConsoleKey.F1); AddKey(db, TermInfo.WellKnownStrings.KeyF2, ConsoleKey.F2); AddKey(db, TermInfo.WellKnownStrings.KeyF3, ConsoleKey.F3); AddKey(db, TermInfo.WellKnownStrings.KeyF4, ConsoleKey.F4); AddKey(db, TermInfo.WellKnownStrings.KeyF5, ConsoleKey.F5); AddKey(db, TermInfo.WellKnownStrings.KeyF6, ConsoleKey.F6); AddKey(db, TermInfo.WellKnownStrings.KeyF7, ConsoleKey.F7); AddKey(db, TermInfo.WellKnownStrings.KeyF8, ConsoleKey.F8); AddKey(db, TermInfo.WellKnownStrings.KeyF9, ConsoleKey.F9); AddKey(db, TermInfo.WellKnownStrings.KeyF10, ConsoleKey.F10); AddKey(db, TermInfo.WellKnownStrings.KeyF11, ConsoleKey.F11); AddKey(db, TermInfo.WellKnownStrings.KeyF12, ConsoleKey.F12); AddKey(db, TermInfo.WellKnownStrings.KeyF13, ConsoleKey.F13); AddKey(db, TermInfo.WellKnownStrings.KeyF14, ConsoleKey.F14); AddKey(db, TermInfo.WellKnownStrings.KeyF15, ConsoleKey.F15); AddKey(db, TermInfo.WellKnownStrings.KeyF16, ConsoleKey.F16); AddKey(db, TermInfo.WellKnownStrings.KeyF17, ConsoleKey.F17); AddKey(db, TermInfo.WellKnownStrings.KeyF18, ConsoleKey.F18); AddKey(db, TermInfo.WellKnownStrings.KeyF19, ConsoleKey.F19); AddKey(db, TermInfo.WellKnownStrings.KeyF20, ConsoleKey.F20); AddKey(db, TermInfo.WellKnownStrings.KeyF21, ConsoleKey.F21); AddKey(db, TermInfo.WellKnownStrings.KeyF22, ConsoleKey.F22); AddKey(db, TermInfo.WellKnownStrings.KeyF23, ConsoleKey.F23); AddKey(db, TermInfo.WellKnownStrings.KeyF24, ConsoleKey.F24); AddKey(db, TermInfo.WellKnownStrings.KeyBackspace, ConsoleKey.Backspace); AddKey(db, TermInfo.WellKnownStrings.KeyBackTab, ConsoleKey.Tab, shift: true, alt: false, control: false); AddKey(db, TermInfo.WellKnownStrings.KeyBegin, ConsoleKey.Home); AddKey(db, TermInfo.WellKnownStrings.KeyClear, ConsoleKey.Clear); AddKey(db, TermInfo.WellKnownStrings.KeyDelete, ConsoleKey.Delete); AddKey(db, TermInfo.WellKnownStrings.KeyDown, ConsoleKey.DownArrow); AddKey(db, TermInfo.WellKnownStrings.KeyEnd, ConsoleKey.End); AddKey(db, TermInfo.WellKnownStrings.KeyEnter, ConsoleKey.Enter); AddKey(db, TermInfo.WellKnownStrings.KeyHelp, ConsoleKey.Help); AddKey(db, TermInfo.WellKnownStrings.KeyHome, ConsoleKey.Home); AddKey(db, TermInfo.WellKnownStrings.KeyInsert, ConsoleKey.Insert); AddKey(db, TermInfo.WellKnownStrings.KeyLeft, ConsoleKey.LeftArrow); AddKey(db, TermInfo.WellKnownStrings.KeyPageDown, ConsoleKey.PageDown); AddKey(db, TermInfo.WellKnownStrings.KeyPageUp, ConsoleKey.PageUp); AddKey(db, TermInfo.WellKnownStrings.KeyPrint, ConsoleKey.Print); AddKey(db, TermInfo.WellKnownStrings.KeyRight, ConsoleKey.RightArrow); AddKey(db, TermInfo.WellKnownStrings.KeyScrollForward, ConsoleKey.PageDown, shift: true, alt: false, control: false); AddKey(db, TermInfo.WellKnownStrings.KeyScrollReverse, ConsoleKey.PageUp, shift: true, alt: false, control: false); AddKey(db, TermInfo.WellKnownStrings.KeySBegin, ConsoleKey.Home, shift: true, alt: false, control: false); AddKey(db, TermInfo.WellKnownStrings.KeySDelete, ConsoleKey.Delete, shift: true, alt: false, control: false); AddKey(db, TermInfo.WellKnownStrings.KeySHome, ConsoleKey.Home, shift: true, alt: false, control: false); AddKey(db, TermInfo.WellKnownStrings.KeySelect, ConsoleKey.Select); AddKey(db, TermInfo.WellKnownStrings.KeySLeft, ConsoleKey.LeftArrow, shift: true, alt: false, control: false); AddKey(db, TermInfo.WellKnownStrings.KeySPrint, ConsoleKey.Print, shift: true, alt: false, control: false); AddKey(db, TermInfo.WellKnownStrings.KeySRight, ConsoleKey.RightArrow, shift: true, alt: false, control: false); AddKey(db, TermInfo.WellKnownStrings.KeyUp, ConsoleKey.UpArrow); AddPrefixKey(db, "kLFT", ConsoleKey.LeftArrow); AddPrefixKey(db, "kRIT", ConsoleKey.RightArrow); AddPrefixKey(db, "kUP", ConsoleKey.UpArrow); AddPrefixKey(db, "kDN", ConsoleKey.DownArrow); AddPrefixKey(db, "kDC", ConsoleKey.Delete); AddPrefixKey(db, "kEND", ConsoleKey.End); AddPrefixKey(db, "kHOM", ConsoleKey.Home); AddPrefixKey(db, "kNXT", ConsoleKey.PageDown); AddPrefixKey(db, "kPRV", ConsoleKey.PageUp); if (KeyFormatToConsoleKey.Count > 0) { MaxKeyFormatLength = int.MinValue; MinKeyFormatLength = int.MaxValue; foreach (KeyValuePair <StringOrCharArray, ConsoleKeyInfo> entry in KeyFormatToConsoleKey) { if (entry.Key.Length > MaxKeyFormatLength) { MaxKeyFormatLength = entry.Key.Length; } if (entry.Key.Length < MinKeyFormatLength) { MinKeyFormatLength = entry.Key.Length; } } } }