public override void ViewDidLoad() { base.ViewDidLoad(); terminalView = new TerminalView(View.Frame); var t = terminalView.Terminal; var size = new UnixWindowSize(); GetSize(t, ref size); pid = Pty.ForkAndExec("/bin/bash", new string [] { "/bin/bash" }, Terminal.GetEnvironmentVariables(), out fd, size); DispatchIO.Read(fd, (nuint)readBuffer.Length, DispatchQueue.CurrentQueue, ChildProcessRead); terminalView.UserInput += (byte [] data) => { DispatchIO.Write(fd, DispatchData.FromByteBuffer(data), DispatchQueue.CurrentQueue, ChildProcessWrite); }; terminalView.Feed("Welcome to XtermSharp - NSView frontend!\n"); terminalView.TitleChanged += (TerminalView sender, string title) => { View.Window.Title = title; }; terminalView.SizeChanged += (newCols, newRows) => { UnixWindowSize nz = new UnixWindowSize(); GetSize(t, ref nz); var res = Pty.SetWinSize(fd, ref nz); Console.WriteLine(res); }; View.AddSubview(terminalView); }
void HandleSizeChanged(int newCols, int newRows) { UnixWindowSize newSize = new UnixWindowSize(); GetUnixWindowSize(terminalView.Frame, terminalView.Terminal.Rows, terminalView.Terminal.Cols, ref newSize); var res = Pty.SetWinSize(shellFileDescriptor, ref newSize); // TODO: log result of SetWinSize if != 0 UpdateScroller(); }
/// <summary> /// Notifies the subshell that the size has changed /// </summary> public override void NotifySizeChanged(int newCols, int newRows, nfloat width, nfloat height) { UnixWindowSize newSize = new UnixWindowSize(); GetUnixWindowSize(newCols, newRows, width, height, ref newSize); if (IsRunning) { var res = Pty.SetWinSize(shellFileDescriptor, ref newSize); // TODO: log result of SetWinSize if != 0 } else { initialSize = newSize; } }