private Task <bool> OnSearchTextEnteredAsync(ConsoleImproved prompt, ConsoleKeyEx key) { return(Task.Run(() => { if (key.Key.Value == ConsoleKey.UpArrow || key.Key.Value == ConsoleKey.DownArrow) { return false; } var text = ci.UserEnteredText.ToString(); var primaryResults = shell.History.Where(x => x.CmdLine.Contains(text)); var secondaryResults = shell.History.Where(x => x.CmdLine.Contains(text.Trim())); var search = new SearchHistory() { SearchResults = primaryResults.Union(secondaryResults).Select(x => x.CmdLine).Distinct().ToList(), SelectedItem = 0, Term = text }; RenderSearchChanges(search); ci.Tag = search; return false; })); }
private Task <bool> OnChangeSearchEntryAsync(ConsoleImproved prompt, ConsoleKeyEx key) { return(Task.Run(() => { if (ci.Tag is SearchHistory results) { if (key.Key == ConsoleKey.DownArrow) { if (results.SelectedItem < results.SearchResults.Count - 1) { results.SelectedItem++; } } else { if (results.SelectedItem > 0) { results.SelectedItem--; } } RenderSearchChanges(results); ci.Tag = results; } return false; })); }
public KeyMapping(uint aScanCode, char norm, char shift, char num, char caps, char shiftcaps, char shiftnum, ConsoleKeyEx aKey) { Scancode = aScanCode; Value = norm; Shift = shift; Num = num; Caps = caps; ShiftCaps = shiftcaps; ShiftNum = shiftnum; Key = aKey; NumLockKey = aKey; }
/// <summary> /// Check if scan code matches key. /// </summary> /// <param name="ScanCode">Scan code.</param> /// <param name="Key">Key.</param> /// <returns>bool value.</returns> public bool ScanCodeMatchesKey(byte ScanCode, ConsoleKeyEx Key) { for (int i = 0; i < _keys.Count; i++) { if (_keys[i].Scancode == ScanCode && _keys[i].Key == Key) { return(true); } } return(false); }
public void handleKeyUp(ConsoleKeyEx e) { byte b = GetKeyBit(e); if ((b & PAD_MASK) == PAD_MASK) { pad = (byte)(pad | (b & 0xF)); } else if ((b & BUTTON_MASK) == BUTTON_MASK) { buttons = (byte)(buttons | (b & 0xF)); } }
private async Task <bool> OnSearchHistoryAsync(ConsoleImproved prompt, ConsoleKeyEx key) { int oldPos = implementation.CursorTop; implementation.CursorLeft = 0; implementation.CursorTop = implementation.WindowHeight - 2; // create fake shell object with a custom prompt var fakeShell = new Dotnet.Shell.API.Shell(); fakeShell.History.AddRange(shell.History); fakeShell.Prompt = () => { RenderSearchChanges(); // Search) user search text // [1/3]: matched entry return("Search) "); }; ci = new ConsoleImproved(implementation, fakeShell); ci.KeyOverrides.Where(x => x.Key.Key == ConsoleKey.UpArrow).ToList().ForEach(x => ci.KeyOverrides.Remove(x)); ci.KeyOverrides.Where(x => x.Key.Key == ConsoleKey.DownArrow).ToList().ForEach(x => ci.KeyOverrides.Remove(x)); ci.AddKeyOverride(ConsoleKeyEx.Any, OnSearchTextEnteredAsync); ci.AddKeyOverride(new ConsoleKeyEx(ConsoleKey.UpArrow), OnChangeSearchEntryAsync); ci.AddKeyOverride(new ConsoleKeyEx(ConsoleKey.DownArrow), OnChangeSearchEntryAsync); ci.AddKeyOverride(new ConsoleKeyEx(ConsoleKey.Enter), OnSelectSearchEntryAsync); ci.DisplayPrompt(); // When the prompt returns, instead of executing the command we just set that // as what to show on screen var command = await ci.GetCommandAsync(); implementation.CursorTop = implementation.WindowHeight - 2; implementation.Write(new string(' ', implementation.WindowWidth)); implementation.CursorTop = implementation.WindowHeight - 1; implementation.Write(new string(' ', implementation.WindowWidth)); implementation.CursorTop = oldPos; implementation.Write(new string(' ', implementation.WindowWidth)); prompt.DisplayPrompt(command); return(false); }
private Task <bool> OnSelectSearchEntryAsync(ConsoleImproved prompt, ConsoleKeyEx key) { return(Task.Run(() => { if (ci.Tag is SearchHistory search) { if (search.SearchResults.Any()) { ci.UserEnteredText.Clear(); ci.UserEnteredText.Append(search.SearchResults[search.SelectedItem]); } } return false; })); }
public KeyMapping(byte aScanCode, char norm, char shift, char num, char caps, char shiftcaps, char shiftnum, char altgr, char shiftaltgr, char ctrl, char shiftctrl, ConsoleKeyEx aKey, ConsoleKeyEx numKey) { Scancode = aScanCode; Value = norm; Shift = shift; Num = num; Caps = caps; ShiftCaps = shiftcaps; ShiftNum = shiftnum; Key = aKey; NumLockKey = aKey; ControlAlt = altgr; Control = ctrl; ControlAltShift = shiftaltgr; ControlShift = shiftctrl; NumLockKey = numKey; }
public KeyEvent(char keyChar, ConsoleKeyEx key, bool shift, bool alt, bool control, KeyEventType type) { this.KeyChar = keyChar; this.Key = key; this.Modifiers = (ConsoleModifiers)0; if (shift) { this.Modifiers |= ConsoleModifiers.Shift; } if (alt) { this.Modifiers |= ConsoleModifiers.Alt; } if (control) { this.Modifiers |= ConsoleModifiers.Control; } this.Type = type; }
private byte GetKeyBit(ConsoleKeyEx e) { switch (e) { case ConsoleKeyEx.D: case ConsoleKeyEx.RightArrow: return(0x11); case ConsoleKeyEx.A: case ConsoleKeyEx.LeftArrow: return(0x12); case ConsoleKeyEx.W: case ConsoleKeyEx.UpArrow: return(0x14); case ConsoleKeyEx.S: case ConsoleKeyEx.DownArrow: return(0x18); case ConsoleKeyEx.J: case ConsoleKeyEx.Z: return(0x21); case ConsoleKeyEx.K: case ConsoleKeyEx.X: return(0x22); case ConsoleKeyEx.Spacebar: case ConsoleKeyEx.C: return(0x24); case ConsoleKeyEx.Enter: case ConsoleKeyEx.V: return(0x28); } return(0); }
public KeyMapping(byte aScanCode, char norm, char shift, char num, char caps, char shiftcaps, char shiftnum, char altgr, char shiftaltgr, char ctrl, char shiftctrl, ConsoleKeyEx aKey) : this(aScanCode, norm, shift, num, caps, shiftcaps, shiftnum, altgr, shiftaltgr, ctrl, shiftctrl, aKey, aKey) { }
private async Task <bool> OnSearchHistoryAltModeAsync(ConsoleImproved prompt, ConsoleKeyEx key) { await console.SaveAsync(); var command = await this.RunInterfaceAsync(prompt.Shell.History); await console.RestoreAsync(); prompt.DisplayPrompt(command); return(false); }
public KeyMapping(uint aScanCode, char norm, char shift, char num, char caps, char shiftcaps, char shiftnum, ConsoleKeyEx aKey, ConsoleKeyEx numKey) : this(aScanCode, norm, shift, num, caps, shiftcaps, shiftnum, aKey) { NumLockKey = numKey; }
public KeyMapping(byte aScanCode, ConsoleKeyEx aKey) : this(aScanCode, '\0', '\0', '\0', '\0', '\0', '\0', aKey) { }
public KeyMapping(byte aScanCode, char num, ConsoleKeyEx aKey, ConsoleKeyEx numKey) : this(aScanCode, '\0', '\0', num, '\0', '\0', '\0', aKey, numKey) { }
public static ConsoleKey ToConsoleKey(this ConsoleKeyEx keyEx) { switch (keyEx) { case ConsoleKeyEx.NoName: return(ConsoleKey.NoName); case ConsoleKeyEx.Escape: return(ConsoleKey.Escape); case ConsoleKeyEx.F1: return(ConsoleKey.F1); case ConsoleKeyEx.F2: return(ConsoleKey.F2); case ConsoleKeyEx.F3: return(ConsoleKey.F3); case ConsoleKeyEx.F4: return(ConsoleKey.F4); case ConsoleKeyEx.F5: return(ConsoleKey.F5); case ConsoleKeyEx.F6: return(ConsoleKey.F6); case ConsoleKeyEx.F7: return(ConsoleKey.F7); case ConsoleKeyEx.F8: return(ConsoleKey.F8); case ConsoleKeyEx.F9: return(ConsoleKey.F9); case ConsoleKeyEx.F10: return(ConsoleKey.F10); case ConsoleKeyEx.F11: return(ConsoleKey.F11); case ConsoleKeyEx.F12: return(ConsoleKey.F12); case ConsoleKeyEx.PrintScreen: return(ConsoleKey.PrintScreen); case ConsoleKeyEx.D1: return(ConsoleKey.D1); case ConsoleKeyEx.D2: return(ConsoleKey.D2); case ConsoleKeyEx.D3: return(ConsoleKey.D3); case ConsoleKeyEx.D4: return(ConsoleKey.D4); case ConsoleKeyEx.D5: return(ConsoleKey.D5); case ConsoleKeyEx.D6: return(ConsoleKey.D6); case ConsoleKeyEx.D7: return(ConsoleKey.D7); case ConsoleKeyEx.D8: return(ConsoleKey.D8); case ConsoleKeyEx.D9: return(ConsoleKey.D9); case ConsoleKeyEx.D0: return(ConsoleKey.D0); case ConsoleKeyEx.Backspace: return(ConsoleKey.Backspace); case ConsoleKeyEx.Tab: return(ConsoleKey.Tab); case ConsoleKeyEx.Q: return(ConsoleKey.Q); case ConsoleKeyEx.W: return(ConsoleKey.W); case ConsoleKeyEx.E: return(ConsoleKey.E); case ConsoleKeyEx.R: return(ConsoleKey.R); case ConsoleKeyEx.T: return(ConsoleKey.T); case ConsoleKeyEx.Y: return(ConsoleKey.Y); case ConsoleKeyEx.U: return(ConsoleKey.U); case ConsoleKeyEx.I: return(ConsoleKey.I); case ConsoleKeyEx.O: return(ConsoleKey.O); case ConsoleKeyEx.P: return(ConsoleKey.P); case ConsoleKeyEx.Enter: return(ConsoleKey.Enter); case ConsoleKeyEx.A: return(ConsoleKey.A); case ConsoleKeyEx.S: return(ConsoleKey.S); case ConsoleKeyEx.D: return(ConsoleKey.D); case ConsoleKeyEx.F: return(ConsoleKey.F); case ConsoleKeyEx.G: return(ConsoleKey.G); case ConsoleKeyEx.H: return(ConsoleKey.H); case ConsoleKeyEx.J: return(ConsoleKey.J); case ConsoleKeyEx.K: return(ConsoleKey.K); case ConsoleKeyEx.L: return(ConsoleKey.L); case ConsoleKeyEx.Z: return(ConsoleKey.Z); case ConsoleKeyEx.X: return(ConsoleKey.X); case ConsoleKeyEx.C: return(ConsoleKey.C); case ConsoleKeyEx.V: return(ConsoleKey.V); case ConsoleKeyEx.B: return(ConsoleKey.B); case ConsoleKeyEx.N: return(ConsoleKey.N); case ConsoleKeyEx.M: return(ConsoleKey.M); case ConsoleKeyEx.Spacebar: return(ConsoleKey.Spacebar); case ConsoleKeyEx.Insert: return(ConsoleKey.Insert); case ConsoleKeyEx.Home: return(ConsoleKey.Home); case ConsoleKeyEx.PageUp: return(ConsoleKey.PageUp); case ConsoleKeyEx.Delete: return(ConsoleKey.Delete); case ConsoleKeyEx.End: return(ConsoleKey.End); case ConsoleKeyEx.PageDown: return(ConsoleKey.PageDown); case ConsoleKeyEx.UpArrow: return(ConsoleKey.UpArrow); case ConsoleKeyEx.DownArrow: return(ConsoleKey.DownArrow); case ConsoleKeyEx.LeftArrow: return(ConsoleKey.LeftArrow); case ConsoleKeyEx.RightArrow: return(ConsoleKey.RightArrow); case ConsoleKeyEx.Sleep: return(ConsoleKey.Sleep); default: throw new Exception("KeyEx not implemented!"); } }
public KeyMapping(byte aScanCode, int norm, int shift, int num, int caps, int shiftcaps, int shiftnum, ConsoleKeyEx aKey) : this(aScanCode, (char)norm, (char)shift, (char)num, (char)caps, (char)shiftcaps, (char)shiftnum, aKey) { }
public KeyMapping(byte aScanCode, char norm, char shift, char num, char caps, char shiftcaps, char shiftnum, ConsoleKeyEx aKey, ConsoleKeyEx numKey) : this(aScanCode, norm, shift, num, caps, shiftcaps, shiftnum, '\0', aKey, numKey) { }
public KeyMapping(uint aScanCode, char norm, char shift, char num, char caps, char shiftcaps, char shiftnum, char altgr, ConsoleKeyEx aKey) : this(aScanCode, norm, shift, num, caps, shiftcaps, shiftnum, altgr, '\0', '\0', '\0', aKey) { }
public KeyMapping(byte aScanCode, char n, ConsoleKeyEx aKey) : this(aScanCode, n, n, n, n, n, n, aKey) { }
public static ConsoleKey ToConsoleKey(this ConsoleKeyEx keyEx) { switch (keyEx) { case ConsoleKeyEx.NoName: return(ConsoleKey.NoName); case ConsoleKeyEx.Escape: return(ConsoleKey.Escape); case ConsoleKeyEx.F1: return(ConsoleKey.F1); case ConsoleKeyEx.F2: return(ConsoleKey.F2); case ConsoleKeyEx.F3: return(ConsoleKey.F3); case ConsoleKeyEx.F4: return(ConsoleKey.F4); case ConsoleKeyEx.F5: return(ConsoleKey.F5); case ConsoleKeyEx.F6: return(ConsoleKey.F6); case ConsoleKeyEx.F7: return(ConsoleKey.F7); case ConsoleKeyEx.F8: return(ConsoleKey.F8); case ConsoleKeyEx.F9: return(ConsoleKey.F9); case ConsoleKeyEx.F10: return(ConsoleKey.F10); case ConsoleKeyEx.F11: return(ConsoleKey.F11); case ConsoleKeyEx.F12: return(ConsoleKey.F12); case ConsoleKeyEx.PrintScreen: return(ConsoleKey.PrintScreen); case ConsoleKeyEx.D1: return(ConsoleKey.D1); case ConsoleKeyEx.D2: return(ConsoleKey.D2); case ConsoleKeyEx.D3: return(ConsoleKey.D3); case ConsoleKeyEx.D4: return(ConsoleKey.D4); case ConsoleKeyEx.D5: return(ConsoleKey.D5); case ConsoleKeyEx.D6: return(ConsoleKey.D6); case ConsoleKeyEx.D7: return(ConsoleKey.D7); case ConsoleKeyEx.D8: return(ConsoleKey.D8); case ConsoleKeyEx.D9: return(ConsoleKey.D9); case ConsoleKeyEx.D0: return(ConsoleKey.D0); case ConsoleKeyEx.Backspace: return(ConsoleKey.Backspace); case ConsoleKeyEx.Tab: return(ConsoleKey.Tab); case ConsoleKeyEx.Q: return(ConsoleKey.Q); case ConsoleKeyEx.W: return(ConsoleKey.W); case ConsoleKeyEx.E: return(ConsoleKey.E); case ConsoleKeyEx.R: return(ConsoleKey.R); case ConsoleKeyEx.T: return(ConsoleKey.T); case ConsoleKeyEx.Y: return(ConsoleKey.Y); case ConsoleKeyEx.U: return(ConsoleKey.U); case ConsoleKeyEx.I: return(ConsoleKey.I); case ConsoleKeyEx.O: return(ConsoleKey.O); case ConsoleKeyEx.P: return(ConsoleKey.P); case ConsoleKeyEx.Enter: return(ConsoleKey.Enter); case ConsoleKeyEx.A: return(ConsoleKey.A); case ConsoleKeyEx.S: return(ConsoleKey.S); case ConsoleKeyEx.D: return(ConsoleKey.D); case ConsoleKeyEx.F: return(ConsoleKey.F); case ConsoleKeyEx.G: return(ConsoleKey.G); case ConsoleKeyEx.H: return(ConsoleKey.H); case ConsoleKeyEx.J: return(ConsoleKey.J); case ConsoleKeyEx.K: return(ConsoleKey.K); case ConsoleKeyEx.L: return(ConsoleKey.L); case ConsoleKeyEx.Z: return(ConsoleKey.Z); case ConsoleKeyEx.X: return(ConsoleKey.X); case ConsoleKeyEx.C: return(ConsoleKey.C); case ConsoleKeyEx.V: return(ConsoleKey.V); case ConsoleKeyEx.B: return(ConsoleKey.B); case ConsoleKeyEx.N: return(ConsoleKey.N); case ConsoleKeyEx.M: return(ConsoleKey.M); case ConsoleKeyEx.Spacebar: return(ConsoleKey.Spacebar); case ConsoleKeyEx.Insert: return(ConsoleKey.Insert); case ConsoleKeyEx.Home: return(ConsoleKey.Home); case ConsoleKeyEx.PageUp: return(ConsoleKey.PageUp); case ConsoleKeyEx.Delete: return(ConsoleKey.Delete); case ConsoleKeyEx.End: return(ConsoleKey.End); case ConsoleKeyEx.PageDown: return(ConsoleKey.PageDown); case ConsoleKeyEx.UpArrow: return(ConsoleKey.UpArrow); case ConsoleKeyEx.DownArrow: return(ConsoleKey.DownArrow); case ConsoleKeyEx.LeftArrow: return(ConsoleKey.LeftArrow); case ConsoleKeyEx.RightArrow: return(ConsoleKey.RightArrow); case ConsoleKeyEx.Sleep: return(ConsoleKey.Sleep); case ConsoleKeyEx.BiggerThan: case ConsoleKeyEx.Period: return(ConsoleKey.OemPeriod); case ConsoleKeyEx.LowerThan: case ConsoleKeyEx.Comma: return(ConsoleKey.OemComma); case ConsoleKeyEx.NumPeriod: return(ConsoleKey.Decimal); case ConsoleKeyEx.NumPlus: return(ConsoleKey.Add); case ConsoleKeyEx.NumEnter: return(ConsoleKey.Enter); case ConsoleKeyEx.Backslash: return(ConsoleKey.Oem5); case ConsoleKeyEx.LBracket: return(ConsoleKey.Oem4); case ConsoleKeyEx.RBracket: return(ConsoleKey.Oem6); case ConsoleKeyEx.Minus: return(ConsoleKey.OemMinus); case ConsoleKeyEx.Apostrophe: return(ConsoleKey.Oem7); case ConsoleKeyEx.Slash: return(ConsoleKey.Oem2); case ConsoleKeyEx.Equal: return(ConsoleKey.OemPlus); case ConsoleKeyEx.Backquote: return(ConsoleKey.Oem3); case ConsoleKeyEx.Semicolon: case ConsoleKeyEx.Colon: return(ConsoleKey.Oem1); case ConsoleKeyEx.OEM102: return(ConsoleKey.Oem102); default: throw new Exception("KeyEx not implemented!"); } }
public bool ScanCodeMatchesKey(byte ScanCode, ConsoleKeyEx Key) { for (int i = 0; i < _keys.Count; i++) { if (_keys[i].Scancode == ScanCode && _keys[i].Key == Key) { return true; } } return false; }
private static async Task <bool> OnSearchHistoryTmuxModeAsync(ConsoleImproved prompt, ConsoleKeyEx key) { ProcessEx tmuxPopup = null; var result = HistoryAPI.ListenForSearchResultAsync((port, token) => { var cssCommand = string.Format(Settings.Default.HistoryPopupCommand, API.Shell.AssemblyLocation, port, token); var tmuxCommand = string.Format(Settings.Default.PopupCommand, cssCommand); // start tmux prompt tmuxPopup = OS.Exec(tmuxCommand); }); await tmuxPopup.WaitForExitAsync(); tmuxPopup.Dispose(); await Task.WhenAny(result, Task.Delay(1000)); if (result.IsCompletedSuccessfully) { prompt.DisplayPrompt(await result); } else { prompt.DisplayPrompt("Error"); } return(false); }