public static void Main(string[] args)
        {
            AppDomain.CurrentDomain.ProcessExit += On_ProcessExit;

            Console.OutputEncoding = Encoding.UTF8; //unicode not supported by mono correctly
            Console.InputEncoding  = Encoding.UTF8;

            //new Thread(Listener).Start();

            var platform = Environment.OSVersion.Platform;
            var winNt    = platform == PlatformID.Win32NT;

            con = new NativeConsole(winNt && !Console.IsOutputRedirected
                ? (IAnsiConsole) new ConhostAnsiConsole()
                : new GenericAnsiConsole());

            con.Init();

            Console.WriteLine(Console.OutputEncoding);

            TestRendering();
            return;

            var ansi = new AnsiInputConverter();

            while (true)
            {
//                if (!Console.KeyAvailable) {
//                    Thread.Sleep(new TimeSpan(20000));
//                    continue;
//                }
                char c = ansi.Read(false);
                Console.Write(c);
                var ev = ansi.DequeueEvent();
                Console.Write(ev?.ToString());
            }



////            bool last = false;
////            var sw = new Stopwatch();
//            while (true) {
////                if (!Console.KeyAvailable) {
////                    if (!last) {
////                        sw.Start();
////                        last = true;
////                    }
////                    Thread.Sleep(new TimeSpan(10000));
////                    Console.Write('.');
////                    continue;
////                }
////                if (last) {
////                    Console.WriteLine($"{sw.ElapsedMilliseconds}");
////                    sw.Reset();
////                    last = false;
////                }
//                var c = Console.ReadKey(true);
//                var shift = (c.Modifiers & ConsoleModifiers.Shift) != 0 ? "Shift" : "NoShift";
//                var control = (c.Modifiers & ConsoleModifiers.Control) != 0 ? "Control" : "NoControl";
//                var alt = (c.Modifiers & ConsoleModifiers.Alt) != 0 ? "Alt" : "NoAlt";
//                Console.Write($"'{c.KeyChar}' {(int)c.KeyChar}, {c.Key}, {shift}, {control}, {alt} \n");
//            }
        }