3#include "di/container/string/string_view.h"
4#include "di/container/tree/tree_map.h"
5#include "di/container/vector/vector.h"
6#include "di/function/container/function.h"
7#include "di/sync/atomic.h"
8#include "di/sync/synchronized.h"
9#include "di/vocab/error/result.h"
10#include "di/vocab/pointer/box.h"
11#include "dius/sync_file.h"
12#include "dius/system/process.h"
13#include "dius/thread.h"
32 di::Function<void(
Pane&, di::Optional<dius::system::ProcessResult>)>
did_exit;
70 auto result =
clone();
71 result.cwd = di::move(
cwd);
75 di::Vector<di::TransparentString>
command {};
80 di::Optional<di::Path>
cwd {};
82 di::TransparentStringView
term {
"xterm-ttx"_tsv };
90 static auto create_from_replay(u64
id, di::Optional<di::Path> cwd, di::PathView replay_path,
91 di::Optional<di::Path> save_state_path,
Size const& size,
PaneHooks hooks)
92 -> di::Result<di::Box<Pane>>;
96 static auto create_mock(u64
id = 0, di::Optional<di::Path> cwd = {}) -> di::Box<Pane>;
98 explicit Pane(u64
id, di::Optional<di::Path> cwd, dius::SyncFile pty_controller,
Size const& size,
99 dius::system::ProcessHandle process,
PaneHooks hooks)
101 , m_pty_controller(di::move(pty_controller))
102 , m_terminal(di::in_place,
id, size)
104 , m_cwd(di::move(cwd))
105 , m_hooks(di::move(hooks)) {}
108 auto id()
const {
return m_id; }
133 auto save_state(di::PathView path) -> di::Result<>;
150 void write_pty_string(di::StringView data);
151 void write_pty_string(di::TransparentStringView data);
152 void update_selection_after_scrolling();
155 void reset_viewport_scroll();
158 di::Atomic<bool> m_done {
false };
159 di::Atomic<bool> m_capture {
true };
160 di::Optional<MousePosition> m_last_mouse_position;
161 di::Optional<terminal::AbsolutePosition> m_pending_selection_start;
162 MouseClickTracker m_mouse_click_tracker { 3 };
163 di::Synchronized<dius::SyncFile> m_pty_controller;
164 di::Function<void()> m_restore_termios;
165 di::Synchronized<Terminal> m_terminal;
166 di::Optional<Size> m_desired_visible_size;
167 dius::system::ProcessHandle m_process;
169 u32 m_vertical_scroll_offset { 0 };
170 u32 m_horizontal_scroll_offset { 0 };
172 di::Optional<di::Path> m_cwd;
176 dius::Thread m_process_thread;
177 dius::Thread m_reader_thread;
178 dius::Thread m_pipe_writer_thread;
179 dius::Thread m_pipe_reader_thread;
Definition focus_event.h:7
Definition key_event.h:24
Definition mouse_event.h:23
auto accepts_scrolling() -> bool
Query if it is valid to try to scroll the pane.
Definition pane.cpp:784
void resize(Size const &size)
Definition pane.cpp:543
void exit()
Definition pane.cpp:772
void soft_reset()
Definition pane.cpp:701
void scroll_page_up()
Definition pane.cpp:621
void send_clipboard(terminal::SelectionType selection_type, di::Vector< byte > data)
Definition pane.cpp:688
void stop_capture()
Definition pane.cpp:697
auto save_state(di::PathView path) -> di::Result<>
Definition pane.cpp:680
static auto create_from_replay(u64 id, di::Optional< di::Path > cwd, di::PathView replay_path, di::Optional< di::Path > save_state_path, Size const &size, PaneHooks hooks) -> di::Result< di::Box< Pane > >
Definition pane.cpp:66
void invalidate_all()
Definition pane.cpp:537
~Pane()
Definition pane.cpp:267
static auto create(u64 id, CreatePaneArgs args, Size const &size) -> di::Result< di::Box< Pane > >
Definition pane.cpp:118
auto seamless_navigate(terminal::OSC8671 &&osc_8671) -> bool
Definition pane.cpp:790
static auto create_mock(u64 id=0, di::Optional< di::Path > cwd={}) -> di::Box< Pane >
Definition pane.cpp:261
void scroll_to_top()
Definition pane.cpp:631
auto id() const
Definition pane.h:108
void scroll(Direction direction, i32 amount_in_cells)
Definition pane.cpp:556
void scroll_next_command()
Definition pane.cpp:657
auto current_working_directory() const -> di::Optional< di::PathView >
Get the pane's current working directory.
Definition pane.h:146
void scroll_page_down()
Definition pane.cpp:626
auto draw(Renderer &renderer) -> RenderedCursor
Definition pane.cpp:277
void scroll_prev_command()
Definition pane.cpp:649
Pane(u64 id, di::Optional< di::Path > cwd, dius::SyncFile pty_controller, Size const &size, dius::system::ProcessHandle process, PaneHooks hooks)
Definition pane.h:98
void scroll_to_bottom()
Definition pane.cpp:639
auto event(KeyEvent const &event) -> bool
Definition pane.cpp:388
void copy_last_command(bool include_command)
Definition pane.cpp:665
Definition paste_event.h:8
SelectionType
Represents the type of selection being modifed by an OSC 52 sequence.
Definition osc_52.h:8
Definition clipboard.h:10
Direction
Definition direction.h:7
di::Variant< APC, terminal::OSC7, terminal::OSC52, terminal::OSC8671, Size, WritePtyString > TerminalEvent
Definition terminal.h:31
bool pipe_output
Definition pane.h:83
di::TransparentStringView term
Definition pane.h:82
di::Optional< di::Path > cwd
Definition pane.h:80
di::Optional< di::Path > capture_command_output_path
Definition pane.h:76
di::Optional< di::Path > replay_path
Definition pane.h:77
PaneHooks hooks
Definition pane.h:85
di::Vector< di::TransparentString > command
Definition pane.h:75
bool mock
Definition pane.h:84
auto with_cwd(di::Optional< di::Path > cwd) const &-> CreatePaneArgs
Definition pane.h:69
di::Optional< di::String > pipe_input
Definition pane.h:79
di::Optional< di::Path > terminfo_dir
Definition pane.h:81
di::Optional< di::Path > save_state_path
Definition pane.h:78
auto clone() const -> CreatePaneArgs
Definition pane.h:54
di::Function< void(terminal::OSC8671)> did_receive_seamless_navigation
Callback when a seamless navigation message is seen.
Definition pane.h:41
di::Function< void(di::StringView)> did_finish_output
Callback with the results on reading from the output pipe.
Definition pane.h:47
di::Function< void(terminal::OSC52, bool)> did_selection
Application controlled callback when a clipboard set/request is invoked.
Definition pane.h:38
di::Function< void()> did_update_cwd
Callback when the pane's current working directory changes.
Definition pane.h:50
di::Function< void(Pane &, di::Optional< dius::system::ProcessResult >)> did_exit
Application controlled callback when the internal process exits.
Definition pane.h:32
di::Function< void(di::StringView)> apc_passthrough
Application controlled callback when APC command is set.
Definition pane.h:44
di::Function< void(Pane &)> did_update
controlled callback when the terminal buffer has updated.
Definition pane.h:35
Represents an OSC 52 sequence, which allows for modifying or querying the clipboard.
Definition osc_52.h:51
Represents a application current working directory report.
Definition osc_7.h:14
Represents a seamless pane navigation request.
Definition osc_8671.h:93