Example #1
0
        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);
        }
Example #2
0
        /// <summary>
        /// Launches the shell
        /// </summary>
        public virtual void Start(string shellPath = "/bin/bash", string [] args = null, string [] env = null)
        {
            OnStart();

            var shellArgs = args == null ? new string [1] : new string [args.Length + 1];

            shellArgs [0] = shellPath;
            args?.CopyTo(shellArgs, 1);

            ProcessId = Pty.ForkAndExec(shellPath, shellArgs, env ?? Terminal.GetEnvironmentVariables(), out shellFileDescriptor, initialSize);
            DispatchIO.Read(shellFileDescriptor, (nuint)readBuffer.Length, DispatchQueue.CurrentQueue, ChildProcessRead);
        }
Example #3
0
        /// <summary>
        /// Launches the shell
        /// </summary>
        public void StartShell(string shellPath = "/bin/bash", string [] args = null)
        {
            // TODO: throw error if already started
            terminalView.Feed(WelcomeText + "\n");

            var size = new UnixWindowSize();

            GetUnixWindowSize(terminalView.Frame, terminalView.Terminal.Rows, terminalView.Terminal.Cols, ref size);

            var shellArgs = args == null ? new string [1] : new string [args.Length + 1];

            shellArgs [0] = shellPath;
            args?.CopyTo(shellArgs, 1);

            shellPid = Pty.ForkAndExec(shellPath, shellArgs, Terminal.GetEnvironmentVariables(), out shellFileDescriptor, size);
            DispatchIO.Read(shellFileDescriptor, (nuint)readBuffer.Length, DispatchQueue.CurrentQueue, ChildProcessRead);
        }