TerminalWrapper.h 1.3 KB

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