예제 #1
0
        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);
        }
예제 #2
0
        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;
            }
        }