Esempio n. 1
0
            /// <summary>
            /// Initializes a new instance of the <see cref="TerminalScreenCopy"/> class.
            /// </summary>
            /// <param name="terminalScreen">The screen from which to copy the content.</param>
            public TerminalScreenCopy(Screen terminalScreen)
            {
                this.CursorRow = terminalScreen.CursorRow;
                this.CursorColumn = terminalScreen.CursorColumn;
                this.CursorHidden = terminalScreen.CursorHidden;
                this.HasFocus = terminalScreen.HasFocus;

                IEnumerable<ScreenLine> lines;
                if (!terminalScreen.useAlternateBuffer && terminalScreen.scrollbackPosition > 0)
                {
                    lines = terminalScreen.scrollbackBuffer.Skip(terminalScreen.scrollbackBuffer.Count - terminalScreen.scrollbackPosition).Take(terminalScreen.mainBuffer.Count);
                    if (terminalScreen.scrollbackPosition < terminalScreen.mainBuffer.Count)
                    {
                        lines = lines.Union(terminalScreen.mainBuffer.Take(terminalScreen.mainBuffer.Count - terminalScreen.scrollbackPosition));
                    }

                    this.CursorRow += terminalScreen.scrollbackPosition;
                }
                else
                {
                    lines = terminalScreen.CurrentBuffer;
                }

                this.cells = lines.Select(l => l.Select(c => c.Clone()).ToArray()).ToArray();
            }
Esempio n. 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ScreenModifier"/> class.
 /// </summary>
 /// <param name="screen">The screen that can be modified with this screen modifier.</param>
 public ScreenModifier(Screen screen)
 {
     this.screen = screen;
     Monitor.Enter(screen.changeLock);
 }