/// <summary> /// Initializes the runtime. The boolean flag /// indicates whether we are forcing color to be off. /// </summary> public static void Init(bool disable_color = false) { if (inited) { return; } inited = true; empty_container = new Container(0, 0, Terminal.Cols, Terminal.Lines); try { main_window = Curses.InitScr(); } catch (Exception e) { Console.WriteLine("Curses failed to initialize, the exception is: " + e); throw new Exception("Terminal.Init failed"); } Curses.RawMode = true; Curses.Echo = false; //Curses.nonl (); Stdscr.Keypad = true; // MainScreen.stdscr.Keypad = true; #if BREAK_UTF8_RENDERING Curses.Event old = 0; MouseEventsAvailable = Curses.console_sharp_mouse_mask( Curses.Event.Button1Clicked | Curses.Event.Button1DoubleClicked, out old); #endif UsingColor = false; if (!disable_color) { UsingColor = Curses.HasColors; } Curses.StartColor(); Curses.UseDefaultColors(); if (UsingColor) { ColorNormal = MakeColor(Colors.WHITE, Colors.BLUE); ColorFocus = MakeColor(Colors.BLACK, Colors.CYAN); ColorHotNormal = Attrs.BOLD | MakeColor(Colors.YELLOW, Colors.BLUE); ColorHotFocus = Attrs.BOLD | MakeColor(Colors.YELLOW, Colors.CYAN); ColorMenu = Attrs.BOLD | MakeColor(Colors.WHITE, Colors.CYAN); ColorMenuHot = Attrs.BOLD | MakeColor(Colors.YELLOW, Colors.CYAN); ColorMenuSelected = Attrs.BOLD | MakeColor(Colors.WHITE, Colors.BLACK); ColorMenuHotSelected = Attrs.BOLD | MakeColor(Colors.YELLOW, Colors.BLACK); ColorMarked = ColorHotNormal; ColorMarkedSelected = ColorHotFocus; ColorDialogNormal = MakeColor(Colors.BLACK, Colors.WHITE); ColorDialogFocus = MakeColor(Colors.BLACK, Colors.CYAN); ColorDialogHotNormal = MakeColor(Colors.BLUE, Colors.WHITE); ColorDialogHotFocus = MakeColor(Colors.BLUE, Colors.CYAN); ColorError = Attrs.BOLD | MakeColor(Colors.WHITE, Colors.RED); ColorErrorFocus = MakeColor(Colors.BLACK, Colors.WHITE); ColorErrorHot = Attrs.BOLD | MakeColor(Colors.YELLOW, Colors.RED); ColorErrorHotFocus = ColorErrorHot; } else { ColorNormal = Attrs.NORMAL; ColorFocus = Attrs.REVERSE; ColorHotNormal = Attrs.BOLD; ColorHotFocus = Attrs.REVERSE | Attrs.BOLD; ColorMenu = Attrs.REVERSE; ColorMenuHot = Attrs.NORMAL; ColorMenuSelected = Attrs.BOLD; ColorMenuHotSelected = Attrs.NORMAL; ColorMarked = Attrs.BOLD; ColorMarkedSelected = Attrs.REVERSE | Attrs.BOLD; ColorDialogNormal = Attrs.REVERSE; ColorDialogFocus = Attrs.NORMAL; ColorDialogHotNormal = Attrs.BOLD; ColorDialogHotFocus = Attrs.NORMAL; ColorError = Attrs.BOLD; } ColorBasic = MakeColor(-1, -1); mainloop = new Looper(); mainloop.AddWatch(0, Looper.Condition.PollIn, x => { Container top = toplevels.Count > 0 ? toplevels [toplevels.Count - 1] : null; if (top != null) { ProcessChar(top); } return(true); }); }