예제 #1
0
        public EgretConsole(IConsole providedConsole, ILogger <EgretConsole> providedLogger)
        {
            logger = providedLogger;

            console = providedConsole;

            terminal   = console.GetTerminal(preferVirtualTerminal: true, OutputMode.Auto);
            OutputMode = (terminal ?? console).DetectOutputMode();
            formatter  = new TextSpanFormatter();
            renderer   = new ConsoleRenderer(terminal ?? console, resetAfterRender: false);

            formatter.AddFormatter <FileInfo>((f) => f.FullName.StyleValue());
            formatter.AddFormatter <double>((x) => x.ToString("N2").StyleNumber());
            formatter.AddFormatter <int>((x) => x.ToString().StyleNumber());

            var queue = new BlockingCollection <string>();

            // created our own little async event loop so we can run things sequentially
            context = new AsyncContextThread();
        }
            public DirectoryView(DirectoryInfo directory)
            {
                if (directory == null)
                {
                    throw new ArgumentNullException(nameof(directory));
                }

                var formatter = new TextSpanFormatter();

                formatter.AddFormatter <DateTime>(d => $"{d:d} {ForegroundColorSpan.DarkGray()}{d:t}");

                Add(new ContentView(""));
                Add(new ContentView(""));

                Add(new ContentView($"Directory: {directory.FullName}"));

                Add(new ContentView(""));
                Add(new ContentView(""));

                var directoryContents = directory.EnumerateFileSystemInfos()
                                        .OrderBy(f => f is DirectoryInfo
                                                                   ? 0
                                                                   : 1).ToList();

                var tableView = new TableView <FileSystemInfo>();

                tableView.Items = directoryContents;
                tableView.AddColumn(f => f is DirectoryInfo
                                     ? Span($"{ForegroundColorSpan.LightGreen()}{f.Name} ")
                                     : Span($"{ForegroundColorSpan.White()}{f.Name} "),
                                    new ContentView(formatter.ParseToSpan($"{Ansi.Text.UnderlinedOn}Name{Ansi.Text.UnderlinedOff}")));

                tableView.AddColumn(f => formatter.Format(f.CreationTime),
                                    new ContentView(formatter.ParseToSpan($"{Ansi.Text.UnderlinedOn}Created{Ansi.Text.UnderlinedOff}")));
                tableView.AddColumn(f => formatter.Format(f.LastWriteTime),
                                    new ContentView(formatter.ParseToSpan($"{Ansi.Text.UnderlinedOn}Modified{Ansi.Text.UnderlinedOff}")));

                Add(tableView);

                TextSpan Span(FormattableString formattableString)
                {
                    return(formatter.ParseToSpan(formattableString));
                }
            }
예제 #3
0
        public ProcessesView(Process[] processes)
        {
            var formatter = new TextSpanFormatter();

            formatter.AddFormatter <TimeSpan>(t => new ContentSpan(t.ToString(@"hh\:mm\:ss")));

            Add(new ContentView(""));
            Add(new ContentView("Processes"));
            Add(new ContentView(""));

            var table = new TableView <Process> {
                Items = processes
            };

            table.AddColumn(p => p.Id, new ContentView("PID".Underline()));
            table.AddColumn(p => Name(p), new ContentView("COMMAND".Underline()));
            table.AddColumn(p => p.PrivilegedProcessorTime, new ContentView("TIME".Underline()));
            table.AddColumn(p => p.Threads.Count, new ContentView("#TH".Underline()));
            table.AddColumn(
                p => p.PrivateMemorySize64.Abbreviate(),
                new ContentView("MEM".Underline())
                );
            table.AddColumn(
                p =>
            {
#pragma warning disable CS0618 // Type or member is obsolete
                var usage = p.TrackCpuUsage().First();
#pragma warning restore CS0618 // Type or member is obsolete
                return($"{usage.UsageTotal:P}");
            },
                new ContentView("CPU".Underline())
                );

            Add(table);

            FormattableString Name(Process p)
            {
                if (!p.Responding)
                {
                    return($"{ForegroundColorSpan.Rgb(180, 0, 0)}{p.ProcessName}{ForegroundColorSpan.Reset()}");
                }
                return($"{p.ProcessName}");
            }
        }