public override void Init(Action terminalResized) { if (window != null) { return; } try { window = Curses.initscr(); } catch (Exception e) { Console.WriteLine("Curses failed to initialize, the exception is: " + e); } Curses.raw(); Curses.noecho(); Curses.Window.Standard.keypad(true); reportableMouseEvents = Curses.mousemask(Curses.Event.AllEvents | Curses.Event.ReportMousePosition, out oldMouseEvents); TerminalResized = terminalResized; if (reportableMouseEvents.HasFlag(Curses.Event.ReportMousePosition)) { StartReportingMouseMoves(); } HLine = Curses.ACS_HLINE; VLine = Curses.ACS_VLINE; Stipple = Curses.ACS_CKBOARD; Diamond = Curses.ACS_DIAMOND; ULCorner = Curses.ACS_ULCORNER; LLCorner = Curses.ACS_LLCORNER; URCorner = Curses.ACS_URCORNER; LRCorner = Curses.ACS_LRCORNER; LeftTee = Curses.ACS_LTEE; RightTee = Curses.ACS_RTEE; TopTee = Curses.ACS_TTEE; BottomTee = Curses.ACS_BTEE; Colors.Base = new ColorScheme(); Colors.Dialog = new ColorScheme(); Colors.Menu = new ColorScheme(); Colors.Error = new ColorScheme(); Clip = new Rect(0, 0, Cols, Rows); if (Curses.HasColors) { Curses.StartColor(); Curses.UseDefaultColors(); Colors.Base.Normal = MakeColor(Curses.COLOR_WHITE, Curses.COLOR_BLUE); Colors.Base.Focus = MakeColor(Curses.COLOR_BLACK, Curses.COLOR_CYAN); Colors.Base.HotNormal = Curses.A_BOLD | MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_BLUE); Colors.Base.HotFocus = Curses.A_BOLD | MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_CYAN); // Focused, // Selected, Hot: Yellow on Black // Selected, text: white on black // Unselected, hot: yellow on cyan // unselected, text: same as unfocused Colors.Menu.HotFocus = Curses.A_BOLD | MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_BLACK); Colors.Menu.Focus = Curses.A_BOLD | MakeColor(Curses.COLOR_WHITE, Curses.COLOR_BLACK); Colors.Menu.HotNormal = Curses.A_BOLD | MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_CYAN); Colors.Menu.Normal = Curses.A_BOLD | MakeColor(Curses.COLOR_WHITE, Curses.COLOR_CYAN); Colors.Menu.Disabled = MakeColor(Curses.COLOR_WHITE, Curses.COLOR_CYAN); Colors.Dialog.Normal = MakeColor(Curses.COLOR_BLACK, Curses.COLOR_WHITE); Colors.Dialog.Focus = MakeColor(Curses.COLOR_BLACK, Curses.COLOR_CYAN); Colors.Dialog.HotNormal = MakeColor(Curses.COLOR_BLUE, Curses.COLOR_WHITE); Colors.Dialog.HotFocus = MakeColor(Curses.COLOR_BLUE, Curses.COLOR_CYAN); Colors.Error.Normal = Curses.A_BOLD | MakeColor(Curses.COLOR_WHITE, Curses.COLOR_RED); Colors.Error.Focus = MakeColor(Curses.COLOR_BLACK, Curses.COLOR_WHITE); Colors.Error.HotNormal = Curses.A_BOLD | MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_RED); Colors.Error.HotFocus = Colors.Error.HotNormal; } else { Colors.Base.Normal = Curses.A_NORMAL; Colors.Base.Focus = Curses.A_REVERSE; Colors.Base.HotNormal = Curses.A_BOLD; Colors.Base.HotFocus = Curses.A_BOLD | Curses.A_REVERSE; Colors.Menu.Normal = Curses.A_REVERSE; Colors.Menu.Focus = Curses.A_NORMAL; Colors.Menu.HotNormal = Curses.A_BOLD; Colors.Menu.HotFocus = Curses.A_NORMAL; Colors.Dialog.Normal = Curses.A_REVERSE; Colors.Dialog.Focus = Curses.A_NORMAL; Colors.Dialog.HotNormal = Curses.A_BOLD; Colors.Dialog.HotFocus = Curses.A_NORMAL; Colors.Error.Normal = Curses.A_BOLD; Colors.Error.Focus = Curses.A_BOLD | Curses.A_REVERSE; Colors.Error.HotNormal = Curses.A_BOLD | Curses.A_REVERSE; Colors.Error.HotFocus = Curses.A_REVERSE; } Colors.TopLevel = new ColorScheme(); Colors.TopLevel.Normal = MakeColor(Curses.COLOR_GREEN, Curses.COLOR_BLACK); Colors.TopLevel.Focus = MakeColor(Curses.COLOR_WHITE, Curses.COLOR_CYAN); Colors.TopLevel.HotNormal = MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_BLACK); Colors.TopLevel.HotFocus = MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_CYAN); }
public override void Init(Action terminalResized) { if (window != null) { return; } try { window = Curses.initscr(); } catch (Exception e) { Console.WriteLine("Curses failed to initialize, the exception is: " + e); } // // We are setting Invisible as default so we could ignore XTerm DECSUSR setting // switch (Curses.curs_set(0)) { case 0: currentCursorVisibility = initialCursorVisibility = CursorVisibility.Invisible; break; case 1: currentCursorVisibility = initialCursorVisibility = CursorVisibility.Underline; Curses.curs_set(1); break; case 2: currentCursorVisibility = initialCursorVisibility = CursorVisibility.Box; Curses.curs_set(2); break; default: currentCursorVisibility = initialCursorVisibility = null; break; } Curses.raw(); Curses.noecho(); Curses.Window.Standard.keypad(true); reportableMouseEvents = Curses.mousemask(Curses.Event.AllEvents | Curses.Event.ReportMousePosition, out oldMouseEvents); TerminalResized = terminalResized; if (reportableMouseEvents.HasFlag(Curses.Event.ReportMousePosition)) { StartReportingMouseMoves(); } //HLine = Curses.ACS_HLINE; //VLine = Curses.ACS_VLINE; //Stipple = Curses.ACS_CKBOARD; //Diamond = Curses.ACS_DIAMOND; //ULCorner = Curses.ACS_ULCORNER; //LLCorner = Curses.ACS_LLCORNER; //URCorner = Curses.ACS_URCORNER; //LRCorner = Curses.ACS_LRCORNER; //LeftTee = Curses.ACS_LTEE; //RightTee = Curses.ACS_RTEE; //TopTee = Curses.ACS_TTEE; //BottomTee = Curses.ACS_BTEE; //RightArrow = Curses.ACS_RARROW; //LeftArrow = Curses.ACS_LARROW; //UpArrow = Curses.ACS_UARROW; //DownArrow = Curses.ACS_DARROW; Colors.TopLevel = new ColorScheme(); Colors.Base = new ColorScheme(); Colors.Dialog = new ColorScheme(); Colors.Menu = new ColorScheme(); Colors.Error = new ColorScheme(); Clip = new Rect(0, 0, Cols, Rows); if (Curses.HasColors) { Curses.StartColor(); Curses.UseDefaultColors(); Colors.TopLevel.Normal = MakeColor(Curses.COLOR_GREEN, Curses.COLOR_BLACK); Colors.TopLevel.Focus = MakeColor(Curses.COLOR_WHITE, Curses.COLOR_CYAN); Colors.TopLevel.HotNormal = MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_BLACK); Colors.TopLevel.HotFocus = MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_CYAN); Colors.Base.Normal = MakeColor(Curses.COLOR_WHITE, Curses.COLOR_BLUE); Colors.Base.Focus = MakeColor(Curses.COLOR_BLACK, Curses.COLOR_CYAN); Colors.Base.HotNormal = Curses.A_BOLD | MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_BLUE); Colors.Base.HotFocus = Curses.A_BOLD | MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_CYAN); // Focused, // Selected, Hot: Yellow on Black // Selected, text: white on black // Unselected, hot: yellow on cyan // unselected, text: same as unfocused Colors.Menu.HotFocus = Curses.A_BOLD | MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_BLACK); Colors.Menu.Focus = Curses.A_BOLD | MakeColor(Curses.COLOR_WHITE, Curses.COLOR_BLACK); Colors.Menu.HotNormal = Curses.A_BOLD | MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_CYAN); Colors.Menu.Normal = Curses.A_BOLD | MakeColor(Curses.COLOR_WHITE, Curses.COLOR_CYAN); Colors.Menu.Disabled = MakeColor(Curses.COLOR_WHITE, Curses.COLOR_CYAN); Colors.Dialog.Normal = MakeColor(Curses.COLOR_BLACK, Curses.COLOR_WHITE); Colors.Dialog.Focus = MakeColor(Curses.COLOR_BLACK, Curses.COLOR_CYAN); Colors.Dialog.HotNormal = MakeColor(Curses.COLOR_BLUE, Curses.COLOR_WHITE); Colors.Dialog.HotFocus = MakeColor(Curses.COLOR_BLUE, Curses.COLOR_CYAN); Colors.Error.Normal = Curses.A_BOLD | MakeColor(Curses.COLOR_WHITE, Curses.COLOR_RED); Colors.Error.Focus = MakeColor(Curses.COLOR_BLACK, Curses.COLOR_WHITE); Colors.Error.HotNormal = Curses.A_BOLD | MakeColor(Curses.COLOR_YELLOW, Curses.COLOR_RED); Colors.Error.HotFocus = Colors.Error.HotNormal; } else { Colors.TopLevel.Normal = Curses.COLOR_GREEN; Colors.TopLevel.Focus = Curses.COLOR_WHITE; Colors.TopLevel.HotNormal = Curses.COLOR_YELLOW; Colors.TopLevel.HotFocus = Curses.COLOR_YELLOW; Colors.Base.Normal = Curses.A_NORMAL; Colors.Base.Focus = Curses.A_REVERSE; Colors.Base.HotNormal = Curses.A_BOLD; Colors.Base.HotFocus = Curses.A_BOLD | Curses.A_REVERSE; Colors.Menu.Normal = Curses.A_REVERSE; Colors.Menu.Focus = Curses.A_NORMAL; Colors.Menu.HotNormal = Curses.A_BOLD; Colors.Menu.HotFocus = Curses.A_NORMAL; Colors.Dialog.Normal = Curses.A_REVERSE; Colors.Dialog.Focus = Curses.A_NORMAL; Colors.Dialog.HotNormal = Curses.A_BOLD; Colors.Dialog.HotFocus = Curses.A_NORMAL; Colors.Error.Normal = Curses.A_BOLD; Colors.Error.Focus = Curses.A_BOLD | Curses.A_REVERSE; Colors.Error.HotNormal = Curses.A_BOLD | Curses.A_REVERSE; Colors.Error.HotFocus = Curses.A_REVERSE; } }