3#include "di/container/ring/ring.h"
4#include "di/io/vector_writer.h"
5#include "dius/sync_file.h"
31using TerminalEvent = di::Variant<APC, terminal::OSC7, terminal::OSC52, terminal::OSC8671, Size, WritePtyString>;
46 : screen(
size, scroll_back_enabled) {}
49 di::Optional<terminal::SavedCursor> saved_cursor;
55 di::Ring<KeyReportingFlags> m_key_reporting_flags_stack;
58 bool m_seamless_navigate_protocol_active {
false };
59 bool m_seamless_navigate_protocol_hide_cursor_on_enter {
false };
73 return const_cast<ScreenState&
>(
const_cast<Terminal const&
>(*this).active_screen());
113 auto outgoing_events() -> di::Vector<TerminalEvent> {
return di::move(m_outgoing_events); }
124 return active_screen().m_seamless_navigate_protocol_active &&
125 active_screen().m_seamless_navigate_protocol_hide_cursor_on_enter;
133 void on_parser_result(
DCS&& dcs);
134 void on_parser_result(
OSC&& osc);
135 void on_parser_result(
APC&& apc);
136 void on_parser_result(
CSI&& csi);
137 void on_parser_result(
Escape&& escape);
142 void put_char(c32 c);
145 auto min_row_inclusive() const -> u32 {
return 0; }
146 auto min_col_inclusive() const -> u32 {
return 0; }
148 auto max_row_inclusive() const -> u32 {
return row_count() - 1; }
149 auto max_col_inclusive() const -> u32 {
return col_count() - 1; }
153 void set_use_alternate_screen_buffer(
bool b);
171 void dcs_decrqss(Params
const& params, di::StringView data);
172 void dcs_xtgettcap(Params
const& params, di::StringView data);
174 void osc_7(di::StringView data);
175 void osc_8(di::StringView data);
176 void osc_52(di::StringView data);
177 void osc_66(di::StringView data);
178 void osc_133(di::StringView data);
179 void osc_8671(di::StringView data);
181 void csi_ich(Params
const& params);
182 void csi_cuu(Params
const& params);
183 void csi_cud(Params
const& params);
184 void csi_cuf(Params
const& params);
185 void csi_cub(Params
const& params);
186 void csi_cpl(Params
const& params);
187 void csi_cnl(Params
const& params);
188 void csi_cup(Params
const& params);
189 void csi_cha(Params
const& params);
190 void csi_ed(Params
const& params);
191 void csi_el(Params
const& params);
192 void csi_il(Params
const& params);
193 void csi_dl(Params
const& params);
194 void csi_dch(Params
const& params);
195 void csi_su(Params
const& params);
196 void csi_sd(Params
const& params);
197 void csi_ech(Params
const& params);
198 void csi_rep(Params
const& params);
199 void csi_da1(Params
const& params);
200 void csi_da2(Params
const& params);
201 void csi_da3(Params
const& params);
202 void csi_vpa(Params
const& params);
203 void csi_hvp(Params
const& params);
204 void csi_tbc(Params
const& params);
205 void csi_decset(Params
const& params);
206 void csi_decrst(Params
const& params);
207 void csi_decrqm(Params
const& params);
208 void csi_decscusr(Params
const& params);
209 void csi_sgr(Params
const& params);
210 void csi_dsr(Params
const& params);
211 void csi_decstbm(Params
const& params);
212 void csi_scosc(Params
const& params);
213 void csi_scorc(Params
const& params);
214 void csi_decstr(Params
const& params);
215 void csi_xshiftescape(Params
const& params);
216 void csi_xtwinops(Params
const& params);
218 void csi_set_key_reporting_flags(Params
const& params);
219 void csi_get_key_reporting_flags(Params
const& params);
220 void csi_push_key_reporting_flags(Params
const& params);
221 void csi_pop_key_reporting_flags(Params
const& params);
225 u64 m_next_hyperlink_id { 1 };
227 ScreenState m_primary_screen;
228 di::Box<ScreenState> m_alternate_screen;
230 Size m_available_size;
231 bool m_80_col_mode {
false };
232 bool m_132_col_mode {
false };
233 bool m_allow_80_132_col_mode {
false };
234 bool m_force_terminal_size {
false };
235 bool m_allow_force_terminal_size {
false };
237 di::Vector<u32> m_tab_stops;
238 bool m_cursor_hidden {
false };
239 bool m_disable_drawing {
false };
241 bool m_reverse_video {
false };
242 di::Optional<c32> m_last_graphics_charcter { 0 };
253 di::Optional<terminal::OSC7> m_cwd;
254 bool m_in_band_size_reports {
false };
256 di::Vector<TerminalEvent> m_outgoing_events;
auto key_reporting_flags() const -> KeyReportingFlags
Definition terminal.h:96
void invalidate_all()
Definition terminal.cpp:1124
auto cursor_style() const -> CursorStyle
Definition terminal.h:79
auto mouse_encoding() const -> MouseEncoding
Definition terminal.h:100
void soft_reset()
Definition terminal.cpp:1161
auto cursor_col() const -> u32
Definition terminal.h:77
auto bracked_paste_mode() const -> BracketedPasteMode
Definition terminal.h:107
auto seamless_navigation_protocol_active() const -> bool
Definition terminal.h:119
void reset_mouse_reporting()
Definition terminal.h:105
Terminal(u64 id, Size const &size)
Definition terminal.cpp:29
auto outgoing_events() -> di::Vector< TerminalEvent >
Definition terminal.h:113
auto active_screen() const -> ScreenState const &
Definition terminal.cpp:1154
void set_allow_force_terminal_size(bool b=true)
Definition terminal.h:115
auto shift_escape_options() const -> ShiftEscapeOptions
Definition terminal.h:103
auto col_count() const -> u32
Definition terminal.h:89
void hide_cursor()
Definition terminal.h:117
auto focus_event_mode() const -> FocusEventMode
Definition terminal.h:102
void set_visible_size(Size const &size)
Definition terminal.cpp:1097
auto mouse_protocol() const -> MouseProtocol
Definition terminal.h:99
auto total_rows() const -> u32
Definition terminal.h:85
auto visual_scroll_offset() const -> u64
Definition terminal.h:86
auto row_count() const -> u32
Definition terminal.h:88
friend auto make_mode_handler() -> ModeHandler
auto cursor_row() const -> u32
Definition terminal.h:76
auto visible_size() const -> Size
Definition terminal.h:93
auto size() const -> Size
Definition terminal.h:90
auto cursor_hidden() const -> bool
Definition terminal.h:78
auto alternate_scroll_mode() const -> AlternateScrollMode
Definition terminal.h:98
void on_parser_results(di::Span< ParserResult > results)
Definition terminal.cpp:32
auto active_screen() -> ScreenState &
Definition terminal.h:72
auto seamless_navigate_protocol_hide_cursor_on_enter() const -> bool
Definition terminal.h:123
auto application_cursor_keys_mode() const -> ApplicationCursorKeysMode
Definition terminal.h:95
auto state_as_escape_sequences() const -> di::String
Definition terminal.cpp:1197
auto in_alternate_screen_buffer() const -> bool
Definition terminal.h:101
auto allowed_to_draw() const -> bool
Definition terminal.h:82
auto reverse_video() const -> bool
Definition terminal.h:80
Represents the visible contents of the terminal (with no scroll back).
Definition screen.h:69
ScrollBackEnabled
Definition screen.h:71
AutoWrapMode
Whether or not auto-wrap (DEC mode 7) is enabled.
Definition screen.h:23
@ Enabled
Definition screen.h:25
ModeSupport
Definition mode.h:183
Definition clipboard.h:10
ShiftEscapeOptions
Definition mouse_event_io.h:27
@ OverrideApplication
Definition mouse_event_io.h:28
MouseEncoding
Definition mouse_event_io.h:61
@ X10
Definition mouse_event_io.h:62
KeyReportingFlags
Definition key_event_io.h:27
@ None
Definition key_event_io.h:28
AlternateScrollMode
Definition mouse_event_io.h:14
@ Enabled
Definition mouse_event_io.h:16
CursorStyle
Definition cursor_style.h:6
@ SteadyBar
Definition cursor_style.h:12
MouseProtocol
Definition mouse_event_io.h:44
@ None
Definition mouse_event_io.h:45
BracketedPasteMode
Definition paste_event_io.h:11
ApplicationCursorKeysMode
Definition key_event_io.h:14
@ Disabled
Definition key_event_io.h:15
auto make_mode_handler() -> ModeHandler
di::Variant< APC, terminal::OSC7, terminal::OSC52, terminal::OSC8671, Size, WritePtyString > TerminalEvent
Definition terminal.h:31
FocusEventMode
Definition focus_event_io.h:10
@ Disabled
Definition focus_event_io.h:11
Definition escape_sequence_parser.h:46
Definition escape_sequence_parser.h:56
Definition escape_sequence_parser.h:81
Definition escape_sequence_parser.h:22
Definition escape_sequence_parser.h:69
terminal::ModeSupport(* query_mode)(Terminal &)
Definition terminal.h:36
void(* set_mode)(Terminal &, bool)
Definition terminal.h:37
bool is_private
Definition terminal.h:35
u32 mode
Definition terminal.h:34
Definition escape_sequence_parser.h:35
Definition escape_sequence_parser.h:12
di::Vector< byte > data
Definition terminal.h:24
di::String string
Definition terminal.h:28