public static void TryDetachFromConsoleWindow() { if (IsWindows) { WindowsConsole.TryDetachFromConsoleWindow(); } }
static void Main(string[] args) { WindowsConsole.TryEnableVirtualTerminalProcessing(); Console.Write(new StringBuilder() .SetTitle("Hello World") .HideCursor() .SaveState() ); for (var i = 0;; i++) { var color = new AnsiColor( (byte)(128 + Math.Sin(i / 200d) * 127), (byte)(128 + Math.Sin(i / 100d) * 127), (byte)(128 + Math.Sin(i / 130d) * 80)); Console.Write(new StringBuilder() .RestoreState() .SaveState() .SetMode(Mode.Reset) .Append("HELLO") .SetMode(Mode.Bold) .SetForegroundColor(color) .Append("WORLD") ); Thread.Sleep(25); } }
static ConsoleLogHandler() { WriteAnsiColors = !System.Console.IsOutputRedirected; if (WriteAnsiColors && IsWindows) { WriteAnsiColors = WindowsConsole.TryEnableVirtualTerminalProcessing(); } }
public void TestThatUnknownColorsTranslateToNone() { if (!IsTestApplicable) { return; } WindowsConsole.TranslateBackgroundColor((ConsoleColor)int.MaxValue) .Should().Be(NativeMethods.CharAttributes.None); }
public void TestThatScrollingZeroLinesDoesNotThrow() { if (!IsTestApplicable) { return; } var console = new WindowsConsole(); console.Invoking(c => c.ScrollContents(0)).Should().NotThrow(); }
public void TestThatWindowsConsoleIsScrollable() { if (!IsTestApplicable) { return; } var console = new WindowsConsole(); console.IsScrollable.Should().BeTrue(); }
public void TestThatScrollingANegativeNumberOfLinesThrows() { if (!IsTestApplicable) { return; } var console = new WindowsConsole(); console.Invoking(c => c.ScrollContents(Any.NegativeInt())) .Should().Throw <ArgumentOutOfRangeException>(); }
public async void PerformUpgrade(string[] packages) { MainView?.ToForm().Hide(); List <string> shortcuts = new List <string>(); ShortcutService?.WatchDesktops(shortcut => shortcuts.Add(shortcut)); // upgrade WindowsConsole.AllocConsole(); Console.CursorVisible = false; try { List <ChocolateyPackage> chocoPackages = ChocolateyService.GetPackagesByName(packages.ToList()); if (chocoPackages.Count > 0) { ChocolateyService.Upgrade(chocoPackages, CandyShopContext.ValidExitCodes.ToArray()); } } catch (ChocolateyException e) { MainView.DisplayError(LocaleEN.ERROR_UPGRADING_OUTDATED_PACKAGES, e.Message); return; // TODO why return? shortcuts should be deleted even if chocolatey fails to upgrade some packages (others may have been upgraded and added a shortcut) } // display results Task minDelay = Task.Run(() => Thread.Sleep(3 * 1000)); IntPtr handle = WindowsConsole.GetConsoleWindow(); if (!IntPtr.Zero.Equals(handle)) { WindowsConsole.SetForegroundWindow(handle); } Console.CursorVisible = false; Console.Write("\nPress any key to continue... "); Console.ReadKey(); // delete shortcuts ShortcutService?.DisposeWatchers(); if (MainView.UpgradePackagesPage.CleanShortcuts) { await minDelay; // wait for shortcuts to be created ShortcutService?.DeleteShortcuts(shortcuts); } // TODO if there still are outdated packages, return to MainView // TODO if there was an error, offer to open log folder? go back to application? MainView?.ToForm().Dispose(); Program.Exit(); }
static Console() { #if NET_2_1 Encoding inputEncoding; Encoding outputEncoding; #endif if (Environment.IsRunningOnWindows) { // // On Windows, follow the Windows tradition // #if NET_2_1 // should never happen since Moonlight does not run on windows inputEncoding = outputEncoding = Encoding.Default; #else try { inputEncoding = Encoding.GetEncoding(WindowsConsole.GetInputCodePage()); outputEncoding = Encoding.GetEncoding(WindowsConsole.GetOutputCodePage()); // ArgumentException and NotSupportedException can be thrown as well } catch { // FIXME: I18N assemblies are not available when compiling mcs // Use Latin 1 as it is fast and UTF-8 is never used as console code page inputEncoding = outputEncoding = Encoding.Default; } #endif } else { // // On Unix systems (128), do not output the // UTF-8 ZWNBSP (zero-width non-breaking space). // int code_page = 0; Encoding.InternalCodePage(ref code_page); if (code_page != -1 && ((code_page & 0x0fffffff) == 3 || // UTF8Encoding.UTF8_CODE_PAGE ((code_page & 0x10000000) != 0))) { inputEncoding = outputEncoding = Encoding.UTF8Unmarked; } else { inputEncoding = outputEncoding = Encoding.Default; } } SetupStreams(inputEncoding, outputEncoding); }
public void TestThatColorTranslationIsCorrectForValidColors() { if (!IsTestApplicable) { return; } foreach (var colorName in Enum.GetNames(typeof(ConsoleColor))) { var consoleColor = (ConsoleColor) (typeof(ConsoleColor).GetTypeInfo().GetField(colorName).GetValue(null)); var bgColorName = "Background" + colorName; var bgEnumValue = typeof(NativeMethods.CharAttributes).GetTypeInfo().GetField(bgColorName); bgEnumValue.Should().NotBeNull($"{bgColorName} should be a member of {nameof(NativeMethods.CharAttributes)}"); var bgColor = (NativeMethods.CharAttributes)bgEnumValue.GetValue(null); var translated = WindowsConsole.TranslateBackgroundColor(consoleColor); translated.Should().Be(bgColor); } }
public void TestThatScrollingPositiveLinesEitherSucceedsOrThrowsExpectedException() { if (!IsTestApplicable) { return; } var console = new WindowsConsole(); try { console.ScrollContents(1); } catch (NotSupportedException) { } catch (ArgumentException) { } catch (Exception) { throw; } }
static Console() { #if NET_2_1 Encoding inputEncoding; Encoding outputEncoding; #endif if (Environment.IsRunningOnWindows) { // // On Windows, follow the Windows tradition // #if NET_2_1 // should never happen since Moonlight does not run on windows inputEncoding = outputEncoding = Encoding.Default; #else try { inputEncoding = Encoding.GetEncoding(WindowsConsole.GetInputCodePage()); outputEncoding = Encoding.GetEncoding(WindowsConsole.GetOutputCodePage()); // ArgumentException and NotSupportedException can be thrown as well } catch { // FIXME: I18N assemblies are not available when compiling mcs // Use Latin 1 as it is fast and UTF-8 is never used as console code page inputEncoding = outputEncoding = Encoding.Default; } #endif } else { // // On Unix systems (128), do not output the // UTF-8 ZWNBSP (zero-width non-breaking space). // int code_page = 0; Encoding.InternalCodePage(ref code_page); if (code_page != -1 && ( (code_page & 0x0fffffff) == 3 || // UTF8Encoding.UTF8_CODE_PAGE ((code_page & 0x10000000) != 0) ) ) { inputEncoding = outputEncoding = Encoding.UTF8Unmarked; } else { inputEncoding = outputEncoding = Encoding.Default; } } stderr = new UnexceptionalStreamWriter(OpenStandardError(0), outputEncoding); ((StreamWriter)stderr).AutoFlush = true; stderr = TextWriter.Synchronized(stderr, true); #if !NET_2_1 if (!Environment.IsRunningOnWindows && ConsoleDriver.IsConsole) { StreamWriter w = new CStreamWriter(OpenStandardOutput(0), outputEncoding); w.AutoFlush = true; stdout = TextWriter.Synchronized(w, true); stdin = new CStreamReader(OpenStandardInput(0), inputEncoding); } else { #endif stdout = new UnexceptionalStreamWriter(OpenStandardOutput(0), outputEncoding); ((StreamWriter)stdout).AutoFlush = true; stdout = TextWriter.Synchronized(stdout, true); stdin = new UnexceptionalStreamReader(OpenStandardInput(0), inputEncoding); stdin = TextReader.Synchronized(stdin); #if !NET_2_1 } #endif GC.SuppressFinalize(stdout); GC.SuppressFinalize(stderr); GC.SuppressFinalize(stdin); }
public static IWindow GetWindow() => runningWindows ? WindowFactory.Create(WindowsConsole.GetWindow()) : WindowFactory.Create(LinuxConsole.GetWindow());
static ConsoleSink() { WindowsConsole.EnableVirtualTerminalProcessing(); }