Serenity Operating System
at master 51 lines 1.4 kB view raw
1/* 2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> 3 * Copyright (c) 2022, the SerenityOS developers. 4 * 5 * SPDX-License-Identifier: BSD-2-Clause 6 */ 7 8#pragma once 9 10#include <AK/Error.h> 11#include <LibGUI/Widget.h> 12#include <LibVT/TerminalWidget.h> 13 14namespace HackStudio { 15 16class TerminalWrapper final : public GUI::Widget { 17 C_OBJECT(TerminalWrapper) 18public: 19 virtual ~TerminalWrapper() override = default; 20 enum class WaitForExit { 21 No, 22 Yes 23 }; 24 ErrorOr<void> run_command(DeprecatedString const&, Optional<DeprecatedString> working_directory = {}, WaitForExit = WaitForExit::No, Optional<StringView> failure_message = {}); 25 ErrorOr<void> kill_running_command(); 26 void clear_including_history(); 27 28 bool user_spawned() const { return m_user_spawned; } 29 VT::TerminalWidget& terminal() { return *m_terminal_widget; } 30 31 enum class WaitForChildOnExit { 32 No, 33 Yes, 34 }; 35 ErrorOr<int> setup_master_pseudoterminal(WaitForChildOnExit = WaitForChildOnExit::Yes); 36 static ErrorOr<void> setup_slave_pseudoterminal(int master_fd); 37 int child_exit_status() const; 38 39 Function<void()> on_command_exit; 40 41private: 42 explicit TerminalWrapper(bool user_spawned = true); 43 44 RefPtr<VT::TerminalWidget> m_terminal_widget; 45 pid_t m_pid { -1 }; 46 bool m_user_spawned { true }; 47 bool m_child_exited { false }; 48 Optional<int> m_child_exit_status; 49}; 50 51}