TerminalWrapper.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. void run_command(const String&);
  16. void kill_running_command();
  17. void clear_including_history();
  18. bool user_spawned() const { return m_user_spawned; }
  19. VT::TerminalWidget& terminal() { return *m_terminal_widget; }
  20. enum class WaitForChildOnExit {
  21. No,
  22. Yes,
  23. };
  24. ErrorOr<int> setup_master_pseudoterminal(WaitForChildOnExit = WaitForChildOnExit::Yes);
  25. static ErrorOr<void> setup_slave_pseudoterminal(int master_fd);
  26. Function<void()> on_command_exit;
  27. private:
  28. explicit TerminalWrapper(bool user_spawned = true);
  29. RefPtr<VT::TerminalWidget> m_terminal_widget;
  30. pid_t m_pid { -1 };
  31. bool m_user_spawned { true };
  32. };
  33. }