private void SetOptionsInternal(SetPSReadlineOption options) { if (options.ContinuationPrompt != null) { Options.ContinuationPrompt = options.ContinuationPrompt; } if (options._continuationPromptForegroundColor.HasValue) { Options.ContinuationPromptForegroundColor = options.ContinuationPromptForegroundColor; } if (options._continuationPromptBackgroundColor.HasValue) { Options.ContinuationPromptBackgroundColor = options.ContinuationPromptBackgroundColor; } if (options._emphasisBackgroundColor.HasValue) { Options.EmphasisBackgroundColor = options.EmphasisBackgroundColor; } if (options._emphasisForegroundColor.HasValue) { Options.EmphasisForegroundColor = options.EmphasisForegroundColor; } if (options._errorBackgroundColor.HasValue) { Options.ErrorBackgroundColor = options.ErrorBackgroundColor; } if (options._errorForegroundColor.HasValue) { Options.ErrorForegroundColor = options.ErrorForegroundColor; } if (options._historyNoDuplicates.HasValue) { Options.HistoryNoDuplicates = options.HistoryNoDuplicates; } if (options._historySearchCursorMovesToEnd.HasValue) { Options.HistorySearchCursorMovesToEnd = options.HistorySearchCursorMovesToEnd; } if (options._addToHistoryHandlerSpecified) { Options.AddToHistoryHandler = options.AddToHistoryHandler; } if (options._commandValidationHandlerSpecified) { Options.CommandValidationHandler = options.CommandValidationHandler; } if (options._maximumHistoryCount.HasValue) { Options.MaximumHistoryCount = options.MaximumHistoryCount; if (_history != null) { var newHistory = new HistoryQueue <HistoryItem>(Options.MaximumHistoryCount); while (_history.Count > Options.MaximumHistoryCount) { _history.Dequeue(); } while (_history.Count > 0) { newHistory.Enqueue(_history.Dequeue()); } _history = newHistory; _currentHistoryIndex = _history.Count; } } if (options._maximumKillRingCount.HasValue) { Options.MaximumKillRingCount = options.MaximumKillRingCount; // TODO - make _killRing smaller } if (options._editMode.HasValue) { Options.EditMode = options.EditMode; // Switching/resetting modes - clear out chord dispatch table _chordDispatchTable.Clear(); SetDefaultBindings(Options.EditMode); } if (options._showToolTips.HasValue) { Options.ShowToolTips = options.ShowToolTips; } if (options._extraPromptLineCount.HasValue) { Options.ExtraPromptLineCount = options.ExtraPromptLineCount; } if (options._dingTone.HasValue) { Options.DingTone = options.DingTone; } if (options._dingDuration.HasValue) { Options.DingDuration = options.DingDuration; } if (options._bellStyle.HasValue) { Options.BellStyle = options.BellStyle; } if (options._completionQueryItems.HasValue) { Options.CompletionQueryItems = options.CompletionQueryItems; } if (options.WordDelimiters != null) { Options.WordDelimiters = options.WordDelimiters; } if (options._historySearchCaseSensitive.HasValue) { Options.HistorySearchCaseSensitive = options.HistorySearchCaseSensitive; } if (options._historySaveStyle.HasValue) { Options.HistorySaveStyle = options.HistorySaveStyle; } #region vi if (options._viModeIndicator.HasValue) { Options.ViModeIndicator = options.ViModeIndicator; } #endregion if (options.HistorySavePath != null) { Options.HistorySavePath = options.HistorySavePath; if (_historyFileMutex != null) { _historyFileMutex.Dispose(); } _historyFileMutex = new Mutex(false, GetHistorySaveFileMutexName()); _historyFileLastSavedSize = 0; } if (options.ResetTokenColors) { Options.ResetColors(); } if (options._tokenKind.HasValue) { if (options._foregroundColor.HasValue) { Options.SetForegroundColor(options.TokenKind, options.ForegroundColor); } if (options._backgroundColor.HasValue) { Options.SetBackgroundColor(options.TokenKind, options.BackgroundColor); } } }
private void SetOptionsInternal(SetPSReadlineOption options) { if (options.ContinuationPrompt != null) { Options.ContinuationPrompt = options.ContinuationPrompt; } if (options._continuationPromptForegroundColor.HasValue) { Options.ContinuationPromptForegroundColor = options.ContinuationPromptForegroundColor; } if (options._continuationPromptBackgroundColor.HasValue) { Options.ContinuationPromptBackgroundColor = options.ContinuationPromptBackgroundColor; } if (options._emphasisBackgroundColor.HasValue) { Options.EmphasisBackgroundColor = options.EmphasisBackgroundColor; } if (options._emphasisForegroundColor.HasValue) { Options.EmphasisForegroundColor = options.EmphasisForegroundColor; } if (options._errorBackgroundColor.HasValue) { Options.ErrorBackgroundColor = options.ErrorBackgroundColor; } if (options._errorForegroundColor.HasValue) { Options.ErrorForegroundColor = options.ErrorForegroundColor; } if (options._historyNoDuplicates.HasValue) { Options.HistoryNoDuplicates = options.HistoryNoDuplicates; } if (options._historySearchCursorMovesToEnd.HasValue) { Options.HistorySearchCursorMovesToEnd = options.HistorySearchCursorMovesToEnd; } if (options._addToHistoryHandlerSpecified) { Options.AddToHistoryHandler = options.AddToHistoryHandler; } if (options._commandValidationHandlerSpecified) { Options.CommandValidationHandler = options.CommandValidationHandler; } if (options._maximumHistoryCount.HasValue) { Options.MaximumHistoryCount = options.MaximumHistoryCount; if (_history != null) { var newHistory = new HistoryQueue<HistoryItem>(Options.MaximumHistoryCount); while (_history.Count > Options.MaximumHistoryCount) { _history.Dequeue(); } while (_history.Count > 0) { newHistory.Enqueue(_history.Dequeue()); } _history = newHistory; _currentHistoryIndex = _history.Count; } } if (options._maximumKillRingCount.HasValue) { Options.MaximumKillRingCount = options.MaximumKillRingCount; // TODO - make _killRing smaller } if (options._editMode.HasValue) { Options.EditMode = options.EditMode; // Switching/resetting modes - clear out chord dispatch table _chordDispatchTable.Clear(); SetDefaultBindings(Options.EditMode); } if (options._showToolTips.HasValue) { Options.ShowToolTips = options.ShowToolTips; } if (options._extraPromptLineCount.HasValue) { Options.ExtraPromptLineCount = options.ExtraPromptLineCount; } if (options._dingTone.HasValue) { Options.DingTone = options.DingTone; } if (options._dingDuration.HasValue) { Options.DingDuration = options.DingDuration; } if (options._bellStyle.HasValue) { Options.BellStyle = options.BellStyle; } if (options._completionQueryItems.HasValue) { Options.CompletionQueryItems = options.CompletionQueryItems; } if (options.WordDelimiters != null) { Options.WordDelimiters = options.WordDelimiters; } if (options._historySearchCaseSensitive.HasValue) { Options.HistorySearchCaseSensitive = options.HistorySearchCaseSensitive; } if (options._historySaveStyle.HasValue) { Options.HistorySaveStyle = options.HistorySaveStyle; } #region vi if (options._viModeIndicator.HasValue) { Options.ViModeIndicator = options.ViModeIndicator; } #endregion if (options.HistorySavePath != null) { Options.HistorySavePath = options.HistorySavePath; if (_historyFileMutex != null) { _historyFileMutex.Dispose(); } _historyFileMutex = new Mutex(false, GetHistorySaveFileMutexName()); _historyFileLastSavedSize = 0; } if (options.ResetTokenColors) { Options.ResetColors(); } if (options._tokenKind.HasValue) { if (options._foregroundColor.HasValue) { Options.SetForegroundColor(options.TokenKind, options.ForegroundColor); } if (options._backgroundColor.HasValue) { Options.SetBackgroundColor(options.TokenKind, options.BackgroundColor); } } }
/// <summary> /// Helper function for the Set-PSReadlineOption cmdlet. /// </summary> public static void SetOptions(SetPSReadlineOption options) { _singleton.SetOptionsInternal(options); }
private void TestSetup(KeyMode keyMode, params KeyHandler[] keyHandlers) { Console.Clear(); PSConsoleReadLine.ClearHistory(); PSConsoleReadLine.ClearKillRing(); // We don't want stdout redirected, we want it sent to the screen. var standardOutput = new StreamWriter(Console.OpenStandardOutput()) {AutoFlush = true}; Console.SetOut(standardOutput); var options = new SetPSReadlineOption { AddToHistoryHandler = null, BellStyle = PSConsoleReadlineOptions.DefaultBellStyle, CompletionQueryItems = PSConsoleReadlineOptions.DefaultCompletionQueryItems, ContinuationPrompt = PSConsoleReadlineOptions.DefaultContinuationPrompt, ContinuationPromptBackgroundColor = Console.BackgroundColor, ContinuationPromptForegroundColor = Console.ForegroundColor, DingDuration = 1, // Make tests virtually silent when they ding DingTone = 37, // Make tests virtually silent when they ding EmphasisBackgroundColor = Console.BackgroundColor, EmphasisForegroundColor = PSConsoleReadlineOptions.DefaultEmphasisForegroundColor, ExtraPromptLineCount = PSConsoleReadlineOptions.DefaultExtraPromptLineCount, HistoryNoDuplicates = PSConsoleReadlineOptions.DefaultHistoryNoDuplicates, HistorySaveStyle = HistorySaveStyle.SaveNothing, HistorySearchCaseSensitive = PSConsoleReadlineOptions.DefaultHistorySearchCaseSensitive, HistorySearchCursorMovesToEnd = PSConsoleReadlineOptions.DefaultHistorySearchCursorMovesToEnd, MaximumHistoryCount = PSConsoleReadlineOptions.DefaultMaximumHistoryCount, MaximumKillRingCount = PSConsoleReadlineOptions.DefaultMaximumKillRingCount, ResetTokenColors = true, ShowToolTips = PSConsoleReadlineOptions.DefaultShowToolTips, WordDelimiters = PSConsoleReadlineOptions.DefaultWordDelimiters, }; switch (keyMode) { case KeyMode.Cmd: options.EditMode = EditMode.Windows; break; case KeyMode.Emacs: options.EditMode = EditMode.Emacs; break; #if FALSE case KeyMode.Vi: options.EditMode = EditMode.Vi; break; #endif } PSConsoleReadLine.SetOptions(options); foreach (var keyHandler in keyHandlers) { PSConsoleReadLine.SetKeyHandler(new [] {keyHandler.Chord}, keyHandler.Handler, "", ""); } var colorOptions = new SetPSReadlineOption(); foreach (var val in typeof(TokenClassification).GetEnumValues()) { colorOptions.TokenKind = (TokenClassification)val; colorOptions.ForegroundColor = ForegroundColors[(int)val]; colorOptions.BackgroundColor = BackgroundColors[(int)val]; PSConsoleReadLine.SetOptions(colorOptions); } }
private static void SetPrompt(string prompt) { if (string.IsNullOrEmpty(prompt)) return; var handle = NativeMethods.GetStdHandle((uint) StandardHandleId.Output); var lineCount = 1 + prompt.Count(c => c == '\n'); if (lineCount > 1) { var options = new SetPSReadlineOption {ExtraPromptLineCount = lineCount - 1}; PSConsoleReadLine.SetOptions(options); } int bufferWidth = Console.BufferWidth; var consoleBuffer = new CHAR_INFO[lineCount * bufferWidth]; int j = 0; for (int i = 0; i < prompt.Length; i++, j++) { if (prompt[i] == '\n') { for (; j % Console.BufferWidth != 0; j++) { consoleBuffer[j] = new CHAR_INFO(' ', Console.ForegroundColor, Console.BackgroundColor); } Console.CursorTop += 1; Console.CursorLeft = 0; j -= 1; // We don't actually write the newline } else { consoleBuffer[j] = new CHAR_INFO(prompt[i], Console.ForegroundColor, Console.BackgroundColor); Console.CursorLeft += 1; } } var bufferSize = new COORD { X = (short) bufferWidth, Y = (short) lineCount }; var bufferCoord = new COORD {X = 0, Y = 0}; var writeRegion = new SMALL_RECT { Top = 0, Left = 0, Bottom = (short) (lineCount - 1), Right = (short) bufferWidth }; NativeMethods.WriteConsoleOutput(handle, consoleBuffer, bufferSize, bufferCoord, ref writeRegion); }
private void SetPrompt(string prompt) { if (string.IsNullOrEmpty(prompt)) { var options = new SetPSReadlineOption {ExtraPromptLineCount = 0}; PSConsoleReadLine.SetOptions(options); return; } var lineCount = 1 + prompt.Count(c => c == '\n'); if (lineCount > 1) { var options = new SetPSReadlineOption {ExtraPromptLineCount = lineCount - 1}; PSConsoleReadLine.SetOptions(options); } _console.Write(prompt); }
public void TestUselessStuffForBetterCoverage() { // Useless test to just make sure coverage numbers are better, written // in the first way I could think of that doesn't warn about doing something useless. var options = new SetPSReadlineOption(); var getKeyHandlerCommand = new GetKeyHandlerCommand(); var useless = ((object)options.AddToHistoryHandler ?? options).GetHashCode() + options.EditMode.GetHashCode() + ((object)options.ContinuationPrompt ?? options).GetHashCode() + options.ContinuationPromptBackgroundColor.GetHashCode() + options.ContinuationPromptForegroundColor.GetHashCode() + options.HistoryNoDuplicates.GetHashCode() + options.HistorySearchCursorMovesToEnd.GetHashCode() + options.MaximumHistoryCount.GetHashCode() + options.MaximumKillRingCount.GetHashCode() + options.DingDuration.GetHashCode() + options.DingTone.GetHashCode() + options.BellStyle.GetHashCode() + options.ExtraPromptLineCount.GetHashCode() + options.ShowToolTips.GetHashCode() + options.CompletionQueryItems.GetHashCode() + options.EmphasisBackgroundColor.GetHashCode() + options.EmphasisForegroundColor.GetHashCode() + options.HistorySearchCaseSensitive.GetHashCode() + getKeyHandlerCommand.Bound.GetHashCode() + getKeyHandlerCommand.Unbound.GetHashCode(); // This assertion just avoids annoying warnings about unused variables. Assert.AreNotEqual(Math.PI, useless); }